开发者指南

视频审核

VCR 支持对BOS视频、VOD媒资、URL视频审核。对于不同来源的视频,需要按照如下规则拼接视频路径source:

  • 对于 BOS 视频,source=bos://{bucket}/{object}
  • 对于 VOD 媒资原视频,source=vod://{mediaId}
  • 对于 VOD 媒资转码后视频,source="vod://<vod-media-id>-<preset>"
  • 对于 URL 视频,source="<http(s)-url">

发起视频审核

指定视频路径发起视频审核。

审核 BOS 视频

根据BOS bucket和BOS key直接发起审核。需要说明,使用本方法需要将object配置公共GetObject权限,参考设置BOS bucket权限

代码示例:

public void putBosMedia(VcrClient vcrClient, String bucket, String object) {
    vcrClient.putMedia("bos://" + bucket + "/" + object);
}

审核 VOD 媒资原视频

根据 VOD 媒资ID直接发起审核。

代码示例:

public void putVodMedia(VcrClient vcrClient, String mediaId) {
    vcrClient.putMedia("vod://" + mediaId);
}

审核 VOD 媒资转码后视频

根据 VOD 媒资ID和 VOD 转码模板名称发起审核。

代码示例:

public void putVodMedia(VcrClient vcrClient, String mediaId, String preset) {
    // preset is vod preset
    vcrClient.putMedia("vod://" + mediaId + "-" + preset);
}

审核 URL 视频

根据视频 URL 直接发起审核。

代码示例:

public void putUrlMedia(VcrClient vcrClient, String url) {
    vcrClient.putMedia(url);
}

审核视频配置审核模板等参数

提交视频时可以配置视频描述、审核模板和通知名称等可选参数。

代码示例:

public void putMedia(VcrClient vcrClient, String source, String preset, String notification) {
    PutMediaRequest request = new PutMediaRequest();
    request.setSource(source);
    request.setDescription("this is a test media");
    // preset is vcr preset
    request.setPreset(preset);
    request.setNotification(notification);
    vcrClient.putMedia(request);
}

说明:

审核包含鉴权参数的 URL 视频,将PutMediaRequestauth成员设置为鉴权参数即可。

查询视频审核结果

指定视频路径查询视频的审核结果。

代码示例:

public void getMedia(VcrClient vcrClient, String source) {
    GetMediaResponse response = vcrClient.getMedia(source);
    String status = response.getStatus();
    String label = response.getLabel();
    for (CheckResult result : response.getResults()) {
        String type = result.getType();
        for (ResultItem item : result.getItems()) {
            String target = item.getTarget();
            Integer timeInSeconds = item.getTimeInSeconds();
            String label = item.getLabel();
            Double confidence = item.getConfidence();
            String extra = item.getExtra();
            String subType = item.getSubType();
            Evidence evidence = item.getEvidence();
        }
    }
}

说明:

  1. 视频审核结果格式和各字段含义参考VCR API
  2. 对于包含鉴权参数的 URL 视频,在查询审核结果时,无需使用鉴权参数。

直播审核

发起直播审核

指定直播流地址发起直播审核。

代码示例:

public void putStream(VcrClient vcrClient, String source) {
    vcrClient.putStream(source);
}

说明:

提交直播审核时可以配置审核模板和通知名称,参考putStream(PutStreamRequest)函数。

查询直播审核结果

指定直播流地址查询直播的审核结果。

代码示例:

public void getStream(VcrClient vcrClient, String source) {
    GetStreamResponse response = vcrClient.getStream(source);
    String status = response.getStatus();
    String label = response.getLabel();
    for (CheckResult result : response.getResults()) {
        String type = result.getType();
        for (ResultItem item : result.getItems()) {
            String target = item.getTarget();
            String liveTime = item.getLiveTime();
            String label = item.getLabel();
            Double confidence = item.getConfidence();
            String extra = item.getExtra();
            String subType = item.getSubType();
            Evidence evidence = item.getEvidence();
        }
    }
}

说明:

  • getStream(String)支持查询最近1个小时的审核结果;
  • getStream(GetStreamRequest)支持查询指定时间段的审核结果;
  • 直播审核结果中的liveTime/startTime/endTime字段均为String,可以通过DateUtils.parseAlternateIso8601Date将String转为Date。

视频审核结果格式和各字段含义参考VCR API

图片审核

VCR支持 BOS 图片、HTTP图片审核。对于不同来源的图片,需要按照如下规则拼接图片路径source:

  • 对于BOS图片,source=bos://{bucket}/{object}
  • 对于HTTP图片,source={url}

图片同步审核

图片同步审核,审核结果在HTTP Response中返回。

代码示例:

public void putImage(VcrClient vcrClient, String source) {
    PutImageResponse response = vcrClient.putImage(source);
    String label = response.getLabel();
    for (CheckResult result : response.getResults()) {
        String type = result.getType();
        for (ResultItem item : result.getItems()) {
            String target = item.getTarget();
            String label = item.getLabel();
            Double confidence = item.getConfidence();
            String extra = item.getExtra();
            String subType = item.getSubType();
            Evidence evidence = item.getEvidence();
        }
    }
}

图片指定模板审核。

代码示例:

public void putImage(VcrClient vcrClient, PutImageRequest request) {
    PutImageResponse response = vcrClient.putImage(request);
    String label = response.getLabel();
    for (CheckResult result : response.getResults()) {
        String type = result.getType();
        for (ResultItem item : result.getItems()) {
            String target = item.getTarget();
            String label = item.getLabel();
            Double confidence = item.getConfidence();
            String extra = item.getExtra();
            String subType = item.getSubType();
            Evidence evidence = item.getEvidence();
        }
    }
}

图片异步审核

图片异步审核,支持GIF图片(帧数不能超过100张)审核,审核结果通过通知服务进行回调。

代码示例:

public void putImageAsync(VcrClient vcrClient, String source, String preset, String notification) {
    PutImageAsyncResponse response = vcrClient.putImageAsync(source, preset, notification);
}

图片异步审核查询

图片异步审核结果查询,结果保存时间10分钟。

代码示例:

public void getImageAsync(VcrClient vcrClient, String source, String preset) {
    GetImageAsyncResponse response = vcrClient.getImageAsync(source, preset);
    String label = response.getLabel();
    String status = response.getStatus();
        for (CheckResult result : response.getResults()) {
            String type = result.getType();
            for (ResultItem item : result.getItems()) {
                String target = item.getTarget();
                String label = item.getLabel();
                Double confidence = item.getConfidence();
                String extra = item.getExtra();
                String subType = item.getSubType();
                Evidence evidence = item.getEvidence();
            }
        }
    }

图片审核结果格式和各字段含义参考VCR API

文本审核

对文本进行审核。

代码示例:

public void putText(VcrClient vcrClient, String text) {
    PutTextResponse response = vcrClient.putText(text);
    String label = response.getLabel();
    for (CheckResult result : response.getResults()) {
        String type = result.getType();
        for (ResultItem item : result.getItems()) {
            String label = item.getLabel();
            Double confidence = item.getConfidence();
            String subType = item.getSubType();
            String extra = item.getExtra();
        }
    }
}

文本指定模板审核。

代码示例:

public void putText(VcrClient vcrClient, PutTextRequest request) {
    PutTextResponse response = vcrClient.putText(request);
    String label = response.getLabel();
    for (CheckResult result : response.getResults()) {
        String type = result.getType();
        for (ResultItem item : result.getItems()) {
            String label = item.getLabel();
            Double confidence = item.getConfidence();
            String subType = item.getSubType();
            String extra = item.getExtra();
        }
    }
}

文本审核结果格式和各字段含义参考VCR API

自定义face库

face库集素材添加

添加库集图片。

代码示例:

public void addFaceImage(VcrClient vcrClient, String lib, String brief, String image) {
    vcrClient.addFaceImage(lib, brief, image);
}

face库集素材删除

删除指定的face库集素材,需指定face库集名称。

代码示例:

public void delFaceImage(VcrClient vcrClient, String lib, String brief, String image) {
    vcrClient.delFaceImage(lib, brief, image);
}

face库集素材列表

根据face库集名称查询face库集素材列表。

代码示例:

public void getFaceBrief(VcrClient vcrClient, String lib, String brief) {
    LibImageResponse response = vcrClient.getFaceBrief(lib, brief);
    for (String image : response.getImages()) {
        String imageUrl = image;
    }
}

face库集删除

根据face库集名称删除face库集。

代码示例:

public void delFaceBrief(VcrClient vcrClient, String lib, String brief) {
    vcrClient.delFaceBrief(lib, brief);
}

face库列表查询

根据face库名查询库集合。

代码示例:

public void getFaceLib(VcrClient vcrClient, String lib) {
    LibBriefResponse response = vcrClient.getFaceLib(lib);
    for (String brief : response.getBriefs()) {
        String briefName = brief;
    }
}

文本审核结果格式和各字段含义参考VCR API

自定义logo库

logo库集素材添加

添加库集图片。

代码示例:

public void addLogoImage(VcrClient vcrClient, String lib, String brief, String image) {
    vcrClient.addLogoImage(lib, brief, image);
}

logo库集素材删除

删除指定的logo库集素材。

代码示例:

public void delLogoImage(VcrClient vcrClient, String lib, String image) {
    vcrClient.delLogoImage(lib, image);
}

logo库集素材列表

根据logo库集名称查询logo库集素材列表。

代码示例:

public void getLogoBrief(VcrClient vcrClient, String lib, String brief) {
    LibImageResponse response = vcrClient.getLogoBrief(lib, brief);
    for (String image : response.getImages()) {
        String imageUrl = image;
    }
}

logo库集删除

删除指定的logo库集。

代码示例:

public void delLogoBrief(VcrClient vcrClient, String lib, String brief) {
    vcrClient.delLogoBrief(lib, brief);
}

logo库列表查询

根据logo库名查询库集合。

代码示例:

public void getLogoLib(VcrClient vcrClient, String lib) {
    LibBriefResponse response = vcrClient.getLogoLib(lib);
    for (String brief : response.getBriefs()) {
        String briefName = brief;
    }
}

文本审核结果格式和各字段含义参考VCR API

日志

VCR Java SDK发布版本中增加了logback作为slf4j的实现,开发者可以直接使用。如果工程中有其他框架实现,例如log4j,也可以用来替代logback。

默认日志

如果使用默认的logback,需要配置logback.xml到classpath中。不做配置时,日志级别默认为DEBUG。

<configuration>
    <property name="LOG_HOME" value="./log/"/>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!-- encoders are assigned the type
             ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>${LOG_HOME}/VCRUnitTest.%d{yyyy-MM-dd}.log</FileNamePattern>
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>10MB</MaxFileSize>
        </triggeringPolicy>
    </appender>

    <root level="info">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="FILE"/>
    </root>
 </configuration>

自有日志模块

如果使用自己的日志实现模块,例如项目依赖于Maven,则可以参考下面的配置到pom.xml中来去除logback。

<?xml version="1.0" encoding="utf-8"?>

<dependency>
  <groupId>com.baidubce</groupId>
  <artifactId>bce-java-sdk</artifactId>
  <version>${bce.sdk.version}</version>
  <exclusions>
    <exclusion>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
    </exclusion>
    <exclusion>
      <artifactId>logback-core</artifactId>
      <groupId>ch.qos.logback</groupId>
    </exclusion>
    <exclusion>
      <groupId>org.slf4j</groupId>
      <artifactId>jcl-over-slf4j</artifactId>
    </exclusion>
  </exclusions>
</dependency>