本文由簡體中文內容自動轉碼而成。阿里雲不保證此自動轉碼的準確性、完整性及時效性。本文内容請以簡體中文版本為準。

視頻審核2.0版SDK及接入指南

更新時間:2024-12-20 19:50

視頻審核2.0版支援SDK方式調用和原生HTTPS方式調用。推薦您使用SDK接入,可免去簽名驗證以及Body格式構建等細節步驟。本文介紹視頻審核2.0版接入的方式。

步驟一:開通服務

訪問開通內容審核2.0版服務頁面,開通視頻審核2.0版服務。介面接入使用後系統會按使用量自動出賬,具體資訊,請參見計費說明

開通視頻審核2.0版服務後,預設付費方式是按量後付費,且按照實際用量結算當日費用,不調用服務不收費。

步驟二:為RAM使用者授權

在接入SDK或者API之前,您需要為RAM使用者授權。您可以為RAM使用者建立一個存取金鑰(AccessKey)。在調用阿里雲API時您需要使用AccessKey完成身分識別驗證。擷取方式,請參見擷取AccessKey

  1. 使用Resource Access Management員登入RAM控制台

  2. 建立RAM使用者。

    具體操作,請參見建立RAM使用者

  3. 向RAM使用者授權系統策略許可權:AliyunYundunGreenWebFullAccess

    具體操作,請參見為RAM使用者授權

    完成以上配置後,您可以使用RAM使用者調用Alibaba Content Security ServiceAPI。

步驟三:安裝並接入視頻審核服務

目前支援的接入地區為:

地區

外網接入地址

內網接入地址

支援的服務

地區

外網接入地址

內網接入地址

支援的服務

新加坡

green-cip.ap-southeast-1.aliyuncs.com

green-cip-vpc.ap-southeast-1.aliyuncs.com

videoDetection_global、liveStreamDetection_global

說明

如果需要其他語言的SDK範例程式碼,您可以通過OpenAPI 開發人員門戶線上調試工具調試API介面,該工具會自動產生相應API的SDK調用範例程式碼。線上調試API介面如下:

阿里雲SDK代碼通過定義ALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRET環境變數來建立預設的訪問憑證。調用介面時,程式直接存取憑證,讀取您的存取金鑰(即AccessKey)並自動完成鑒權。您在接入SDK程式碼範例之前,請先配置環境變數。具體操作,請參見身分識別驗證配置

API介面欄位說明請參考視頻檔案審核增強版2.0版APIApsaraVideo for Live流審核增強版2.0版API

Java SDK
Python SDK
PHP SDK
Go SDK
C# SDK
Node.js SDK
HTTPS原生調用

支援Java 1.8及以上版本。

原始代碼,請參見Java SDK源碼或者Java SDK源碼(OSS路徑)

支援以下三種類型的視頻檢測。

對公網可訪問視頻進行檢測
對本地視頻進行檢測
對OSS視頻進行檢測

使用情境

當需要審核的視頻可通過公網連結訪問時,視頻審核2.0版服務可通過視頻URL擷取檔案後進行審核。

  1. pom.xml中添加如下依賴,就可以在Maven工程中使用SDK。

    <dependency>
      <groupId>com.aliyun</groupId>
      <artifactId>green20220302</artifactId>
      <version>2.19.1</version>
    </dependency>
  2. 接入Java SDK。

    • 提交視頻檢測任務程式碼範例

      import com.alibaba.fastjson.JSON;
      import com.alibaba.fastjson.JSONObject;
      import com.aliyun.green20220302.Client;
      import com.aliyun.green20220302.models.VideoModerationRequest;
      import com.aliyun.green20220302.models.VideoModerationResponse;
      import com.aliyun.green20220302.models.VideoModerationResponseBody;
      import com.aliyun.teaopenapi.models.Config;
      
      
      public class VideoModerationDemo {
      
          public static void main(String[] args) throws Exception {
              Config config = new Config();
             /**
               * 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
               * 常見擷取環境變數方式:
               * 方式一:
               *     擷取RAM使用者AccessKey ID:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     擷取RAM使用者AccessKey Secret:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               * 方式二:
               *     擷取RAM使用者AccessKey ID:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     擷取RAM使用者AccessKey Secret:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               */
              config.setAccessKeyId("建議從環境變數中擷取RAM使用者AccessKey ID");
              config.setAccessKeySecret("建議從環境變數中擷取RAM使用者AccessKey Secret");
              //接入地區和地址請根據實際情況修改。
              config.setRegionId("ap-southeast-1");
              config.setEndpoint("green-cip.ap-southeast-1.aliyuncs.com");
              //串連時逾時時間,單位毫秒(ms)。
              config.setReadTimeout(6000);
              //讀取時逾時時間,單位毫秒(ms)。
              config.setConnectTimeout(3000);
              //設定http代理。
              //config.setHttpProxy("http://10.10.xx.xx:xxxx");
              //設定https代理。
              //config.setHttpsProxy("https://10.10.xx.xx:xxxx");
              Client client = new Client(config);
      
              JSONObject serviceParameters = new JSONObject();
              serviceParameters.put("url", "https://xxx.oss.aliyuncs.com/xxx.mp4");
      
              VideoModerationRequest videoModerationRequest = new VideoModerationRequest();
              // 檢測類型:videoDetection_global
              videoModerationRequest.setService("videoDetection_global");
              videoModerationRequest.setServiceParameters(serviceParameters.toJSONString());
      
              try {
                  VideoModerationResponse response = client.videoModeration(videoModerationRequest);
                  if (response.getStatusCode() == 200) {
                      VideoModerationResponseBody result = response.getBody();
                      System.out.println(JSON.toJSONString(result));
                      System.out.println("requestId = " + result.getRequestId());
                      System.out.println("code = " + result.getCode());
                      System.out.println("msg = " + result.getMessage());
                      Integer code = result.getCode();
                      if (200 == code) {
                          VideoModerationResponseBody.VideoModerationResponseBodyData data = result.getData();
                          System.out.println("taskId = [" + data.getTaskId() + "]");
                      } else {
                          System.out.println("video moderation not success. code:" + code);
                      }
                  } else {
                      System.out.println("response not success. status:" + response.getStatusCode());
                  }
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      }
    • 擷取視頻檢測任務程式碼範例

      import com.alibaba.fastjson.JSON;
      import com.alibaba.fastjson.JSONObject;
      import com.aliyun.green20220302.Client;
      import com.aliyun.green20220302.models.VideoModerationResultRequest;
      import com.aliyun.green20220302.models.VideoModerationResultResponse;
      import com.aliyun.green20220302.models.VideoModerationResultResponseBody;
      import com.aliyun.teaopenapi.models.Config;
      
      public class VideoModerationResultDemo {
      
          public static void main(String[] args) throws Exception {
              Config config = new Config();
              /**
               * 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
               * 常見擷取環境變數方式:
               * 方式一:
               *     擷取RAM使用者AccessKey ID:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     擷取RAM使用者AccessKey Secret:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               * 方式二:
               *     擷取RAM使用者AccessKey ID:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     擷取RAM使用者AccessKey Secret:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               */
              config.setAccessKeyId("建議從環境變數中擷取RAM使用者AccessKey ID");
              config.setAccessKeySecret("建議從環境變數中擷取RAM使用者AccessKey Secret");
              //接入地區和地址請根據實際情況修改。
              config.setRegionId("ap-southeast-1");
              config.setEndpoint("green-cip.ap-southeast-1.aliyuncs.com");
              //串連時逾時時間,單位毫秒(ms)。
              config.setReadTimeout(6000);
              //讀取時逾時時間,單位毫秒(ms)。
              config.setConnectTimeout(3000);
              //設定http代理。
              //config.setHttpProxy("http://10.10.xx.xx:xxxx");
              //設定https代理。
              //config.setHttpsProxy("https://10.10.xx.xx:xxxx");
              Client client = new Client(config);
      
              JSONObject serviceParameters = new JSONObject();
              // 提交任務時返回的taskId。
              serviceParameters.put("taskId", "vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****");
      
      
              VideoModerationResultRequest videoModerationResultRequest = new VideoModerationResultRequest();
              // 檢測類型:videoDetection_global
              videoModerationResultRequest.setService("videoDetection_global");
              videoModerationResultRequest.setServiceParameters(serviceParameters.toJSONString());
      
              try {
                  VideoModerationResultResponse response = client.videoModerationResult(videoModerationResultRequest);
                  if (response.getStatusCode() == 200) {
                      VideoModerationResultResponseBody result = response.getBody();
                      System.out.println("requestId=" + result.getRequestId());
                      System.out.println("code=" + result.getCode());
                      System.out.println("msg=" + result.getMessage());
                      if (200 == result.getCode()) {
                          VideoModerationResultResponseBody.VideoModerationResultResponseBodyData data = result.getData();
                          System.out.println("dataId = " + data.getDataId());
                          System.out.println("riskLevel = " + data.getRiskLevel());
                          System.out.println("audioResult = " + JSON.toJSONString(data.getAudioResult()));
                          System.out.println("frameResult = " + JSON.toJSONString(data.getFrameResult()));
                      } else {
                          System.out.println("video moderation result not success. code:" + result.getCode());
                      }
                  } else {
                      System.out.println("response not success. status:" + response.getStatusCode());
                  }
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      }
    • 取消ApsaraVideo for Live流檢測任務程式碼範例

      import com.alibaba.fastjson.JSONObject;
      import com.aliyun.green20220302.Client;
      import com.aliyun.green20220302.models.VideoModerationCancelRequest;
      import com.aliyun.green20220302.models.VideoModerationCancelResponse;
      import com.aliyun.green20220302.models.VideoModerationCancelResponseBody;
      import com.aliyun.teaopenapi.models.Config;
      
      
      public class VideoModerationCancelDemo {
      
          public static void main(String[] args) throws Exception {
              Config config = new Config();
              /**
               * 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
               * 常見擷取環境變數方式:
               * 方式一:
               *     擷取RAM使用者AccessKey ID:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     擷取RAM使用者AccessKey Secret:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               * 方式二:
               *     擷取RAM使用者AccessKey ID:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     擷取RAM使用者AccessKey Secret:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               */
              config.setAccessKeyId("建議從環境變數中擷取RAM使用者AccessKey ID");
              config.setAccessKeySecret("建議從環境變數中擷取RAM使用者AccessKey Secret");
              //接入地區和地址請根據實際情況修改
              config.setRegionId("ap-southeast-1");
              config.setEndpoint("green-cip.ap-southeast-1.aliyuncs.com");
              //串連時逾時時間,單位毫秒(ms)。
              config.setReadTimeout(6000);
              //讀取時逾時時間,單位毫秒(ms)。
              config.setConnectTimeout(3000);
              //設定http代理。
              //config.setHttpProxy("http://xx.xx.xx.xx:xxxx");
              //設定https代理。
              //config.setHttpsProxy("https://xx.xx.xx.xx:xxxx");
              Client client = new Client(config);
      
              JSONObject serviceParameters = new JSONObject();
              // 提交任務時返回的taskId
              serviceParameters.put("taskId", "vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****");
      
              VideoModerationCancelRequest videoModerationCancelRequest = new VideoModerationCancelRequest();
              
              videoModerationCancelRequest.setService("liveStreamDetection_global");
              videoModerationCancelRequest.setServiceParameters(serviceParameters.toJSONString());
      
              try {
                  VideoModerationCancelResponse response = client.videoModerationCancel(videoModerationCancelRequest);
                  if (response.getStatusCode() == 200) {
                      VideoModerationCancelResponseBody result = response.getBody();
                      System.out.println("requestId=" + result.getRequestId());
                      System.out.println("code=" + result.getCode());
                      System.out.println("msg=" + result.getMessage());
                      if (200 != result.getCode()) {
                          System.out.println("video moderation cancel not success. code:" + result.getCode());
                      }
                  } else {
                      System.out.println("response not success. status:" + response.getStatusCode());
                  }
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      }

使用情境

當您需要審核的視頻在本地機器且無公網訪問連結,您可以將視頻上傳到Alibaba Content Security Service提供的Object Storage Service Bucket中,視頻審核2.0版服務可直接存取Object Storage Service,擷取到視頻內容後進行審核。

  1. pom.xml中添加如下依賴,就可以在Maven工程中使用SDK。

    <dependency>
      <groupId>com.aliyun</groupId>
      <artifactId>green20220302</artifactId>
      <version>2.19.1</version>
    </dependency>

    安裝OSS SDK:

    <dependency>
      <groupId>com.aliyun.oss</groupId>
      <artifactId>aliyun-sdk-oss</artifactId>
      <version>3.16.3</version>
    </dependency>
  2. 接入Java SDK。

    • 提交視頻檢測任務程式碼範例

      import com.alibaba.fastjson.JSON;
      import com.aliyun.green20220302.Client;
      import com.aliyun.green20220302.models.DescribeUploadTokenResponse;
      import com.aliyun.green20220302.models.DescribeUploadTokenResponseBody;
      import com.aliyun.green20220302.models.VideoModerationRequest;
      import com.aliyun.green20220302.models.VideoModerationResponse;
      import com.aliyun.green20220302.models.VideoModerationResponseBody;
      import com.aliyun.oss.OSS;
      import com.aliyun.oss.OSSClientBuilder;
      import com.aliyun.oss.model.PutObjectRequest;
      import com.aliyun.teaopenapi.models.Config;
      import com.aliyun.teautil.models.RuntimeOptions;
      
      import java.io.File;
      import java.util.HashMap;
      import java.util.Map;
      import java.util.UUID;
      
      public class LocalVideoModeration {
      
          //服務是否部署在vpc上
          public static boolean isVPC = false;
      
          //檔案上傳token endpoint->token
          public static Map<String, DescribeUploadTokenResponseBody.DescribeUploadTokenResponseBodyData> tokenMap = new HashMap<>();
      
          //上傳檔案請求用戶端
          public static OSS ossClient = null;
      
          /**
           * 建立請求用戶端
           *
           * @param accessKeyId
           * @param accessKeySecret
           * @param endpoint
           * @return
           * @throws Exception
           */
          public static Client createClient(String accessKeyId, String accessKeySecret, String endpoint) throws Exception {
              Config config = new Config();
              config.setAccessKeyId(accessKeyId);
              config.setAccessKeySecret(accessKeySecret);
              // 接入地區和地址請根據實際情況修改
              config.setEndpoint(endpoint);
              return new Client(config);
          }
      
          /**
           * 建立上傳檔案請求用戶端
           *
           * @param tokenData
           * @param isVPC
           */
          public static void getOssClient(DescribeUploadTokenResponseBody.DescribeUploadTokenResponseBodyData tokenData, boolean isVPC) {
              //注意,此處執行個體化的client請儘可能重複使用,避免重複建立串連,提升檢測效能。
              if (isVPC) {
                  ossClient = new OSSClientBuilder().build(tokenData.ossInternalEndPoint, tokenData.getAccessKeyId(), tokenData.getAccessKeySecret(), tokenData.getSecurityToken());
              } else {
                  ossClient = new OSSClientBuilder().build(tokenData.ossInternetEndPoint, tokenData.getAccessKeyId(), tokenData.getAccessKeySecret(), tokenData.getSecurityToken());
              }
          }
      
          /**
           * 上傳檔案
           *
           * @param filePath
           * @param tokenData
           * @return
           * @throws Exception
           */
          public static String uploadFile(String filePath, DescribeUploadTokenResponseBody.DescribeUploadTokenResponseBodyData tokenData) throws Exception {
              String[] split = filePath.split("\\.");
              String objectName;
              if (split.length > 1) {
                  objectName = tokenData.getFileNamePrefix() + UUID.randomUUID() + "." + split[split.length - 1];
              } else {
                  objectName = tokenData.getFileNamePrefix() + UUID.randomUUID();
              }
              PutObjectRequest putObjectRequest = new PutObjectRequest(tokenData.getBucketName(), objectName, new File(filePath));
              ossClient.putObject(putObjectRequest);
              return objectName;
          }
      
          public static VideoModerationResponse invokeFunction(String accessKeyId, String accessKeySecret, String endpoint) throws Exception {
              //注意,此處執行個體化的client請儘可能重複使用,避免重複建立串連,提升檢測效能。
              Client client = createClient(accessKeyId, accessKeySecret, endpoint);
              RuntimeOptions runtime = new RuntimeOptions();
      
              //本地檔案的完整路徑,例如D:\localPath\exampleFile.mp4。
              String filePath = "D:\localPath\exampleFile.mp4";
              //擷取檔案上傳token
              if (tokenMap.get(endpoint) == null || tokenMap.get(endpoint).expiration <= System.currentTimeMillis() / 1000) {
                  DescribeUploadTokenResponse tokenResponse = client.describeUploadToken();
                  tokenMap.put(endpoint, tokenResponse.getBody().getData());
              }
              //上傳檔案請求用戶端
              getOssClient(tokenMap.get(endpoint), isVPC);
      
              //上傳檔案
              String objectName = uploadFile(filePath, tokenMap.get(endpoint));
      
              // 檢測參數構造。
              Map<String, String> serviceParameters = new HashMap<>();
              //檔案上傳資訊
              serviceParameters.put("ossBucketName", tokenMap.get(endpoint).getBucketName());
              serviceParameters.put("ossObjectName", objectName);
              serviceParameters.put("dataId", UUID.randomUUID().toString());
      
              VideoModerationRequest request = new VideoModerationRequest();
              // 檢測類型:videoDetection_global
              request.setService("videoDetection_global");
              request.setServiceParameters(JSON.toJSONString(serviceParameters));
      
              VideoModerationResponse response = null;
              try {
                  response = client.videoModerationWithOptions(request, runtime);
              } catch (Exception e) {
                  e.printStackTrace();
              }
              return response;
          }
      
          public static void main(String[] args) throws Exception {
              /**
               * 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
               * 常見擷取環境變數方式:
               * 方式一:
               *     擷取RAM使用者AccessKey ID:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     擷取RAM使用者AccessKey Secret:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               * 方式二:
               *     擷取RAM使用者AccessKey ID:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     擷取RAM使用者AccessKey Secret:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               */
              String accessKeyId = "建議從環境變數中擷取RAM使用者AccessKey ID";
              String accessKeySecret = "建議從環境變數中擷取RAM使用者AccessKey Secret";
              // 接入地區和地址請根據實際情況修改。
              VideoModerationResponse response = invokeFunction(accessKeyId, accessKeySecret, "green-cip.ap-southeast-1.aliyuncs.com");
              try {
                  // 列印檢測結果。
                  if (response != null) {
                      if (response.getStatusCode() == 200) {
                          VideoModerationResponseBody body = response.getBody();
                          System.out.println(JSON.toJSONString(body));
                          System.out.println("requestId = " + body.getRequestId());
                          System.out.println("code = " + body.getCode());
                          System.out.println("msg = " + body.getMessage());
                          Integer code = body.getCode();
                          if (200 == code) {
                              VideoModerationResponseBody.VideoModerationResponseBodyData data = body.getData();
                              System.out.println("taskId = [" + data.getTaskId() + "]");
                          } else {
                              System.out.println("video moderation not success. code:" + code);
                          }
                      } else {
                          System.out.println("response not success. status:" + response.getStatusCode());
                      }
                  }
                  } catch (Exception e) {
                      e.printStackTrace();
                  }
              } }
    • 擷取視頻檢測任務程式碼範例

      import com.alibaba.fastjson.JSON;
      import com.alibaba.fastjson.JSONObject;
      import com.aliyun.green20220302.Client;
      import com.aliyun.green20220302.models.VideoModerationResultRequest;
      import com.aliyun.green20220302.models.VideoModerationResultResponse;
      import com.aliyun.green20220302.models.VideoModerationResultResponseBody;
      import com.aliyun.teaopenapi.models.Config;
      
      public class VideoModerationResultDemo {
      
          public static void main(String[] args) throws Exception {
              Config config = new Config();
              /**
               * 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
               * 常見擷取環境變數方式:
               * 方式一:
               *     擷取RAM使用者AccessKey ID:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     擷取RAM使用者AccessKey Secret:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               * 方式二:
               *     擷取RAM使用者AccessKey ID:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     擷取RAM使用者AccessKey Secret:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               */
              config.setAccessKeyId("建議從環境變數中擷取RAM使用者AccessKey ID");
              config.setAccessKeySecret("建議從環境變數中擷取RAM使用者AccessKey Secret");
              //接入地區和地址請根據實際情況修改。
              config.setRegionId("ap-southeast-1");
              config.setEndpoint("green-cip.ap-southeast-1.aliyuncs.com");
              //串連時逾時時間,單位毫秒(ms)。
              config.setReadTimeout(6000);
              //讀取時逾時時間,單位毫秒(ms)。
              config.setConnectTimeout(3000);
              //設定http代理。
              //config.setHttpProxy("http://10.10.xx.xx:xxxx");
              //設定https代理。
              //config.setHttpsProxy("https://10.10.xx.xx:xxxx");
              Client client = new Client(config);
      
              JSONObject serviceParameters = new JSONObject();
              // 提交任務時返回的taskId。
              serviceParameters.put("taskId", "vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****");
      
      
              VideoModerationResultRequest videoModerationResultRequest = new VideoModerationResultRequest();
              // 檢測類型:videoDetection_global
              videoModerationResultRequest.setService("videoDetection_global");
              videoModerationResultRequest.setServiceParameters(serviceParameters.toJSONString());
      
              try {
                  VideoModerationResultResponse response = client.videoModerationResult(videoModerationResultRequest);
                  if (response.getStatusCode() == 200) {
                      VideoModerationResultResponseBody result = response.getBody();
                      System.out.println("requestId=" + result.getRequestId());
                      System.out.println("code=" + result.getCode());
                      System.out.println("msg=" + result.getMessage());
                      if (200 == result.getCode()) {
                          VideoModerationResultResponseBody.VideoModerationResultResponseBodyData data = result.getData();
                          System.out.println("dataId = " + data.getDataId());
                          System.out.println("riskLevel = " + data.getRiskLevel());
                          System.out.println("audioResult = " + JSON.toJSONString(data.getAudioResult()));
                          System.out.println("frameResult = " + JSON.toJSONString(data.getFrameResult()));
                      } else {
                          System.out.println("video moderation result not success. code:" + result.getCode());
                      }
                  } else {
                      System.out.println("response not success. status:" + response.getStatusCode());
                  }
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      }
    • 取消ApsaraVideo for Live流檢測任務程式碼範例

      import com.alibaba.fastjson.JSONObject;
      import com.aliyun.green20220302.Client;
      import com.aliyun.green20220302.models.VideoModerationCancelRequest;
      import com.aliyun.green20220302.models.VideoModerationCancelResponse;
      import com.aliyun.green20220302.models.VideoModerationCancelResponseBody;
      import com.aliyun.teaopenapi.models.Config;
      
      
      public class VideoModerationCancelDemo {
      
          public static void main(String[] args) throws Exception {
              Config config = new Config();
              /**
               * 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
               * 常見擷取環境變數方式:
               * 方式一:
               *     擷取RAM使用者AccessKey ID:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     擷取RAM使用者AccessKey Secret:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               * 方式二:
               *     擷取RAM使用者AccessKey ID:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     擷取RAM使用者AccessKey Secret:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               */
              config.setAccessKeyId("建議從環境變數中擷取RAM使用者AccessKey ID");
              config.setAccessKeySecret("建議從環境變數中擷取RAM使用者AccessKey Secret");
              //接入地區和地址請根據實際情況修改
              config.setRegionId("ap-southeast-1");
              config.setEndpoint("green-cip.ap-southeast-1.aliyuncs.com");
              //串連時逾時時間,單位毫秒(ms)。
              config.setReadTimeout(6000);
              //讀取時逾時時間,單位毫秒(ms)。
              config.setConnectTimeout(3000);
              //設定http代理。
              //config.setHttpProxy("http://xx.xx.xx.xx:xxxx");
              //設定https代理。
              //config.setHttpsProxy("https://xx.xx.xx.xx:xxxx");
              Client client = new Client(config);
      
              JSONObject serviceParameters = new JSONObject();
              // 提交任務時返回的taskId
              serviceParameters.put("taskId", "vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****");
      
              VideoModerationCancelRequest videoModerationCancelRequest = new VideoModerationCancelRequest();
              
              videoModerationCancelRequest.setService("liveStreamDetection_global");
              videoModerationCancelRequest.setServiceParameters(serviceParameters.toJSONString());
      
              try {
                  VideoModerationCancelResponse response = client.videoModerationCancel(videoModerationCancelRequest);
                  if (response.getStatusCode() == 200) {
                      VideoModerationCancelResponseBody result = response.getBody();
                      System.out.println("requestId=" + result.getRequestId());
                      System.out.println("code=" + result.getCode());
                      System.out.println("msg=" + result.getMessage());
                      if (200 != result.getCode()) {
                          System.out.println("video moderation cancel not success. code:" + result.getCode());
                      }
                  } else {
                      System.out.println("response not success. status:" + response.getStatusCode());
                  }
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      }

使用情境

如果您需要審核的視頻檔案已經儲存在阿里雲Object Storage Service中,您可授權建立服務角色,允許Alibaba Content Security Service服務訪問Object Storage Service。視頻審核2.0版服務會通過服務角色擷取到Object Storage Service的檔案後進行審核。訪問雲資源訪問授權頁面建立服務角色。

  1. pom.xml中添加如下依賴,就可以在Maven工程中使用SDK。

    <dependency>
      <groupId>com.aliyun</groupId>
      <artifactId>green20220302</artifactId>
      <version>2.19.1</version>
    </dependency>
  2. 接入Java SDK。

    • 提交視頻檢測任務程式碼範例

      import com.alibaba.fastjson.JSON;
      import com.alibaba.fastjson.JSONObject;
      import com.aliyun.green20220302.Client;
      import com.aliyun.green20220302.models.VideoModerationRequest;
      import com.aliyun.green20220302.models.VideoModerationResponse;
      import com.aliyun.green20220302.models.VideoModerationResponseBody;
      import com.aliyun.teaopenapi.models.Config;
      
      
      public class VideoModerationDemo {
      
          public static void main(String[] args) throws Exception {
              Config config = new Config();
             /**
               * 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
               * 常見擷取環境變數方式:
               * 方式一:
               *     擷取RAM使用者AccessKey ID:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     擷取RAM使用者AccessKey Secret:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               * 方式二:
               *     擷取RAM使用者AccessKey ID:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     擷取RAM使用者AccessKey Secret:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               */
              config.setAccessKeyId("建議從環境變數中擷取RAM使用者AccessKey ID");
              config.setAccessKeySecret("建議從環境變數中擷取RAM使用者AccessKey Secret");
              //接入地區和地址請根據實際情況修改。
              config.setRegionId("ap-southeast-1");
              config.setEndpoint("green-cip.ap-southeast-1.aliyuncs.com");
              //串連時逾時時間,單位毫秒(ms)。
              config.setReadTimeout(6000);
              //讀取時逾時時間,單位毫秒(ms)。
              config.setConnectTimeout(3000);
              //設定http代理。
              //config.setHttpProxy("http://10.10.xx.xx:xxxx");
              //設定https代理。
              //config.setHttpsProxy("https://10.10.xx.xx:xxxx");
              Client client = new Client(config);
      
              JSONObject serviceParameters = new JSONObject();
              serviceParameters.put("ossBucketName", "bucket_01");
              serviceParameters.put("ossObjectName", "20240307/07/28/test.flv");
              serviceParameters.put("ossRegionId", "ap-southeast-1");
      
              VideoModerationRequest videoModerationRequest = new VideoModerationRequest();
              // 檢測類型:videoDetection_global
              videoModerationRequest.setService("videoDetection_global");
              videoModerationRequest.setServiceParameters(serviceParameters.toJSONString());
      
              try {
                  VideoModerationResponse response = client.videoModeration(videoModerationRequest);
                  if (response.getStatusCode() == 200) {
                      VideoModerationResponseBody result = response.getBody();
                      System.out.println(JSON.toJSONString(result));
                      System.out.println("requestId = " + result.getRequestId());
                      System.out.println("code = " + result.getCode());
                      System.out.println("msg = " + result.getMessage());
                      Integer code = result.getCode();
                      if (200 == code) {
                          VideoModerationResponseBody.VideoModerationResponseBodyData data = result.getData();
                          System.out.println("taskId = [" + data.getTaskId() + "]");
                      } else {
                          System.out.println("video moderation not success. code:" + code);
                      }
                  } else {
                      System.out.println("response not success. status:" + response.getStatusCode());
                  }
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      }
    • 擷取視頻檢測任務程式碼範例

      import com.alibaba.fastjson.JSON;
      import com.alibaba.fastjson.JSONObject;
      import com.aliyun.green20220302.Client;
      import com.aliyun.green20220302.models.VideoModerationResultRequest;
      import com.aliyun.green20220302.models.VideoModerationResultResponse;
      import com.aliyun.green20220302.models.VideoModerationResultResponseBody;
      import com.aliyun.teaopenapi.models.Config;
      
      public class VideoModerationResultDemo {
      
          public static void main(String[] args) throws Exception {
              Config config = new Config();
              /**
               * 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
               * 常見擷取環境變數方式:
               * 方式一:
               *     擷取RAM使用者AccessKey ID:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     擷取RAM使用者AccessKey Secret:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               * 方式二:
               *     擷取RAM使用者AccessKey ID:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     擷取RAM使用者AccessKey Secret:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               */
              config.setAccessKeyId("建議從環境變數中擷取RAM使用者AccessKey ID");
              config.setAccessKeySecret("建議從環境變數中擷取RAM使用者AccessKey Secret");
              //接入地區和地址請根據實際情況修改。
              config.setRegionId("ap-southeast-1");
              config.setEndpoint("green-cip.ap-southeast-1.aliyuncs.com");
              //串連時逾時時間,單位毫秒(ms)。
              config.setReadTimeout(6000);
              //讀取時逾時時間,單位毫秒(ms)。
              config.setConnectTimeout(3000);
              //設定http代理。
              //config.setHttpProxy("http://10.10.xx.xx:xxxx");
              //設定https代理。
              //config.setHttpsProxy("https://10.10.xx.xx:xxxx");
              Client client = new Client(config);
      
              JSONObject serviceParameters = new JSONObject();
              // 提交任務時返回的taskId。
              serviceParameters.put("taskId", "vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****");
      
      
              VideoModerationResultRequest videoModerationResultRequest = new VideoModerationResultRequest();
              // 檢測類型:videoDetection_global
              videoModerationResultRequest.setService("videoDetection_global");
              videoModerationResultRequest.setServiceParameters(serviceParameters.toJSONString());
      
              try {
                  VideoModerationResultResponse response = client.videoModerationResult(videoModerationResultRequest);
                  if (response.getStatusCode() == 200) {
                      VideoModerationResultResponseBody result = response.getBody();
                      System.out.println("requestId=" + result.getRequestId());
                      System.out.println("code=" + result.getCode());
                      System.out.println("msg=" + result.getMessage());
                      if (200 == result.getCode()) {
                          VideoModerationResultResponseBody.VideoModerationResultResponseBodyData data = result.getData();
                          System.out.println("dataId = " + data.getDataId());
                          System.out.println("riskLevel = " + data.getRiskLevel());
                          System.out.println("audioResult = " + JSON.toJSONString(data.getAudioResult()));
                          System.out.println("frameResult = " + JSON.toJSONString(data.getFrameResult()));
                      } else {
                          System.out.println("video moderation result not success. code:" + result.getCode());
                      }
                  } else {
                      System.out.println("response not success. status:" + response.getStatusCode());
                  }
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      }
    • 取消ApsaraVideo for Live流檢測任務程式碼範例

      import com.alibaba.fastjson.JSONObject;
      import com.aliyun.green20220302.Client;
      import com.aliyun.green20220302.models.VideoModerationCancelRequest;
      import com.aliyun.green20220302.models.VideoModerationCancelResponse;
      import com.aliyun.green20220302.models.VideoModerationCancelResponseBody;
      import com.aliyun.teaopenapi.models.Config;
      
      
      public class VideoModerationCancelDemo {
      
          public static void main(String[] args) throws Exception {
              Config config = new Config();
              /**
               * 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
               * 常見擷取環境變數方式:
               * 方式一:
               *     擷取RAM使用者AccessKey ID:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     擷取RAM使用者AccessKey Secret:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               * 方式二:
               *     擷取RAM使用者AccessKey ID:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     擷取RAM使用者AccessKey Secret:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               */
              config.setAccessKeyId("建議從環境變數中擷取RAM使用者AccessKey ID");
              config.setAccessKeySecret("建議從環境變數中擷取RAM使用者AccessKey Secret");
              //接入地區和地址請根據實際情況修改
              config.setRegionId("ap-southeast-1");
              config.setEndpoint("green-cip.ap-southeast-1.aliyuncs.com");
              //串連時逾時時間,單位毫秒(ms)。
              config.setReadTimeout(6000);
              //讀取時逾時時間,單位毫秒(ms)。
              config.setConnectTimeout(3000);
              //設定http代理。
              //config.setHttpProxy("http://xx.xx.xx.xx:xxxx");
              //設定https代理。
              //config.setHttpsProxy("https://xx.xx.xx.xx:xxxx");
              Client client = new Client(config);
      
              JSONObject serviceParameters = new JSONObject();
              // 提交任務時返回的taskId
              serviceParameters.put("taskId", "vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****");
      
              VideoModerationCancelRequest videoModerationCancelRequest = new VideoModerationCancelRequest();
              
              videoModerationCancelRequest.setService("liveStreamDetection_global");
              videoModerationCancelRequest.setServiceParameters(serviceParameters.toJSONString());
      
              try {
                  VideoModerationCancelResponse response = client.videoModerationCancel(videoModerationCancelRequest);
                  if (response.getStatusCode() == 200) {
                      VideoModerationCancelResponseBody result = response.getBody();
                      System.out.println("requestId=" + result.getRequestId());
                      System.out.println("code=" + result.getCode());
                      System.out.println("msg=" + result.getMessage());
                      if (200 != result.getCode()) {
                          System.out.println("video moderation cancel not success. code:" + result.getCode());
                      }
                  } else {
                      System.out.println("response not success. status:" + response.getStatusCode());
                  }
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      }

支援Python 3.6及以上版本。

原始代碼,請參見Python SDK源碼

支援以下三種類型的視頻檢測。

對公網可訪問視頻進行檢測
對本地視頻進行檢測
對OSS視頻進行檢測

使用情境

當需要審核的視頻可通過公網連結訪問時,視頻審核2.0版服務可通過視頻URL擷取檔案後進行審核。

  1. 執行如下命令安裝pip。

    pip install alibabacloud_green20220302==2.19.1
  2. 接入Python SDK。

    • 提交視頻檢測任務程式碼範例

      #encoding:utf-8
      # python version >= 3.6
      from alibabacloud_green20220302.client import Client
      from alibabacloud_green20220302 import models
      from alibabacloud_tea_openapi.models import Config
      import json
      
      config = Config(
                  # 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
                  # 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。
                  # 常見擷取環境變數方式:
                  # 擷取RAM使用者AccessKey ID:os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
                  # 擷取RAM使用者AccessKey Secret:os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
                  access_key_id='建議從環境變數中擷取RAM使用者AccessKey ID',
                  access_key_secret='建議從環境變數中擷取RAM使用者AccessKey Secret',
                  # 串連時逾時時間,單位毫秒(ms)。
                  connect_timeout=3000,
                  # 讀取時逾時時間,單位毫秒(ms)。
                  read_timeout=6000,
                  # 接入地區和地址請根據實際情況修改。
                  region_id='ap-southeast-1',
                  endpoint='green-cip.ap-southeast-1.aliyuncs.com'
      )
      
      clt = Client(config)
      
      serviceParameters = {
          'url': 'https://xxx.oss.aliyuncs.com/xxx.mp4'
      }
      videoModerationRequest = models.VideoModerationRequest(
          # 檢測類型:videoDetection_global
          service='videoDetection_global',
          service_parameters=json.dumps(serviceParameters)
      )
      
      try:
          response = clt.video_moderation(videoModerationRequest)
          if response.status_code == 200:
              # 調用成功。
              # 擷取審核結果。
              result = response.body
              print('response success. result:{}'.format(result))
          else:
              print('response not success. status:{} ,result:{}'.format(response.status_code, response))
      except Exception as err:
          print(err)
    • 擷取視頻檢測任務結果

      # coding=utf-8
      # python version >= 3.6
      from alibabacloud_green20220302.client import Client
      from alibabacloud_green20220302 import models
      from alibabacloud_tea_openapi.models import Config
      import json
      
      config = Config(
                  # 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
                  # 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。
                  # 常見擷取環境變數方式:
                  # 擷取RAM使用者AccessKey ID:os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
                  # 擷取RAM使用者AccessKey Secret:os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
                  access_key_id='建議從環境變數中擷取RAM使用者AccessKey ID',
                  access_key_secret='建議從環境變數中擷取RAM使用者AccessKey Secret',
                  # 串連時逾時時間,單位毫秒(ms)。
                  connect_timeout=3000,
                  # 讀取時逾時時間,單位毫秒(ms)。
                  read_timeout=6000,
                  # 接入地區和地址請根據實際情況修改。
                  region_id='ap-southeast-1',
                  endpoint='green-cip.ap-southeast-1.aliyuncs.com'
      )
      
      clt = Client(config)
      
      # 提交任務時返回的taskId。
      serviceParameters = {
          "taskId": 'vi_f_11w5THcbVYctjdxz2C0Afa-1x****'
      }
      videoModerationResultRequest = models.VideoModerationResultRequest(
          # 檢測類型:videoDetection_global
          service='videoDetection_global',
          service_parameters=json.dumps(serviceParameters)
      )
      
      try:
          response = clt.video_moderation_result(videoModerationResultRequest)
          if response.status_code == 200:
              # 調用成功。
              # 擷取審核結果。
              result = response.body
              print('response success. result:{}'.format(result))
          else:
              print('response not success. status:{} ,result:{}'.format(response.status_code, response))
      except Exception as err:
          print(err)
    • 取消ApsaraVideo for Live流檢測任務程式碼範例

      # coding=utf-8
      # python version >= 3.6
      from alibabacloud_green20220302.client import Client
      from alibabacloud_green20220302 import models
      from alibabacloud_tea_openapi.models import Config
      import json
      
      config = Config(
          # 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
          # 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。
          # 常見擷取環境變數方式:
          # 擷取RAM使用者AccessKey ID:os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
          # 擷取RAM使用者AccessKey Secret:os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
          access_key_id='建議從環境變數中擷取RAM使用者AccessKey ID',
          access_key_secret='建議從環境變數中擷取RAM使用者AccessKey Secret',
          # 連線逾時時間 單位毫秒(ms)
          connect_timeout=10000,
          # 讀逾時時間 單位毫秒(ms)
          read_timeout=3000,
          region_id='ap-southeast-1',
          endpoint='green-cip.ap-southeast-1.aliyuncs.com'
      )
      
      clt = Client(config)
      
      # 提交任務時返回的taskId
      serviceParameters = {
          "taskId": 'vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****'
      }
      videoModerationCancelRequest = models.VideoModerationCancelRequest(
          # 檢測類型
          service='liveStreamDetection_global',
          service_parameters=json.dumps(serviceParameters)
      )
      
      try:
          response = clt.video_moderation_cancel(videoModerationCancelRequest)
          if response.status_code == 200:
              # 調用成功
              result = response.body
              print('response success. result:{}'.format(result))
          else:
              print('response not success. status:{} ,result:{}'.format(response.status_code, response))
      except Exception as err:
          print(err)

使用情境

當您需要審核的視頻在本地機器且無公網訪問連結,您可以將視頻上傳到Alibaba Content Security Service提供的Object Storage Service Bucket中,視頻審核2.0版服務可直接存取Object Storage Service,擷取到視頻內容後進行審核。

  1. 執行如下命令安裝pip。

    pip install alibabacloud_green20220302==2.19.1

    安裝OSS SDK:

    pip install oss2
  2. 接入Python SDK。

    • 提交視頻檢測任務程式碼範例

      from alibabacloud_green20220302.client import Client
      from alibabacloud_green20220302 import models
      from alibabacloud_tea_openapi.models import Config
      from alibabacloud_tea_util.client import Client as UtilClient
      from alibabacloud_tea_util import models as util_models
      import json
      import uuid
      
      import oss2
      import time
      
      config = Config(
          # 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
          # 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。
          # 常見擷取環境變數方式:
          # 擷取RAM使用者AccessKey ID:os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
          # 擷取RAM使用者AccessKey Secret:os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
          access_key_id='建議從環境變數中擷取RAM使用者AccessKey ID',
          access_key_secret='建議從環境變數中擷取RAM使用者AccessKey Secret',
          # 串連時逾時時間,單位毫秒(ms)。
          connect_timeout=10000,
          # 讀取時逾時時間,單位毫秒(ms)。
          read_timeout=10000,
          # 接入地區和地址請根據實際情況修改。
          region_id='ap-southeast-1',
          endpoint='green-cip.ap-southeast-1.aliyuncs.com'
      )
      # 注意:此處執行個體化的client請儘可能重複使用,避免重複建立串連,提升檢測效能。
      client = Client(config)
      
      bucket = None
      upload_token = None
      
      
      def get_oss_client(is_vpc):
          global upload_token
          global bucket
          if (upload_token == None) or int(upload_token.expiration) <= int(time.time()):
              response = client.describe_upload_token()
      
              upload_token = response.body.data
              auth = oss2.StsAuth(upload_token.access_key_id, upload_token.access_key_secret, upload_token.security_token)
      
              end_point = upload_token.oss_internet_end_point
              if (is_vpc):
                  end_point = upload_token.oss_internal_end_point
              bucket = oss2.Bucket(auth, end_point, upload_token.bucket_name)
      
      
      def upload_file(file_name, is_vpc):
          get_oss_client(is_vpc)
          object_name = upload_token.file_name_prefix + str(uuid.uuid4()) + '.' + file_name.split('.')[-1]
          bucket.put_object_from_file(object_name, file_name)
          return object_name
      
      
      def video_moderation_by_local_file(file_path, is_vpc):
          # 1. 上傳檔案
          object_name = upload_file(file_path, is_vpc)
      
          # 2. 視頻檢測
          service_parameters = {
              'dataId': str(uuid.uuid4()),
              'ossBucketName': upload_token.bucket_name,
              'ossObjectName': object_name
          }
      
          video_moderation_request = models.VideoModerationRequest(
              # 檢測類型: videoDetection_global
              service='videoDetection_global',
              service_parameters=json.dumps(service_parameters)
          )
      
          # 建立RuntimeObject執行個體並設定運行參數。
          runtime = util_models.RuntimeOptions()
          runtime.read_timeout = 10000
          runtime.connect_timeout = 10000
          try:
              global client
              response = client.video_moderation_with_options(video_moderation_request, runtime)
              if response.status_code == 200:
                  # 調用成功。
                  # 擷取審核結果。
                  result = response.body
                  print('response success. result:{}'.format(result))
                  if result.code == 200:
                      result_data = result.data
                      print('result: {}'.format(result_data))
              else:
                  print('response not success. status:{} ,result:{}'.format(response.status_code, response))
          except Exception as err:
              print(err)
      
      
      if __name__ == '__main__':
          # 本地檔案路徑
          file_path = 'D:/test/video/b652.mp4'
          # 是否在VPC上部署
          is_vpc = False  # True
          video_moderation_by_local_file(file_path, is_vpc)
          
    • 擷取視頻檢測任務結果

      # coding=utf-8
      # python version >= 3.6
      from alibabacloud_green20220302.client import Client
      from alibabacloud_green20220302 import models
      from alibabacloud_tea_openapi.models import Config
      import json
      
      config = Config(
                  # 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
                  # 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。
                  # 常見擷取環境變數方式:
                  # 擷取RAM使用者AccessKey ID:os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
                  # 擷取RAM使用者AccessKey Secret:os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
                  access_key_id='建議從環境變數中擷取RAM使用者AccessKey ID',
                  access_key_secret='建議從環境變數中擷取RAM使用者AccessKey Secret',
                  # 串連時逾時時間,單位毫秒(ms)。
                  connect_timeout=3000,
                  # 讀取時逾時時間,單位毫秒(ms)。
                  read_timeout=6000,
                  # 接入地區和地址請根據實際情況修改。
                  region_id='ap-southeast-1',
                  endpoint='green-cip.ap-southeast-1.aliyuncs.com'
      )
      
      clt = Client(config)
      
      # 提交任務時返回的taskId。
      serviceParameters = {
          "taskId": 'vi_f_11w5THcbVYctjdxz2C0Afa-1x****'
      }
      videoModerationResultRequest = models.VideoModerationResultRequest(
          # 檢測類型:videoDetection_global
          service='videoDetection_global',
          service_parameters=json.dumps(serviceParameters)
      )
      
      try:
          response = clt.video_moderation_result(videoModerationResultRequest)
          if response.status_code == 200:
              # 調用成功。
              # 擷取審核結果。
              result = response.body
              print('response success. result:{}'.format(result))
          else:
              print('response not success. status:{} ,result:{}'.format(response.status_code, response))
      except Exception as err:
          print(err)
    • 取消ApsaraVideo for Live流檢測任務程式碼範例

      # coding=utf-8
      # python version >= 3.6
      from alibabacloud_green20220302.client import Client
      from alibabacloud_green20220302 import models
      from alibabacloud_tea_openapi.models import Config
      import json
      
      config = Config(
          # 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
          # 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。
          # 常見擷取環境變數方式:
          # 擷取RAM使用者AccessKey ID:os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
          # 擷取RAM使用者AccessKey Secret:os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
          access_key_id='建議從環境變數中擷取RAM使用者AccessKey ID',
          access_key_secret='建議從環境變數中擷取RAM使用者AccessKey Secret',
          # 連線逾時時間 單位毫秒(ms)
          connect_timeout=10000,
          # 讀逾時時間 單位毫秒(ms)
          read_timeout=3000,
          region_id='ap-southeast-1',
          endpoint='green-cip.ap-southeast-1.aliyuncs.com'
      )
      
      clt = Client(config)
      
      # 提交任務時返回的taskId
      serviceParameters = {
          "taskId": 'vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****'
      }
      videoModerationCancelRequest = models.VideoModerationCancelRequest(
          # 檢測類型
          service='liveStreamDetection_global',
          service_parameters=json.dumps(serviceParameters)
      )
      
      try:
          response = clt.video_moderation_cancel(videoModerationCancelRequest)
          if response.status_code == 200:
              # 調用成功
              result = response.body
              print('response success. result:{}'.format(result))
          else:
              print('response not success. status:{} ,result:{}'.format(response.status_code, response))
      except Exception as err:
          print(err)

使用情境

如果您需要審核的視頻檔案已經儲存在阿里雲Object Storage Service中,您可授權建立服務角色,允許Alibaba Content Security Service服務訪問Object Storage Service。視頻審核2.0版服務會通過服務角色擷取到Object Storage Service的檔案後進行審核。訪問雲資源訪問授權頁面建立服務角色。

  1. 執行如下命令安裝pip。

    pip install alibabacloud_green20220302==2.19.1
  2. 接入Python SDK。

    • 提交視頻檢測任務程式碼範例

      #encoding:utf-8
      # python version >= 3.6
      from alibabacloud_green20220302.client import Client
      from alibabacloud_green20220302 import models
      from alibabacloud_tea_openapi.models import Config
      import json
      
      config = Config(
                  # 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
                  # 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。
                  # 常見擷取環境變數方式:
                  # 擷取RAM使用者AccessKey ID:os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
                  # 擷取RAM使用者AccessKey Secret:os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
                  access_key_id='建議從環境變數中擷取RAM使用者AccessKey ID',
                  access_key_secret='建議從環境變數中擷取RAM使用者AccessKey Secret',
                  # 串連時逾時時間,單位毫秒(ms)。
                  connect_timeout=3000,
                  # 讀取時逾時時間,單位毫秒(ms)。
                  read_timeout=6000,
                  # 接入地區和地址請根據實際情況修改。
                  region_id='ap-southeast-1',
                  endpoint='green-cip.ap-southeast-1.aliyuncs.com'
      )
      
      clt = Client(config)
      
      serviceParameters = {
          'ossBucketName': 'bucket_01',
          'ossObjectName': '20240307/07/28/test.flv',
          'ossRegionId': 'ap-southeast-1'
      }
      videoModerationRequest = models.VideoModerationRequest(
          # 檢測類型:videoDetection_global
          service='videoDetection_global',
          service_parameters=json.dumps(serviceParameters)
      )
      
      try:
          response = clt.video_moderation(videoModerationRequest)
          if response.status_code == 200:
              # 調用成功。
              # 擷取審核結果。
              result = response.body
              print('response success. result:{}'.format(result))
          else:
              print('response not success. status:{} ,result:{}'.format(response.status_code, response))
      except Exception as err:
          print(err)
    • 擷取視頻檢測任務結果

      # coding=utf-8
      # python version >= 3.6
      from alibabacloud_green20220302.client import Client
      from alibabacloud_green20220302 import models
      from alibabacloud_tea_openapi.models import Config
      import json
      
      config = Config(
                  # 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
                  # 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。
                  # 常見擷取環境變數方式:
                  # 擷取RAM使用者AccessKey ID:os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
                  # 擷取RAM使用者AccessKey Secret:os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
                  access_key_id='建議從環境變數中擷取RAM使用者AccessKey ID',
                  access_key_secret='建議從環境變數中擷取RAM使用者AccessKey Secret',
                  # 串連時逾時時間,單位毫秒(ms)。
                  connect_timeout=3000,
                  # 讀取時逾時時間,單位毫秒(ms)。
                  read_timeout=6000,
                  # 接入地區和地址請根據實際情況修改。
                  region_id='ap-southeast-1',
                  endpoint='green-cip.ap-southeast-1.aliyuncs.com'
      )
      
      clt = Client(config)
      
      # 提交任務時返回的taskId。
      serviceParameters = {
          "taskId": 'vi_f_11w5THcbVYctjdxz2C0Afa-1x****'
      }
      videoModerationResultRequest = models.VideoModerationResultRequest(
          # 檢測類型:videoDetection_global
          service='videoDetection_global',
          service_parameters=json.dumps(serviceParameters)
      )
      
      try:
          response = clt.video_moderation_result(videoModerationResultRequest)
          if response.status_code == 200:
              # 調用成功。
              # 擷取審核結果。
              result = response.body
              print('response success. result:{}'.format(result))
          else:
              print('response not success. status:{} ,result:{}'.format(response.status_code, response))
      except Exception as err:
          print(err)
    • 取消ApsaraVideo for Live流檢測任務程式碼範例

      # coding=utf-8
      # python version >= 3.6
      from alibabacloud_green20220302.client import Client
      from alibabacloud_green20220302 import models
      from alibabacloud_tea_openapi.models import Config
      import json
      
      config = Config(
          # 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
          # 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。
          # 常見擷取環境變數方式:
          # 擷取RAM使用者AccessKey ID:os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
          # 擷取RAM使用者AccessKey Secret:os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
          access_key_id='建議從環境變數中擷取RAM使用者AccessKey ID',
          access_key_secret='建議從環境變數中擷取RAM使用者AccessKey Secret',
          # 連線逾時時間 單位毫秒(ms)
          connect_timeout=10000,
          # 讀逾時時間 單位毫秒(ms)
          read_timeout=3000,
          region_id='ap-southeast-1',
          endpoint='green-cip.ap-southeast-1.aliyuncs.com'
      )
      
      clt = Client(config)
      
      # 提交任務時返回的taskId
      serviceParameters = {
          "taskId": 'vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****'
      }
      videoModerationCancelRequest = models.VideoModerationCancelRequest(
          # 檢測類型
          service='liveStreamDetection_global',
          service_parameters=json.dumps(serviceParameters)
      )
      
      try:
          response = clt.video_moderation_cancel(videoModerationCancelRequest)
          if response.status_code == 200:
              # 調用成功
              result = response.body
              print('response success. result:{}'.format(result))
          else:
              print('response not success. status:{} ,result:{}'.format(response.status_code, response))
      except Exception as err:
          print(err)

支援PHP 5.6及以上版本。

原始代碼,請參見PHP SDK源碼

支援以下三種類型的視頻檢測。

對公網可訪問視頻進行檢測
對本地視頻進行檢測
對OSS視頻進行檢測

使用情境

當需要審核的視頻可通過公網連結訪問時,視頻審核2.0版服務可通過視頻URL擷取檔案後進行審核。

  1. 執行如下命令引入相關依賴。

    composer require alibabacloud/green-20220302 2.19.1
  2. 接入PHP SDK。

    • 提交視頻檢測任務程式碼範例

      <?php
      require('vendor/autoload.php');
      
      use AlibabaCloud\SDK\Green\V20220302\Models\VideoModerationRequest;
      use AlibabaCloud\Tea\Exception\TeaUnableRetryError;
      use Darabonba\OpenApi\Models\Config;
      use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
      use AlibabaCloud\SDK\Green\V20220302\Green;
      
      $config = new Config([
          /**
           * 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
           * 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。
           * 常見擷取環境變數方式:
           * 擷取RAM使用者AccessKey ID:getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
           * 擷取RAM使用者AccessKey Secret:getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
           */
          "accessKeyId" => '建議從環境變數中擷取RAM使用者AccessKey ID',
          "accessKeySecret" => '建議從環境變數中擷取RAM使用者AccessKey Secret',
          // 設定HTTP代理。
          // "httpProxy" => "http://10.10.xx.xx:xxxx",
          // 設定HTTPS代理。
          // "httpsProxy" => "https://10.10.xx.xx:xxxx",
          "endpoint" => "green-cip.ap-southeast-1.aliyuncs.com",
          "regionId" => "ap-southeast-1"
      
      ]);
      // 注意,此處執行個體化的client請儘可能重複使用,避免重複建立串連,提升檢測效能。
      $client = new Green($config);
      
      $request = new VideoModerationRequest();
      // 檢測類型: videoDetection_global 視頻檔案檢測, liveStreamDetection_global ApsaraVideo for Live流檢測
      $request->service = "videoDetection_global";
      $serviceParameters = array("url" => "https://xxx.oss.aliyuncs.com/xxx.mp4");
      
      $request->serviceParameters = json_encode($serviceParameters);
      
      $runtime = new RuntimeOptions();
      $runtime->readTimeout = 6000;
      $runtime->connectTimeout = 3000;
      
      try {
          $response = $client->videoModerationWithOptions($request, $runtime);
          print_r($response->body);
          if (200 != $response->statusCode) {
              print_r("response not success. code:" . $response->statusCode);
              return;
          }
          $body = $response->body;
          print_r("requestId = " . $body->requestId . "\n");
          print_r("code = " . $body->code . "\n");
          print_r("message = " . $body->message . "\n");
          if (200 != $body->code) {
              print_r("video moderation not success. code:" . $body->code);
          }
          $data = $body->data;
          print_r("taskId = " . $data->taskId);
      } catch (TeaUnableRetryError $e) {
          var_dump($e->getMessage());
          var_dump($e->getErrorInfo());
          var_dump($e->getLastException());
          var_dump($e->getLastRequest());
      }
    • 擷取視頻檢測任務程式碼範例

      <?php
      require('vendor/autoload.php');
      
      use AlibabaCloud\SDK\Green\V20220302\Models\VideoModerationResultRequest;
      use AlibabaCloud\Tea\Exception\TeaUnableRetryError;
      use Darabonba\OpenApi\Models\Config;
      use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
      use AlibabaCloud\SDK\Green\V20220302\Green;
      
      $config = new Config([
          /**
           * 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
           * 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。
           * 常見擷取環境變數方式:
           * 擷取RAM使用者AccessKey ID:getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
           * 擷取RAM使用者AccessKey Secret:getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
           */
          "accessKeyId" => '建議從環境變數中擷取RAM使用者AccessKey ID',
          "accessKeySecret" => '建議從環境變數中擷取RAM使用者AccessKey Secret',
          // 設定HTTP代理。
          // "httpProxy" => "http://10.10.xx.xx:xxxx",
          // 設定HTTPS代理。
          // "httpsProxy" => "https://10.10.xx.xx:xxxx",
          "endpoint" => "green-cip.ap-southeast-1.aliyuncs.com",
          "regionId" => "ap-southeast-1"
      
      ]);
      // 注意,此處執行個體化的client請儘可能重複使用,避免重複建立串連,提升檢測效能。
      $client = new Green($config);
      
      $request = new VideoModerationResultRequest();
      // 檢測類型: videoDetection 視頻檔案檢測, liveStreamDetection ApsaraVideo for Live流檢測
      $request->service = "videoDetection_global";
      $serviceParameters = array("taskId" => "vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****");
      
      $request->serviceParameters = json_encode($serviceParameters);
      
      $runtime = new RuntimeOptions();
      $runtime->readTimeout = 6000;
      $runtime->connectTimeout = 3000;
      
      try {
          $response = $client->videoModerationResultWithOptions($request, $runtime);
          if (200 != $response->statusCode) {
              print_r("response not success. code:" . $response->statusCode);
              return;
          }
          $body = $response->body;
          print_r("requestId = " . $body->requestId . "\n");
          print_r("code = " . $body->code . "\n");
          print_r("message = " . $body->message . "\n");
          if (280 == $body->code) {
              print_r("processing video moderation. code:" . $body->code);
              return;
          }
          if (200 != $body->code) {
              print_r("video moderation result not success. code:" . $body->code);
              return;
          }
          $data = $body->data;
          print_r("liveId = " . $data->liveId . "\n");
          print_r("dataId = " . $data->dataId . "\n");
          print_r("riskLevel = " . $data->RiskLevel . "\n");
          print_r("audioResult = " . json_encode($data->audioResult) . "\n");
          print_r("frameResult = " . json_encode($data->frameResult) . "\n");
      } catch (TeaUnableRetryError $e) {
          var_dump($e->getMessage());
          var_dump($e->getErrorInfo());
          var_dump($e->getLastException());
          var_dump($e->getLastRequest());
      }
    • 取消ApsaraVideo for Live流檢測任務程式碼範例

      <?php
        require('vendor/autoload.php');
      
      use AlibabaCloud\SDK\Green\V20220302\Models\VideoModerationCancelRequest;
      use AlibabaCloud\Tea\Exception\TeaUnableRetryError;
      use Darabonba\OpenApi\Models\Config;
      use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
      use AlibabaCloud\SDK\Green\V20220302\Green;
      
      $config = new Config([
          /**
           * 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
           * 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。
           * 常見擷取環境變數方式:
           * 擷取RAM使用者AccessKey ID:getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
           * 擷取RAM使用者AccessKey Secret:getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
           */
          "accessKeyId" => '建議從環境變數中擷取RAM使用者AccessKey ID',
          "accessKeySecret" => '建議從環境變數中擷取RAM使用者AccessKey Secret',
          // 設定HTTP代理。
          // "httpProxy" => "http://10.10.xx.xx:xxxx",
          // 設定HTTPS代理。
          // "httpsProxy" => "https://10.10.xx.xx:xxxx",
          "endpoint" => "green-cip.ap-southeast-1.aliyuncs.com",
          "regionId" => "ap-southeast-1"
      
      ]);
      // 注意,此處執行個體化的client請儘可能重複使用,避免重複建立串連,提升檢測效能。
      $client = new Green($config);
      
      $request = new VideoModerationCancelRequest();
      // 檢測類型: videoDetection 視頻檔案檢測, liveStreamDetection ApsaraVideo for Live流檢測
      $request->service = "liveStreamDetection_global";
      $serviceParameters = array('taskId' => 'vi_s_lyxBXzWhSsxuJjiNHcpQ0N-*****');
      
      $request->serviceParameters = json_encode($serviceParameters);
      
      $runtime = new RuntimeOptions();
      $runtime->readTimeout = 6000;
      $runtime->connectTimeout = 3000;
      
      try {
        $response = $client->videoModerationCancel($request, $runtime);
        print_r($response->body);
        if (200 == $response->statusCode) {
          $body = $response->body;
          print_r("requestId = " . $body->requestId);
          print_r("code = " . $body->code);
          print_r("message = " . $body->message);
          if (200 != $body->code) {
            print_r("video moderation cancel not success. code:" . $body->code);
          }
        } else {
          print_r("response not success. code:" . $response->statusCode);
        }
      } catch (TeaUnableRetryError $e) {
        var_dump($e->getMessage());
        var_dump($e->getErrorInfo());
        var_dump($e->getLastException());
        var_dump($e->getLastRequest());
      }

使用情境

當您需要審核的視頻在本地機器且無公網訪問連結,您可以將視頻上傳到Alibaba Content Security Service提供的Object Storage Service Bucket中,視頻審核2.0版服務可直接存取Object Storage Service,擷取到視頻內容後進行審核。

  1. 執行如下命令引入相關依賴。

    composer require alibabacloud/green-20220302 2.19.1

    安裝OSS SDK:

    composer require aliyuncs/oss-sdk-php
  2. 接入PHP SDK。

    • 提交視頻檢測任務程式碼範例

      <?php
      require('vendor/autoload.php');
      
      use AlibabaCloud\SDK\Green\V20220302\Models\VideoModerationResponse;
      use AlibabaCloud\Tea\Utils\Utils;
      use Darabonba\OpenApi\Models\Config;
      use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
      use AlibabaCloud\SDK\Green\V20220302\Green;
      use AlibabaCloud\SDK\Green\V20220302\Models\VideoModerationRequest;
      use OSS\OssClient;
      
      // 服務是否部署在VPC上
      $isVPC = false;
      // 檔案上傳token
      $tokenArray = array();
      // 檔案上傳請求用戶端
      $ossClient = null;
      
      /**
       * 建立請求用戶端
       * @param $accessKeyId
       * @param $accessKeySecret
       * @param $endpoint
       * @return Green
       */
      function create_client($accessKeyId, $accessKeySecret, $endpoint): Green
      {
          $config = new Config([
              "accessKeyId" => $accessKeyId,
              "accessKeySecret" => $accessKeySecret,
              // 設定HTTP代理。
              // "httpProxy" => "http://10.10.xx.xx:xxxx",
              // 設定HTTPS代理。
              // "httpsProxy" => "https://10.10.xx.xx:xxxx",
              "endpoint" => $endpoint,
          ]);
          return new Green($config);
      }
      
      /**
       * 建立檔案上傳用戶端
       * @param $tokenData
       * @return void
       */
      function create_upload_client($tokenData): void
      {
      
          global $isVPC;
          global $ossClient;
          // 注意:此處執行個體化的client請儘可能重複使用,避免重複建立串連,提升檢測效能。
          if ($isVPC) {
              $ossClient = new OssClient($tokenData->accessKeyId, $tokenData->accessKeySecret, $tokenData->ossInternalEndPoint, false, $tokenData->securityToken);
          } else {
              $ossClient = new OssClient($tokenData->accessKeyId, $tokenData->accessKeySecret, $tokenData->ossInternetEndPoint, false, $tokenData->securityToken);
          }
      }
      
      /**
       * 上傳檔案
       * @param $fileName
       * @param $tokenData
       * @return string
       * @throws \OSS\Core\OssException
       */
      function upload_file($filePath, $tokenData): string
      {
          global $ossClient;
          //初始化OssClient
          create_upload_client($tokenData);
          $split = explode(".", $filePath);
          if (count($split) > 1) {
              $objectName = $tokenData->fileNamePrefix . uniqid() . "." . explode(".", $filePath)[count($split) - 1];
          } else {
              $objectName = $tokenData->fileNamePrefix . uniqid();
          }
          //上傳檔案
          $ossClient->uploadFile($tokenData->bucketName, $objectName, $filePath);
          return $objectName;
      }
      
      /**
       * 提交檢測任務
       * @param $accessKeyId
       * @param $accessKeySecret
       * @param $endpoint
       * @return VideoModerationResponse
       * @throws \OSS\Core\OssException
       */
      function invoke($accessKeyId, $accessKeySecret, $endpoint): VideoModerationResponse
      {
          global $tokenArray;
          // 注意:此處執行個體化的client請儘可能重複使用,避免重複建立串連,提升檢測效能。
          $client = create_client($accessKeyId, $accessKeySecret, $endpoint);
          // 建立RuntimeObject執行個體並設定運行參數。
          $runtime = new RuntimeOptions([]);
          // 本地檔案的完整路徑,例如D:\\localPath\\exampleFile.mp4。
          $filePath = "D:\\test\\video\\b652.mp4";
      
          //擷取檔案上傳token
          if (!isset($tokenArray[$endpoint]) || $tokenArray[$endpoint]->expiration <= time()) {
              $token = $client->describeUploadToken();
              $tokenArray[$endpoint] = $token->body->data;
          }
      
          // 上傳檔案
          $objectName = upload_file($filePath, $tokenArray[$endpoint]);
      
          // 檢測參數構造。
          $request = new VideoModerationRequest();
          // 樣本:videoDetection_global
            $request->service = "videoDetection_global";
          // 待檢測檔案Oss資訊。
          $serviceParameters = array(
              'ossObjectName' => $objectName,
              'ossBucketName' => $tokenArray[$endpoint]->bucketName,
              'dataId' => uniqid());
          $request->serviceParameters = json_encode($serviceParameters);
          // 提交檢測
          return $client->videoModerationWithOptions($request, $runtime);
      }
      
      /**
      * 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
      * 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。
      * 常見擷取環境變數方式:
      * 擷取RAM使用者AccessKey ID:getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
      * 擷取RAM使用者AccessKey Secret:getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
      */
      $accessKeyId = '建議從環境變數中擷取RAM使用者AccessKey ID';
      $accessKeySecret = '建議從環境變數中擷取RAM使用者AccessKey Secret';
      // 接入地區和地址請根據實際情況修改
      $endpoint = "green-cip.ap-southeast-1.aliyuncs.com";
      
      try {
          $response = invoke($accessKeyId, $accessKeySecret, $endpoint);
          print_r(json_encode($response->body, JSON_UNESCAPED_UNICODE));
      } catch (Exception $e) {
          var_dump($e->getMessage());
          var_dump($e->getErrorInfo());
          var_dump($e->getLastException());
          var_dump($e->getLastRequest());
      }
    • 擷取視頻檢測任務程式碼範例

      <?php
      require('vendor/autoload.php');
      
      use AlibabaCloud\SDK\Green\V20220302\Models\VideoModerationResultRequest;
      use AlibabaCloud\Tea\Exception\TeaUnableRetryError;
      use Darabonba\OpenApi\Models\Config;
      use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
      use AlibabaCloud\SDK\Green\V20220302\Green;
      
      $config = new Config([
          /**
           * 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
           * 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。
           * 常見擷取環境變數方式:
           * 擷取RAM使用者AccessKey ID:getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
           * 擷取RAM使用者AccessKey Secret:getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
           */
          "accessKeyId" => '建議從環境變數中擷取RAM使用者AccessKey ID',
          "accessKeySecret" => '建議從環境變數中擷取RAM使用者AccessKey Secret',
          // 設定HTTP代理。
          // "httpProxy" => "http://10.10.xx.xx:xxxx",
          // 設定HTTPS代理。
          // "httpsProxy" => "https://10.10.xx.xx:xxxx",
          "endpoint" => "green-cip.ap-southeast-1.aliyuncs.com",
          "regionId" => "ap-southeast-1"
      
      ]);
      // 注意,此處執行個體化的client請儘可能重複使用,避免重複建立串連,提升檢測效能。
      $client = new Green($config);
      
      $request = new VideoModerationResultRequest();
      // 檢測類型: videoDetection 視頻檔案檢測, liveStreamDetection ApsaraVideo for Live流檢測
      $request->service = "videoDetection_global";
      $serviceParameters = array("taskId" => "vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****");
      
      $request->serviceParameters = json_encode($serviceParameters);
      
      $runtime = new RuntimeOptions();
      $runtime->readTimeout = 6000;
      $runtime->connectTimeout = 3000;
      
      try {
          $response = $client->videoModerationResultWithOptions($request, $runtime);
          if (200 != $response->statusCode) {
              print_r("response not success. code:" . $response->statusCode);
              return;
          }
          $body = $response->body;
          print_r("requestId = " . $body->requestId . "\n");
          print_r("code = " . $body->code . "\n");
          print_r("message = " . $body->message . "\n");
          if (280 == $body->code) {
              print_r("processing video moderation. code:" . $body->code);
              return;
          }
          if (200 != $body->code) {
              print_r("video moderation result not success. code:" . $body->code);
              return;
          }
          $data = $body->data;
          print_r("liveId = " . $data->liveId . "\n");
          print_r("dataId = " . $data->dataId . "\n");
          print_r("riskLevel = " . $data->RiskLevel . "\n");
          print_r("audioResult = " . json_encode($data->audioResult) . "\n");
          print_r("frameResult = " . json_encode($data->frameResult) . "\n");
      } catch (TeaUnableRetryError $e) {
          var_dump($e->getMessage());
          var_dump($e->getErrorInfo());
          var_dump($e->getLastException());
          var_dump($e->getLastRequest());
      }
    • 取消ApsaraVideo for Live流檢測任務程式碼範例

      <?php
        require('vendor/autoload.php');
      
      use AlibabaCloud\SDK\Green\V20220302\Models\VideoModerationCancelRequest;
      use AlibabaCloud\Tea\Exception\TeaUnableRetryError;
      use Darabonba\OpenApi\Models\Config;
      use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
      use AlibabaCloud\SDK\Green\V20220302\Green;
      
      $config = new Config([
          /**
           * 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
           * 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。
           * 常見擷取環境變數方式:
           * 擷取RAM使用者AccessKey ID:getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
           * 擷取RAM使用者AccessKey Secret:getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
           */
          "accessKeyId" => '建議從環境變數中擷取RAM使用者AccessKey ID',
          "accessKeySecret" => '建議從環境變數中擷取RAM使用者AccessKey Secret',
          // 設定HTTP代理。
          // "httpProxy" => "http://10.10.xx.xx:xxxx",
          // 設定HTTPS代理。
          // "httpsProxy" => "https://10.10.xx.xx:xxxx",
          "endpoint" => "green-cip.ap-southeast-1.aliyuncs.com",
          "regionId" => "ap-southeast-1"
      
      ]);
      // 注意,此處執行個體化的client請儘可能重複使用,避免重複建立串連,提升檢測效能。
      $client = new Green($config);
      
      $request = new VideoModerationCancelRequest();
      // 檢測類型: videoDetection 視頻檔案檢測, liveStreamDetection ApsaraVideo for Live流檢測
      $request->service = "liveStreamDetection_global";
      $serviceParameters = array('taskId' => 'vi_s_lyxBXzWhSsxuJjiNHcpQ0N-*****');
      
      $request->serviceParameters = json_encode($serviceParameters);
      
      $runtime = new RuntimeOptions();
      $runtime->readTimeout = 6000;
      $runtime->connectTimeout = 3000;
      
      try {
        $response = $client->videoModerationCancel($request, $runtime);
        print_r($response->body);
        if (200 == $response->statusCode) {
          $body = $response->body;
          print_r("requestId = " . $body->requestId);
          print_r("code = " . $body->code);
          print_r("message = " . $body->message);
          if (200 != $body->code) {
            print_r("video moderation cancel not success. code:" . $body->code);
          }
        } else {
          print_r("response not success. code:" . $response->statusCode);
        }
      } catch (TeaUnableRetryError $e) {
        var_dump($e->getMessage());
        var_dump($e->getErrorInfo());
        var_dump($e->getLastException());
        var_dump($e->getLastRequest());
      }

使用情境

如果您需要審核的視頻檔案已經儲存在阿里雲Object Storage Service中,您可授權建立服務角色,允許Alibaba Content Security Service服務訪問Object Storage Service。視頻審核2.0版服務會通過服務角色擷取到Object Storage Service的檔案後進行審核。訪問雲資源訪問授權頁面建立服務角色。

  1. 執行如下命令引入相關依賴。

    composer require alibabacloud/green-20220302 2.19.1
  2. 接入PHP SDK。

    • 提交視頻檢測任務程式碼範例

      <?php
      require('vendor/autoload.php');
      
      use AlibabaCloud\SDK\Green\V20220302\Models\VideoModerationRequest;
      use AlibabaCloud\Tea\Exception\TeaUnableRetryError;
      use Darabonba\OpenApi\Models\Config;
      use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
      use AlibabaCloud\SDK\Green\V20220302\Green;
      
      $config = new Config([
          /**
           * 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
           * 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。
           * 常見擷取環境變數方式:
           * 擷取RAM使用者AccessKey ID:getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
           * 擷取RAM使用者AccessKey Secret:getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
           */
          "accessKeyId" => '建議從環境變數中擷取RAM使用者AccessKey ID',
          "accessKeySecret" => '建議從環境變數中擷取RAM使用者AccessKey Secret',
          // 設定HTTP代理。
          // "httpProxy" => "http://10.10.xx.xx:xxxx",
          // 設定HTTPS代理。
          // "httpsProxy" => "https://10.10.xx.xx:xxxx",
          "endpoint" => "green-cip.ap-southeast-1.aliyuncs.com",
          "regionId" => "ap-southeast-1"
      
      ]);
      // 注意,此處執行個體化的client請儘可能重複使用,避免重複建立串連,提升檢測效能。
      $client = new Green($config);
      
      $request = new VideoModerationRequest();
      // 檢測類型: videoDetection_global 視頻檔案檢測, liveStreamDetection_global ApsaraVideo for Live流檢測
      $request->service = "videoDetection_global";
      $serviceParameters = array(
                // 待檢測檔案。 樣本:video/001.mp4
              'ossObjectName' => 'video/001.mp4',
              // 待檢測檔案所在bucket的地區。 樣本:cn-shanghai
              'ossRegionId' => 'ap-southeast-1',
                // 待檢測檔案所在bucket名稱。樣本:bucket001
              'ossBucketName' => 'bucket001',
              // 資料唯一標識。
              'dataId' => uniqid());
      
      $request->serviceParameters = json_encode($serviceParameters);
      
      $runtime = new RuntimeOptions();
      $runtime->readTimeout = 6000;
      $runtime->connectTimeout = 3000;
      
      try {
          $response = $client->videoModerationWithOptions($request, $runtime);
          print_r($response->body);
          if (200 != $response->statusCode) {
              print_r("response not success. code:" . $response->statusCode);
              return;
          }
          $body = $response->body;
          print_r("requestId = " . $body->requestId . "\n");
          print_r("code = " . $body->code . "\n");
          print_r("message = " . $body->message . "\n");
          if (200 != $body->code) {
              print_r("video moderation not success. code:" . $body->code);
          }
          $data = $body->data;
          print_r("taskId = " . $data->taskId);
      } catch (TeaUnableRetryError $e) {
          var_dump($e->getMessage());
          var_dump($e->getErrorInfo());
          var_dump($e->getLastException());
          var_dump($e->getLastRequest());
      }
    • 擷取視頻檢測任務程式碼範例

      <?php
      require('vendor/autoload.php');
      
      use AlibabaCloud\SDK\Green\V20220302\Models\VideoModerationResultRequest;
      use AlibabaCloud\Tea\Exception\TeaUnableRetryError;
      use Darabonba\OpenApi\Models\Config;
      use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
      use AlibabaCloud\SDK\Green\V20220302\Green;
      
      $config = new Config([
          /**
           * 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
           * 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。
           * 常見擷取環境變數方式:
           * 擷取RAM使用者AccessKey ID:getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
           * 擷取RAM使用者AccessKey Secret:getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
           */
          "accessKeyId" => '建議從環境變數中擷取RAM使用者AccessKey ID',
          "accessKeySecret" => '建議從環境變數中擷取RAM使用者AccessKey Secret',
          // 設定HTTP代理。
          // "httpProxy" => "http://10.10.xx.xx:xxxx",
          // 設定HTTPS代理。
          // "httpsProxy" => "https://10.10.xx.xx:xxxx",
          "endpoint" => "green-cip.ap-southeast-1.aliyuncs.com",
          "regionId" => "ap-southeast-1"
      
      ]);
      // 注意,此處執行個體化的client請儘可能重複使用,避免重複建立串連,提升檢測效能。
      $client = new Green($config);
      
      $request = new VideoModerationResultRequest();
      // 檢測類型: videoDetection 視頻檔案檢測, liveStreamDetection ApsaraVideo for Live流檢測
      $request->service = "videoDetection_global";
      $serviceParameters = array("taskId" => "vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****");
      
      $request->serviceParameters = json_encode($serviceParameters);
      
      $runtime = new RuntimeOptions();
      $runtime->readTimeout = 6000;
      $runtime->connectTimeout = 3000;
      
      try {
          $response = $client->videoModerationResultWithOptions($request, $runtime);
          if (200 != $response->statusCode) {
              print_r("response not success. code:" . $response->statusCode);
              return;
          }
          $body = $response->body;
          print_r("requestId = " . $body->requestId . "\n");
          print_r("code = " . $body->code . "\n");
          print_r("message = " . $body->message . "\n");
          if (280 == $body->code) {
              print_r("processing video moderation. code:" . $body->code);
              return;
          }
          if (200 != $body->code) {
              print_r("video moderation result not success. code:" . $body->code);
              return;
          }
          $data = $body->data;
          print_r("liveId = " . $data->liveId . "\n");
          print_r("dataId = " . $data->dataId . "\n");
          print_r("riskLevel = " . $data->RiskLevel . "\n");
          print_r("audioResult = " . json_encode($data->audioResult) . "\n");
          print_r("frameResult = " . json_encode($data->frameResult) . "\n");
      } catch (TeaUnableRetryError $e) {
          var_dump($e->getMessage());
          var_dump($e->getErrorInfo());
          var_dump($e->getLastException());
          var_dump($e->getLastRequest());
      }
    • 取消ApsaraVideo for Live流檢測任務程式碼範例

      <?php
        require('vendor/autoload.php');
      
      use AlibabaCloud\SDK\Green\V20220302\Models\VideoModerationCancelRequest;
      use AlibabaCloud\Tea\Exception\TeaUnableRetryError;
      use Darabonba\OpenApi\Models\Config;
      use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
      use AlibabaCloud\SDK\Green\V20220302\Green;
      
      $config = new Config([
          /**
           * 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
           * 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。
           * 常見擷取環境變數方式:
           * 擷取RAM使用者AccessKey ID:getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
           * 擷取RAM使用者AccessKey Secret:getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
           */
          "accessKeyId" => '建議從環境變數中擷取RAM使用者AccessKey ID',
          "accessKeySecret" => '建議從環境變數中擷取RAM使用者AccessKey Secret',
          // 設定HTTP代理。
          // "httpProxy" => "http://10.10.xx.xx:xxxx",
          // 設定HTTPS代理。
          // "httpsProxy" => "https://10.10.xx.xx:xxxx",
          "endpoint" => "green-cip.ap-southeast-1.aliyuncs.com",
          "regionId" => "ap-southeast-1"
      
      ]);
      // 注意,此處執行個體化的client請儘可能重複使用,避免重複建立串連,提升檢測效能。
      $client = new Green($config);
      
      $request = new VideoModerationCancelRequest();
      // 檢測類型: videoDetection 視頻檔案檢測, liveStreamDetection ApsaraVideo for Live流檢測
      $request->service = "liveStreamDetection_global";
      $serviceParameters = array('taskId' => 'vi_s_lyxBXzWhSsxuJjiNHcpQ0N-*****');
      
      $request->serviceParameters = json_encode($serviceParameters);
      
      $runtime = new RuntimeOptions();
      $runtime->readTimeout = 6000;
      $runtime->connectTimeout = 3000;
      
      try {
        $response = $client->videoModerationCancel($request, $runtime);
        print_r($response->body);
        if (200 == $response->statusCode) {
          $body = $response->body;
          print_r("requestId = " . $body->requestId);
          print_r("code = " . $body->code);
          print_r("message = " . $body->message);
          if (200 != $body->code) {
            print_r("video moderation cancel not success. code:" . $body->code);
          }
        } else {
          print_r("response not success. code:" . $response->statusCode);
        }
      } catch (TeaUnableRetryError $e) {
        var_dump($e->getMessage());
        var_dump($e->getErrorInfo());
        var_dump($e->getLastException());
        var_dump($e->getLastRequest());
      }

支援以下三種類型的視頻檢測。

對公網可訪問視頻進行檢測
對本地視頻進行檢測
對OSS視頻進行檢測

使用情境

當需要審核的視頻可通過公網連結訪問時,視頻審核2.0版服務可通過視頻URL擷取檔案後進行審核。

  1. 執行如下命令引入相關依賴。

    go get github.com/alibabacloud-go/green-20220302/v2
  2. 接入Go SDK。

    • 提交視頻檢測任務程式碼範例

      package main
      
      import (
          "encoding/json"
          "fmt"
          openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
          green20220302 "github.com/alibabacloud-go/green-20220302/client"
          util "github.com/alibabacloud-go/tea-utils/v2/service"
          "github.com/alibabacloud-go/tea/tea"
          "net/http"
      )
      
      func main() {
          // 工程代碼泄露可能會導致AccessKey泄露,並威脅帳號下所有資源的安全性。以下程式碼範例僅供參考,建議使用更安全的STS方式。
          config := &openapi.Config{
              /**
               * 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
               * 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。
               * 常見擷取環境變數方式:
               * 擷取RAM使用者AccessKey ID:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
               * 擷取RAM使用者AccessKey Secret:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
               */
              AccessKeyId: tea.String("建議從環境變數中擷取RAM使用者AccessKey ID"),
              AccessKeySecret: tea.String("建議從環境變數中擷取RAM使用者AccessKey Secret"),
              // 設定HTTP代理。
              // HttpProxy: tea.String("http://xx.xx.xx.xx:xxxx"),
              // 設定HTTPS代理。
              // HttpsProxy: tea.String("https://username:password@xxx.xxx.xxx.xxx:9999"),
              RegionId: tea.String("ap-southeast-1"),
              Endpoint: tea.String("green-cip.ap-southeast-1.aliyuncs.com"),
              /**
      		 * 請設定逾時時間。服務端全鏈路處理逾時時間為10秒,請做相應設定。
      		 * 如果您設定的ReadTimeout小於服務端處理的時間,程式中會獲得一個ReadTimeout異常。
      		 */
              ConnectTimeout: tea.Int(3000),
              ReadTimeout:    tea.Int(6000),
          }
          client, _err := green20220302.NewClient(config)
          if _err != nil {
              panic(_err)
          }
      
          // 建立RuntimeObject執行個體並設定運行參數。
          runtime := &util.RuntimeOptions{}
          runtime.ReadTimeout = tea.Int(10000)
          runtime.ConnectTimeout = tea.Int(10000)
      
          serviceParameters, _ := json.Marshal(
              map[string]interface{}{
                  "url": "https://xxx.oss.aliyuncs.com/xxx.mp4",
              },
          )
          request := green20220302.VideoModerationRequest{
              Service:           tea.String("videoDetection_global"),
              ServiceParameters: tea.String(string(serviceParameters)),
          }
      
          result, _err := client.VideoModerationWithOptions(&request, runtime)
          if _err != nil {
              panic(_err)
          }
      
          if *result.StatusCode != http.StatusOK {
              fmt.Printf("response not success. status:%d\n", *result.StatusCode)
              return
          }
          body := result.Body
          fmt.Printf("response success. requestId:%s, code:%d, msg:%s\n", *body.RequestId, *body.Code, *body.Message)
          if *body.Code != http.StatusOK {
              fmt.Printf("video moderation not success. code:%d\n", *body.Code)
              return
          }
          
          data := body.Data
          fmt.Printf("video moderation taskId:%s\n", *data.TaskId)
      }
    • 擷取視頻檢測任務結果

      package main
      
      import (
      	"encoding/json"
      	"fmt"
      	openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
      	green20220302 "github.com/alibabacloud-go/green-20220302/client"
      	util "github.com/alibabacloud-go/tea-utils/v2/service"
      	"github.com/alibabacloud-go/tea/tea"
      	"net/http"
      )
      
      func main() {
      	// 工程代碼泄露可能會導致AccessKey泄露,並威脅帳號下所有資源的安全性。以下程式碼範例僅供參考,建議使用更安全的STS方式。
          config := &openapi.Config{
              /**
               * 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
               * 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。
               * 常見擷取環境變數方式:
               * 擷取RAM使用者AccessKey ID:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
               * 擷取RAM使用者AccessKey Secret:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
               */
              AccessKeyId: tea.String("建議從環境變數中擷取RAM使用者AccessKey ID"),
              AccessKeySecret: tea.String("建議從環境變數中擷取RAM使用者AccessKey Secret"),
              // 設定HTTP代理。
              // HttpProxy: tea.String("http://xx.xx.xx.xx:xxxx"),
              // 設定HTTPS代理。
              // HttpsProxy: tea.String("https://username:password@xxx.xxx.xxx.xxx:9999"),
              RegionId: tea.String("ap-southeast-1"),
              Endpoint: tea.String("green-cip.ap-southeast-1.aliyuncs.com"),
              /**
      		 * 請設定逾時時間。服務端全鏈路處理逾時時間為10秒,請做相應設定。
      		 * 如果您設定的ReadTimeout小於服務端處理的時間,程式中會獲得一個ReadTimeout異常。
      		 */
              ConnectTimeout: tea.Int(3000),
              ReadTimeout:    tea.Int(6000),
          }
      	client, _err := green20220302.NewClient(config)
      	if _err != nil {
      		panic(_err)
      	}
      
      	// 建立RuntimeObject執行個體並設定運行參數。
      	runtime := &util.RuntimeOptions{}
      	runtime.ReadTimeout = tea.Int(10000)
      	runtime.ConnectTimeout = tea.Int(10000)
      
      	serviceParameters, _ := json.Marshal(
      		map[string]interface{}{
      			"taskId": "vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****",
      		},
      	)
      	request := green20220302.VideoModerationResultRequest{
      		Service:           tea.String("videoDetection_global"),
      		ServiceParameters: tea.String(string(serviceParameters)),
      	}
      
      	result, _err := client.VideoModerationResultWithOptions(&request, runtime)
      	if _err != nil {
      		panic(_err)
      	}
      
      	if *result.StatusCode != http.StatusOK {
      		fmt.Printf("response not success. status:%d\n", *result.StatusCode)
      		return
      	}
      	body := result.Body
      	fmt.Printf("response success. requestId:%s, code:%d, msg:%s\n", *body.RequestId, *body.Code, *body.Message)
      	if *body.Code == 280 {
      		fmt.Printf("processing video moderation. code:%d\n", *body.Code)
      		return
      	}
      	if *body.Code != http.StatusOK {
      		fmt.Printf("video moderation result not success. code:%d\n", *body.Code)
      		return
      	}
      
      	data := body.Data
          fmt.Printf("video moderation result:%s\n", data)
      	fmt.Printf("video moderation result audioResult:%s\n", data.AudioResult)
      	fmt.Printf("video moderation result frameResult:%s\n", data.FrameResult)
      }
    • 取消ApsaraVideo for Live流檢測任務程式碼範例

      package main
      
      import (
          "encoding/json"
          "fmt"
          openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
          green20220302 "github.com/alibabacloud-go/green-20220302/client"
          util "github.com/alibabacloud-go/tea-utils/v2/service"
          "github.com/alibabacloud-go/tea/tea"
          "net/http"
      )
      
      func main() {
      	// 工程代碼泄露可能會導致AccessKey泄露,並威脅帳號下所有資源的安全性。以下程式碼範例僅供參考,建議使用更安全的STS方式。
          config := &openapi.Config{
              /**
               * 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
               * 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。
               * 常見擷取環境變數方式:
               * 擷取RAM使用者AccessKey ID:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
               * 擷取RAM使用者AccessKey Secret:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
               */
              AccessKeyId: tea.String("建議從環境變數中擷取RAM使用者AccessKey ID"),
              AccessKeySecret: tea.String("建議從環境變數中擷取RAM使用者AccessKey Secret"),
              // 設定HTTP代理。
              // HttpProxy: tea.String("http://xx.xx.xx.xx:xxxx"),
              // 設定HTTPS代理。
              // HttpsProxy: tea.String("https://username:password@xxx.xxx.xxx.xxx:9999"),
              RegionId: tea.String("ap-southeast-1"),
              Endpoint: tea.String("green-cip.ap-southeast-1.aliyuncs.com"),
              /**
      		 * 請設定逾時時間。服務端全鏈路處理逾時時間為10秒,請做相應設定。
      		 * 如果您設定的ReadTimeout小於服務端處理的時間,程式中會獲得一個ReadTimeout異常。
      		 */
              ConnectTimeout: tea.Int(3000),
              ReadTimeout:    tea.Int(6000),
          }
      	client, _err := green20220302.NewClient(config)
      	if _err != nil {
      		panic(_err)
      	}
      
          // 建立RuntimeObject執行個體並設定運行參數。
          runtime := &util.RuntimeOptions{}
          runtime.ReadTimeout = tea.Int(10000)
          runtime.ConnectTimeout = tea.Int(10000)
      
          serviceParameters, _ := json.Marshal(
              map[string]interface{}{
                  "taskId": "vi_s_lyxBXzWhSsxuJjiNHcpQ0N-*****",
              },
          )
          request := green20220302.VideoModerationCancelRequest{
              Service:           tea.String("liveStreamDetection_global"),
              ServiceParameters: tea.String(string(serviceParameters)),
          }
      
          result, _err := client.VideoModerationCancelWithOptions(&request, runtime)
          if _err != nil {
              panic(_err)
          }
      
          if *result.StatusCode != http.StatusOK {
              fmt.Printf("response not success. status:%d\n", *result.StatusCode)
              return
          }
          body := result.Body
          fmt.Printf("response success. requestId:%s, code:%d, msg:%s\n", *body.RequestId, *body.Code, *body.Message)
          if *body.Code != http.StatusOK {
              fmt.Printf("video moderation cancel not success. code:%d\n", *body.Code)
          }
      }

使用情境

當您需要審核的視頻在本地機器且無公網訪問連結,您可以將視頻上傳到Alibaba Content Security Service提供的Object Storage Service Bucket中,視頻審核2.0版服務可直接存取Object Storage Service,擷取到視頻內容後進行審核。

  1. 執行如下命令引入相關依賴。

    go get github.com/alibabacloud-go/green-20220302/v2

    安裝OSS SDK:

    go get github.com/aliyun/aliyun-oss-go-sdk/oss
  2. 接入Go SDK。

    • 提交視頻檢測任務程式碼範例

      package main
      
      import (
          "encoding/json"
          "fmt"
          openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
          green20220302 "github.com/alibabacloud-go/green-20220302/client"
          util "github.com/alibabacloud-go/tea-utils/v2/service"
          "github.com/alibabacloud-go/tea/tea"
          "github.com/aliyun/aliyun-oss-go-sdk/oss"
          "github.com/google/uuid"
          "net/http"
          "os"
          "strings"
          "time"
      )
      //檔案上傳token
      var TokenMap =make(map[string]*green20220302.DescribeUploadTokenResponseBodyData)
      //檔案上傳用戶端
      var Bucket *oss.Bucket
      //服務是否部署在VPC上
      var isVPC = false
      //建立請求用戶端
      func createClient(accessKeyId string, accessKeySecret string, endpoint string) (*green20220302.Client, error) {
          config := &openapi.Config{
              AccessKeyId: tea.String(accessKeyId),
              AccessKeySecret: tea.String(accessKeySecret),
              // 設定HTTP代理。
              // HttpProxy: tea.String("http://10.10.xx.xx:xxxx"),
              // 設定HTTPS代理。
              // HttpsProxy: tea.String("https://username:password@xxx.xxx.xxx.xxx:9999"),
              Endpoint: tea.String(endpoint),
          }
          //注意,此處執行個體化的client請儘可能重複使用,避免重複建立串連,提升檢測效能。
          return green20220302.NewClient(config);
      }
      
      //建立上傳檔案用戶端
      func createOssClient(tokenData *green20220302.DescribeUploadTokenResponseBodyData) {
          if isVPC{
              ossClient, err := oss.New(tea.StringValue(tokenData.OssInternalEndPoint), tea.StringValue(tokenData.AccessKeyId), tea.StringValue(tokenData.AccessKeySecret), oss.SecurityToken(tea.StringValue(tokenData.SecurityToken)))
              if err != nil {
                  fmt.Println("Error:", err)
                  os.Exit(-1)
              }
              Bucket, _ =ossClient.Bucket(tea.StringValue(tokenData.BucketName));
          }else {
              ossClient, err := oss.New(tea.StringValue(tokenData.OssInternetEndPoint), tea.StringValue(tokenData.AccessKeyId), tea.StringValue(tokenData.AccessKeySecret), oss.SecurityToken(tea.StringValue(tokenData.SecurityToken)))
              if err != nil {
                  fmt.Println("Error:", err)
                  os.Exit(-1)
              }
              Bucket, _ =ossClient.Bucket(tea.StringValue(tokenData.BucketName));
          }
      }
      
      //上傳檔案
      func uploadFile(filePath string,tokenData *green20220302.DescribeUploadTokenResponseBodyData) (string,error) {
          createOssClient(tokenData)
          objectName := tea.StringValue(tokenData.FileNamePrefix) + uuid.New().String() + "." + strings.Split(filePath, ".")[1]
              //上傳檔案
              _err := Bucket.PutObjectFromFile(objectName, filePath)
              if _err != nil {
                  fmt.Println("Error:", _err)
                  os.Exit(-1)
              }
          return objectName,_err
      }
      
      func invoke(accessKeyId string, accessKeySecret string, endpoint string) (_result *green20220302.VideoModerationResponse, _err error) {
          //注意,此處執行個體化的client請儘可能重複使用,避免重複建立串連,提升檢測效能。
          client, _err := createClient(accessKeyId, accessKeySecret, endpoint)
          if _err != nil {
              return nil,_err
          }
          //運行時參數設定,僅對使用了該運行時參數執行個體的請求有效
          runtime := &util.RuntimeOptions{}
          //本地檔案的完整路徑,例如D:\localPath\exampleFile.mp4。
          var filePath = "D:\\localPath\\exampleFile.mp4"
          //擷取檔案上傳臨時token
              tokenData,ok:=TokenMap[endpoint];
              if !ok || tea.Int32Value(tokenData.Expiration) <= int32(time.Now().Unix()) {
                  //擷取檔案上傳臨時token
                  uploadTokenResponse, _err := client.DescribeUploadToken()
                  if _err != nil {
                      return nil,_err
                  }
                  tokenData = uploadTokenResponse.Body.Data
                  TokenMap[endpoint] = tokenData
              }
               var objectName, _ = uploadFile(filePath,TokenMap[endpoint])
      
          //構建檢測請求。
              serviceParameters, _ := json.Marshal(
                  map[string]interface{}{
                      "ossBucketName": tea.StringValue(TokenMap[endpoint].BucketName),
                      "ossObjectName": objectName,
                      "dataId":   uuid.New().String(),
                  },
              )
              videoModerationRequest := &green20220302.VideoModerationRequest{
                  //樣本:videoDetection_global
            Service:           tea.String("videoDetection_global"),
                  ServiceParameters: tea.String(string(serviceParameters)),
              }
      
          return client.VideoModerationWithOptions(videoModerationRequest, runtime)
      
      }
      
      func main() {
          /**
           * 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
           * 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。
           * 常見擷取環境變數方式:
           * 擷取RAM使用者AccessKey ID:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
           * 擷取RAM使用者AccessKey Secret:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
           */
          var accessKeyId= "建議從環境變數中擷取RAM使用者AccessKey ID";
          var accessKeySecret= "建議從環境變數中擷取RAM使用者AccessKey Secret";
          //接入地區和地址請根據實際情況修改
          var endpoint = "green-cip.ap-southeast-1.aliyuncs.com";
          response,_err := invoke(accessKeyId,accessKeySecret,endpoint)
          
          flag := false
          if _err != nil {
              var err = &tea.SDKError{}
              if _t, ok := _err.(*tea.SDKError); ok {
                  err = _t
                  if *err.StatusCode == 500 {
                      flag = true
                  }
              }
          }
          if response == nil || *response.StatusCode == 500 || *response.Body.Code == 500 {
              flag = true
          }
          //自動路由,地區切換至cn-beijing。
          if flag {
              endpoint = "green-cip.cn-beijing.aliyuncs.com";
              response, _err = invoke(accessKeyId,accessKeySecret,endpoint)
          }
      
          if response != nil {
              statusCode := tea.IntValue(tea.ToInt(response.StatusCode))
              body := response.Body
              videoModerationResponseData := body.Data
              fmt.Println("requestId:" + tea.StringValue(body.RequestId))
              if statusCode == http.StatusOK {
                  fmt.Println("response success. response:" + body.String())
                  if tea.IntValue(tea.ToInt(body.Code)) == 200 {
                      result := videoModerationResponseData.Result
                      fmt.Println("response dataId:" + tea.StringValue(videoModerationResponseData.DataId))
                      for i := 0; i < len(result); i++ {
                          fmt.Println("response label:" + tea.StringValue(result[i].Label))
                          fmt.Println("response confidence:" + tea.ToString(tea.Float32Value(result[i].Confidence)))
                      }
                  } else {
                      fmt.Println("videomoderation not success. status" + tea.ToString(body.Code))
                  }
              } else {
                  fmt.Print("response not success. status:" + tea.ToString(statusCode))
              }
          }
      }
    • 擷取視頻檢測任務結果

      package main
      
      import (
      	"encoding/json"
      	"fmt"
      	openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
      	green20220302 "github.com/alibabacloud-go/green-20220302/client"
      	util "github.com/alibabacloud-go/tea-utils/v2/service"
      	"github.com/alibabacloud-go/tea/tea"
      	"net/http"
      )
      
      func main() {
      	// 工程代碼泄露可能會導致AccessKey泄露,並威脅帳號下所有資源的安全性。以下程式碼範例僅供參考,建議使用更安全的STS方式。
          config := &openapi.Config{
              /**
               * 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
               * 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。
               * 常見擷取環境變數方式:
               * 擷取RAM使用者AccessKey ID:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
               * 擷取RAM使用者AccessKey Secret:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
               */
              AccessKeyId: tea.String("建議從環境變數中擷取RAM使用者AccessKey ID"),
              AccessKeySecret: tea.String("建議從環境變數中擷取RAM使用者AccessKey Secret"),
              // 設定HTTP代理。
              // HttpProxy: tea.String("http://xx.xx.xx.xx:xxxx"),
              // 設定HTTPS代理。
              // HttpsProxy: tea.String("https://username:password@xxx.xxx.xxx.xxx:9999"),
              RegionId: tea.String("ap-southeast-1"),
              Endpoint: tea.String("green-cip.ap-southeast-1.aliyuncs.com"),
              /**
      		 * 請設定逾時時間。服務端全鏈路處理逾時時間為10秒,請做相應設定。
      		 * 如果您設定的ReadTimeout小於服務端處理的時間,程式中會獲得一個ReadTimeout異常。
      		 */
              ConnectTimeout: tea.Int(3000),
              ReadTimeout:    tea.Int(6000),
          }
      	client, _err := green20220302.NewClient(config)
      	if _err != nil {
      		panic(_err)
      	}
      
      	// 建立RuntimeObject執行個體並設定運行參數。
      	runtime := &util.RuntimeOptions{}
      	runtime.ReadTimeout = tea.Int(10000)
      	runtime.ConnectTimeout = tea.Int(10000)
      
      	serviceParameters, _ := json.Marshal(
      		map[string]interface{}{
      			"taskId": "vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****",
      		},
      	)
      	request := green20220302.VideoModerationResultRequest{
      		Service:           tea.String("videoDetection_global"),
      		ServiceParameters: tea.String(string(serviceParameters)),
      	}
      
      	result, _err := client.VideoModerationResultWithOptions(&request, runtime)
      	if _err != nil {
      		panic(_err)
      	}
      
      	if *result.StatusCode != http.StatusOK {
      		fmt.Printf("response not success. status:%d\n", *result.StatusCode)
      		return
      	}
      	body := result.Body
      	fmt.Printf("response success. requestId:%s, code:%d, msg:%s\n", *body.RequestId, *body.Code, *body.Message)
      	if *body.Code == 280 {
      		fmt.Printf("processing video moderation. code:%d\n", *body.Code)
      		return
      	}
      	if *body.Code != http.StatusOK {
      		fmt.Printf("video moderation result not success. code:%d\n", *body.Code)
      		return
      	}
      
      	data := body.Data
          fmt.Printf("video moderation result:%s\n", data)
      	fmt.Printf("video moderation result audioResult:%s\n", data.AudioResult)
      	fmt.Printf("video moderation result frameResult:%s\n", data.FrameResult)
      }
    • 取消ApsaraVideo for Live流檢測任務程式碼範例

      package main
      
      import (
          "encoding/json"
          "fmt"
          openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
          green20220302 "github.com/alibabacloud-go/green-20220302/client"
          util "github.com/alibabacloud-go/tea-utils/v2/service"
          "github.com/alibabacloud-go/tea/tea"
          "net/http"
      )
      
      func main() {
      	// 工程代碼泄露可能會導致AccessKey泄露,並威脅帳號下所有資源的安全性。以下程式碼範例僅供參考,建議使用更安全的STS方式。
          config := &openapi.Config{
              /**
               * 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
               * 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。
               * 常見擷取環境變數方式:
               * 擷取RAM使用者AccessKey ID:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
               * 擷取RAM使用者AccessKey Secret:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
               */
              AccessKeyId: tea.String("建議從環境變數中擷取RAM使用者AccessKey ID"),
              AccessKeySecret: tea.String("建議從環境變數中擷取RAM使用者AccessKey Secret"),
              // 設定HTTP代理。
              // HttpProxy: tea.String("http://xx.xx.xx.xx:xxxx"),
              // 設定HTTPS代理。
              // HttpsProxy: tea.String("https://username:password@xxx.xxx.xxx.xxx:9999"),
              RegionId: tea.String("ap-southeast-1"),
              Endpoint: tea.String("green-cip.ap-southeast-1.aliyuncs.com"),
              /**
      		 * 請設定逾時時間。服務端全鏈路處理逾時時間為10秒,請做相應設定。
      		 * 如果您設定的ReadTimeout小於服務端處理的時間,程式中會獲得一個ReadTimeout異常。
      		 */
              ConnectTimeout: tea.Int(3000),
              ReadTimeout:    tea.Int(6000),
          }
      	client, _err := green20220302.NewClient(config)
      	if _err != nil {
      		panic(_err)
      	}
      
          // 建立RuntimeObject執行個體並設定運行參數。
          runtime := &util.RuntimeOptions{}
          runtime.ReadTimeout = tea.Int(10000)
          runtime.ConnectTimeout = tea.Int(10000)
      
          serviceParameters, _ := json.Marshal(
              map[string]interface{}{
                  "taskId": "vi_s_lyxBXzWhSsxuJjiNHcpQ0N-*****",
              },
          )
          request := green20220302.VideoModerationCancelRequest{
              Service:           tea.String("liveStreamDetection_global"),
              ServiceParameters: tea.String(string(serviceParameters)),
          }
      
          result, _err := client.VideoModerationCancelWithOptions(&request, runtime)
          if _err != nil {
              panic(_err)
          }
      
          if *result.StatusCode != http.StatusOK {
              fmt.Printf("response not success. status:%d\n", *result.StatusCode)
              return
          }
          body := result.Body
          fmt.Printf("response success. requestId:%s, code:%d, msg:%s\n", *body.RequestId, *body.Code, *body.Message)
          if *body.Code != http.StatusOK {
              fmt.Printf("video moderation cancel not success. code:%d\n", *body.Code)
          }
      }

使用情境

如果您需要審核的視頻檔案已經儲存在阿里雲Object Storage Service中,您可授權建立服務角色,允許Alibaba Content Security Service服務訪問Object Storage Service。視頻審核2.0版服務會通過服務角色擷取到Object Storage Service的檔案後進行審核。訪問雲資源訪問授權頁面建立服務角色。

  1. 執行如下命令引入相關依賴。

    go get github.com/alibabacloud-go/green-20220302/v2
  2. 接入Go SDK。

    • 提交視頻檢測任務程式碼範例

      package main
      
      import (
          "encoding/json"
          "fmt"
          openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
          green20220302 "github.com/alibabacloud-go/green-20220302/client"
          util "github.com/alibabacloud-go/tea-utils/v2/service"
          "github.com/alibabacloud-go/tea/tea"
          "net/http"
      )
      
      func main() {
          // 工程代碼泄露可能會導致AccessKey泄露,並威脅帳號下所有資源的安全性。以下程式碼範例僅供參考,建議使用更安全的STS方式。
          config := &openapi.Config{
              /**
               * 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
               * 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。
               * 常見擷取環境變數方式:
               * 擷取RAM使用者AccessKey ID:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
               * 擷取RAM使用者AccessKey Secret:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
               */
              AccessKeyId: tea.String("建議從環境變數中擷取RAM使用者AccessKey ID"),
              AccessKeySecret: tea.String("建議從環境變數中擷取RAM使用者AccessKey Secret"),
              // 設定HTTP代理。
              // HttpProxy: tea.String("http://xx.xx.xx.xx:xxxx"),
              // 設定HTTPS代理。
              // HttpsProxy: tea.String("https://username:password@xxx.xxx.xxx.xxx:9999"),
              RegionId: tea.String("ap-southeast-1"),
              Endpoint: tea.String("green-cip.ap-southeast-1.aliyuncs.com"),
              /**
      		 * 請設定逾時時間。服務端全鏈路處理逾時時間為10秒,請做相應設定。
      		 * 如果您設定的ReadTimeout小於服務端處理的時間,程式中會獲得一個ReadTimeout異常。
      		 */
              ConnectTimeout: tea.Int(3000),
              ReadTimeout:    tea.Int(6000),
          }
          client, _err := green20220302.NewClient(config)
          if _err != nil {
              panic(_err)
          }
      
          // 建立RuntimeObject執行個體並設定運行參數。
          runtime := &util.RuntimeOptions{}
          runtime.ReadTimeout = tea.Int(10000)
          runtime.ConnectTimeout = tea.Int(10000)
      
          serviceParameters, _ := json.Marshal(
              map[string]interface{}{
                  "ossBucketName": "bucket_01",
                  "ossObjectName": "conect/xxx.mp4",
                  "ossRegionId": "ap-southeast-1",
              },
          )
          request := green20220302.VideoModerationRequest{
              Service:           tea.String("videoDetection_global"),
              ServiceParameters: tea.String(string(serviceParameters)),
          }
      
          result, _err := client.VideoModerationWithOptions(&request, runtime)
          if _err != nil {
              panic(_err)
          }
      
          if *result.StatusCode != http.StatusOK {
              fmt.Printf("response not success. status:%d\n", *result.StatusCode)
              return
          }
          body := result.Body
          fmt.Printf("response success. requestId:%s, code:%d, msg:%s\n", *body.RequestId, *body.Code, *body.Message)
          if *body.Code != http.StatusOK {
              fmt.Printf("video moderation not success. code:%d\n", *body.Code)
              return
          }
          
          data := body.Data
          fmt.Printf("video moderation taskId:%s\n", *data.TaskId)
      }
    • 擷取視頻檢測任務結果

      package main
      
      import (
      	"encoding/json"
      	"fmt"
      	openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
      	green20220302 "github.com/alibabacloud-go/green-20220302/client"
      	util "github.com/alibabacloud-go/tea-utils/v2/service"
      	"github.com/alibabacloud-go/tea/tea"
      	"net/http"
      )
      
      func main() {
      	// 工程代碼泄露可能會導致AccessKey泄露,並威脅帳號下所有資源的安全性。以下程式碼範例僅供參考,建議使用更安全的STS方式。
          config := &openapi.Config{
              /**
               * 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
               * 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。
               * 常見擷取環境變數方式:
               * 擷取RAM使用者AccessKey ID:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
               * 擷取RAM使用者AccessKey Secret:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
               */
              AccessKeyId: tea.String("建議從環境變數中擷取RAM使用者AccessKey ID"),
              AccessKeySecret: tea.String("建議從環境變數中擷取RAM使用者AccessKey Secret"),
              // 設定HTTP代理。
              // HttpProxy: tea.String("http://xx.xx.xx.xx:xxxx"),
              // 設定HTTPS代理。
              // HttpsProxy: tea.String("https://username:password@xxx.xxx.xxx.xxx:9999"),
              RegionId: tea.String("ap-southeast-1"),
              Endpoint: tea.String("green-cip.ap-southeast-1.aliyuncs.com"),
              /**
      		 * 請設定逾時時間。服務端全鏈路處理逾時時間為10秒,請做相應設定。
      		 * 如果您設定的ReadTimeout小於服務端處理的時間,程式中會獲得一個ReadTimeout異常。
      		 */
              ConnectTimeout: tea.Int(3000),
              ReadTimeout:    tea.Int(6000),
          }
      	client, _err := green20220302.NewClient(config)
      	if _err != nil {
      		panic(_err)
      	}
      
      	// 建立RuntimeObject執行個體並設定運行參數。
      	runtime := &util.RuntimeOptions{}
      	runtime.ReadTimeout = tea.Int(10000)
      	runtime.ConnectTimeout = tea.Int(10000)
      
      	serviceParameters, _ := json.Marshal(
      		map[string]interface{}{
      			"taskId": "vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****",
      		},
      	)
      	request := green20220302.VideoModerationResultRequest{
      		Service:           tea.String("videoDetection_global"),
      		ServiceParameters: tea.String(string(serviceParameters)),
      	}
      
      	result, _err := client.VideoModerationResultWithOptions(&request, runtime)
      	if _err != nil {
      		panic(_err)
      	}
      
      	if *result.StatusCode != http.StatusOK {
      		fmt.Printf("response not success. status:%d\n", *result.StatusCode)
      		return
      	}
      	body := result.Body
      	fmt.Printf("response success. requestId:%s, code:%d, msg:%s\n", *body.RequestId, *body.Code, *body.Message)
      	if *body.Code == 280 {
      		fmt.Printf("processing video moderation. code:%d\n", *body.Code)
      		return
      	}
      	if *body.Code != http.StatusOK {
      		fmt.Printf("video moderation result not success. code:%d\n", *body.Code)
      		return
      	}
      
      	data := body.Data
          fmt.Printf("video moderation result:%s\n", data)
      	fmt.Printf("video moderation result audioResult:%s\n", data.AudioResult)
      	fmt.Printf("video moderation result frameResult:%s\n", data.FrameResult)
      }
    • 取消ApsaraVideo for Live流檢測任務程式碼範例

      package main
      
      import (
          "encoding/json"
          "fmt"
          openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
          green20220302 "github.com/alibabacloud-go/green-20220302/client"
          util "github.com/alibabacloud-go/tea-utils/v2/service"
          "github.com/alibabacloud-go/tea/tea"
          "net/http"
      )
      
      func main() {
      	// 工程代碼泄露可能會導致AccessKey泄露,並威脅帳號下所有資源的安全性。以下程式碼範例僅供參考,建議使用更安全的STS方式。
          config := &openapi.Config{
              /**
               * 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
               * 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。
               * 常見擷取環境變數方式:
               * 擷取RAM使用者AccessKey ID:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
               * 擷取RAM使用者AccessKey Secret:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
               */
              AccessKeyId: tea.String("建議從環境變數中擷取RAM使用者AccessKey ID"),
              AccessKeySecret: tea.String("建議從環境變數中擷取RAM使用者AccessKey Secret"),
              // 設定HTTP代理。
              // HttpProxy: tea.String("http://xx.xx.xx.xx:xxxx"),
              // 設定HTTPS代理。
              // HttpsProxy: tea.String("https://username:password@xxx.xxx.xxx.xxx:9999"),
              RegionId: tea.String("ap-southeast-1"),
              Endpoint: tea.String("green-cip.ap-southeast-1.aliyuncs.com"),
              /**
      		 * 請設定逾時時間。服務端全鏈路處理逾時時間為10秒,請做相應設定。
      		 * 如果您設定的ReadTimeout小於服務端處理的時間,程式中會獲得一個ReadTimeout異常。
      		 */
              ConnectTimeout: tea.Int(3000),
              ReadTimeout:    tea.Int(6000),
          }
      	client, _err := green20220302.NewClient(config)
      	if _err != nil {
      		panic(_err)
      	}
      
          // 建立RuntimeObject執行個體並設定運行參數。
          runtime := &util.RuntimeOptions{}
          runtime.ReadTimeout = tea.Int(10000)
          runtime.ConnectTimeout = tea.Int(10000)
      
          serviceParameters, _ := json.Marshal(
              map[string]interface{}{
                  "taskId": "vi_s_lyxBXzWhSsxuJjiNHcpQ0N-*****",
              },
          )
          request := green20220302.VideoModerationCancelRequest{
              Service:           tea.String("liveStreamDetection_global"),
              ServiceParameters: tea.String(string(serviceParameters)),
          }
      
          result, _err := client.VideoModerationCancelWithOptions(&request, runtime)
          if _err != nil {
              panic(_err)
          }
      
          if *result.StatusCode != http.StatusOK {
              fmt.Printf("response not success. status:%d\n", *result.StatusCode)
              return
          }
          body := result.Body
          fmt.Printf("response success. requestId:%s, code:%d, msg:%s\n", *body.RequestId, *body.Code, *body.Message)
          if *body.Code != http.StatusOK {
              fmt.Printf("video moderation cancel not success. code:%d\n", *body.Code)
          }
      }

原始代碼,請參見C# SDK源碼

支援以下三種類型的視頻檢測。

對公網可訪問視頻進行檢測
對本地視頻進行檢測
對OSS視頻進行檢測

使用情境

當需要審核的視頻可通過公網連結訪問時,視頻審核2.0版服務可通過視頻URL擷取檔案後進行審核。

  1. 執行如下命令引入相關依賴。

    dotnet add package AlibabaCloud.SDK.Green20220302 --version 2.19.1
  2. 接入C# SDK。

    • 提交視頻檢測任務程式碼範例

      using Newtonsoft.Json;
      using Tea;
      
      namespace AlibabaCloud.SDK.Sample
      {
          public class Sample
          {
      
              /**
               * 使用AK&SK初始化帳號Client
               * @param accessKeyId
               * @param accessKeySecret
               * @return Client
               * @throws Exception
               */
              public static AlibabaCloud.SDK.Green20220302.Client CreateClient(string accessKeyId, string accessKeySecret)
              {
                  AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config
                  {
                      AccessKeyId = accessKeyId,
                      AccessKeySecret = accessKeySecret,
                  };
                  // 訪問的網域名稱。
                  config.Endpoint = "green-cip.ap-southeast-1.aliyuncs.com";
                  return new AlibabaCloud.SDK.Green20220302.Client(config);
              }
      
              public static void Main(string[] args)
              {
                  // 工程代碼泄露可能會導致AccessKey泄露,並威脅帳號下所有資源的安全性。以下程式碼範例僅供參考,建議使用更安全的STS方式。
                  /**
                  * 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
                  * 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。
                  * 常見擷取環境變數方式:
                  * 擷取RAM使用者AccessKey ID:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID")
                  * 擷取RAM使用者AccessKey Secret:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
                  */
                  string accessKeyId = "建議從環境變數中擷取RAM使用者AccessKey ID",
                  string accessKeySecret = '建議從環境變數中擷取RAM使用者AccessKey Secret',
                  // 注意:此處執行個體化的client儘可能重複使用,提升檢測效能。避免重複建立串連。
                  AlibabaCloud.SDK.Green20220302.Client client = CreateClient(accessKeyId, accessKeySecret);
                  // 構建檢測請求。
                  AlibabaCloud.SDK.Green20220302.Models.VideoModerationRequest videoModerationRequest = new AlibabaCloud.SDK.Green20220302.Models.VideoModerationRequest();
                  // 檢測service。
                  videoModerationRequest.Service="videoDetection_global";
                  Dictionary<String,Object> task=new Dictionary<string, object>();
                  // 待檢測視頻連結,公網可訪問的URL。
                  task.Add("url","https://xxxx/xxx/sample.mp4");
                  videoModerationRequest.ServiceParameters=JsonConvert.SerializeObject(task);
                  // 建立RuntimeObject執行個體並設定運行參數。
                  AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
                  runtime.ReadTimeout = 10000;
                  runtime.ConnectTimeout = 10000;
                  try
                  {
                      // 提交檢測任務。
                    AlibabaCloud.SDK.Green20220302.Models.VideoModerationResponse response= client.VideoModerationWithOptions(videoModerationRequest, runtime);
                  if(response is not null){
                      Console.WriteLine("response statusCode : "+response.StatusCode);
                      if (response.Body is not null){
                      Console.WriteLine("requestId : " + response.Body.RequestId);
                      Console.WriteLine("code : " + response.Body.Code);
                      Console.WriteLine("message : " + response.Body.Message);
                          if(response.Body.Data is not null){
                              Console.WriteLine("taskId : " + response.Body.Data.TaskId);
                          }
                      }
                  }
                  }
                  catch (TeaException error)
                  {
                      // 如有需要,請列印error。
                      AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
                      Console.WriteLine("error : " + error);
                  }
                  catch (Exception _error)
                  {
                      TeaException error = new TeaException(new Dictionary<string, object>
                      {
                          { "message", _error.Message }
                      });
                      // 如有需要,請列印error。
                      AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
                      Console.WriteLine("error : " + error);
                  }
              }
          }
      }
    • 擷取視頻檢測任務結果程式碼範例

      using Newtonsoft.Json;
      using Tea;
      
      namespace AlibabaCloud.SDK.Sample
      {
          public class Sample
          {
      
              /**
               * 使用AK&SK初始化帳號Client
               * @param accessKeyId
               * @param accessKeySecret
               * @return Client
               * @throws Exception
               */
              public static AlibabaCloud.SDK.Green20220302.Client CreateClient(string accessKeyId, string accessKeySecret)
              {
                  AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config
                  {
                      AccessKeyId = accessKeyId,
                      AccessKeySecret = accessKeySecret,
                  };
                  // 訪問的網域名稱。
                  config.Endpoint = "green-cip.ap-southeast-1.aliyuncs.com";
                  return new AlibabaCloud.SDK.Green20220302.Client(config);
              }
      
              public static void Main(string[] args)
              {
                  // 工程代碼泄露可能會導致AccessKey泄露,並威脅帳號下所有資源的安全性。以下程式碼範例僅供參考,建議使用更安全的STS方式。
                  /**
                  * 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
                  * 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。
                  * 常見擷取環境變數方式:
                  * 擷取RAM使用者AccessKey ID:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID")
                  * 擷取RAM使用者AccessKey Secret:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
                  */
                  string accessKeyId = "建議從環境變數中擷取RAM使用者AccessKey ID",
                  string accessKeySecret = '建議從環境變數中擷取RAM使用者AccessKey Secret',
                  // 注意:此處執行個體化的client儘可能重複使用,提升檢測效能。避免重複建立串連。
                  AlibabaCloud.SDK.Green20220302.Client client = CreateClient(accessKeyId, accessKeySecret);
                  // 構建檢測請求。
                  AlibabaCloud.SDK.Green20220302.Models.VideoModerationResultRequest videoModerationResultRequest = new AlibabaCloud.SDK.Green20220302.Models.VideoModerationResultRequest();
                  // 檢測service。
                  videoModerationResultRequest.Service="videoDetection_global";
                  Dictionary<String,Object> task=new Dictionary<string, object>();
                  // 待查詢結果的任務ID。
                  task.Add("taskId","<待查詢結果的任務ID>");
                  videoModerationResultRequest.ServiceParameters=JsonConvert.SerializeObject(task);
                  // 建立RuntimeObject執行個體並設定運行參數。
                  AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
                  runtime.ReadTimeout = 10000;
                  runtime.ConnectTimeout = 10000;
                  try
                  {
                      // 提交檢測任務。
                    AlibabaCloud.SDK.Green20220302.Models.VideoModerationResultResponse response= client.VideoModerationResultWithOptions(videoModerationResultRequest, runtime);
                  if(response is not null){
                      Console.WriteLine("response statusCode : "+response.StatusCode);
                      if (response.Body is not null){
                      Console.WriteLine("requestId : " + response.Body.RequestId);
                      Console.WriteLine("code : " + response.Body.Code);
                      Console.WriteLine("message : " + response.Body.Message);
                          if(response.Body.Data is not null){
                              Console.WriteLine("taskId : " + response.Body.Data.TaskId);
                              Console.WriteLine("liveId : " + response.Body.Data.LiveId);
                              Console.WriteLine("riskLevel : " + response.Body.Data.RiskLevel);
                              Console.WriteLine("url : " + response.Body.Data.Url);
                              Console.WriteLine("sliceDetails : " + JsonConvert.SerializeObject(response.Body.Data.SliceDetails));
                          }
                      }
                  }
                  }
                  catch (TeaException error)
                  {
                      // 如有需要,請列印error。
                      AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
                      Console.WriteLine("error : " + error);
                  }
                  catch (Exception _error)
                  {
                      TeaException error = new TeaException(new Dictionary<string, object>
                      {
                          { "message", _error.Message }
                      });
                      // 如有需要,請列印error。
                      AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
                      Console.WriteLine("error : " + error);
                  }
              }
          }
      }

使用情境

當您需要審核的視頻在本地機器且無公網訪問連結,您可以將視頻上傳到Alibaba Content Security Service提供的Object Storage Service Bucket中,視頻審核2.0版服務可直接存取Object Storage Service,擷取到視頻內容後進行審核。

  1. 執行如下命令引入相關依賴。

    dotnet add package AlibabaCloud.SDK.Green20220302 --version 2.19.1

    安裝OSS SDK:

    NuGet方式安裝 
    1.如果您的Visual Studio沒有安裝NuGet,請先安裝NuGet。
    2.在Visual Studio中建立或者開啟已有的專案,選擇工具 > NuGet封裝管理員 > 管理解決方案的NuGet程式包。
    3.搜尋aliyun.oss.sdk,在結果中找到Aliyun.OSS.SDK(適用於.NET Framework)或Aliyun.OSS.SDK.NetCore
  2. 接入C# SDK。

    • 提交視頻檢測任務程式碼範例

      // This file is auto-generated, don't edit it. Thanks.
      
      using System;
      using Newtonsoft.Json;
      using Aliyun.OSS;
      
      namespace AlibabaCloud.SDK.Green20220302
      {
          public class VideoModerationAutoRoute
          {
              //檔案上傳token
              public static Dictionary<String, Models.DescribeUploadTokenResponse> tokenDic =
                  new Dictionary<String, Models.DescribeUploadTokenResponse>();
      
              //檔案上傳用戶端
              public static OssClient ossClient = null;
      
              //服務是否部署在VPC上
              public static Boolean isVPC = false;
      
              public static void Main(string[] args)
              {
                  /**
                  * 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
                  * 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。
                  * 常見擷取環境變數方式:
                  * 擷取RAM使用者AccessKey ID:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID")
                  * 擷取RAM使用者AccessKey Secret:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
                  */
                  String accessKeyId = "建議從環境變數中擷取RAM使用者AccessKey ID";
                  String accessKeySecret = "建議從環境變數中擷取RAM使用者AccessKey Secret";
                  // 接入地區和地址請根據實際情況修改
                  String endpoint = "green-cip.ap-southeast-1.aliyuncs.com";
                  Models.VideoModerationResponse response = invoke(
                      accessKeyId,
                      accessKeySecret,
                      endpoint
                  );
      
                  Console.WriteLine(response.Body.RequestId);
                  Console.WriteLine(JsonConvert.SerializeObject(response.Body));
              }
      
              //建立請求用戶端
              public static Client createClient(
                  String accessKeyId,
                  String accessKeySecret,
                  String endpoint
              )
              {
                  AlibabaCloud.OpenApiClient.Models.Config config =
                      new AlibabaCloud.OpenApiClient.Models.Config
                      {
                          AccessKeyId = accessKeyId,
                          AccessKeySecret = accessKeySecret,
                          //設定HTTP代理。
                          //HttpProxy = "http://10.10.xx.xx:xxxx",
                          //設定HTTPS代理。
                          //HttpsProxy = "https://username:password@xxx.xxx.xxx.xxx:9999",
                          //訪問的網域名稱。
                          Endpoint = endpoint,
                      };
                  return new Client(config);
              }
      
              //建立檔案上傳用戶端
              private static OssClient getOssClient(
                  Models.DescribeUploadTokenResponse tokenResponse,
                  Boolean isVPC
              )
              {
                  var tokenData = tokenResponse.Body.Data;
                  if (isVPC)
                  {
                      return new OssClient(
                          tokenData.OssInternalEndPoint,
                          tokenData.AccessKeyId,
                          tokenData.AccessKeySecret,
                          tokenData.SecurityToken
                      );
                  }
                  else
                  {
                      return new OssClient(
                          tokenData.OssInternetEndPoint,
                          tokenData.AccessKeyId,
                          tokenData.AccessKeySecret,
                          tokenData.SecurityToken
                      );
                  }
              }
      
              //上傳檔案
              public static String uploadFile(
                  String filePath,
                  Models.DescribeUploadTokenResponse tokenResponse
              )
              {
                  // 構造OssClient執行個體。
                  ossClient = getOssClient(tokenResponse, isVPC);
                  var tokenData = tokenResponse.Body.Data;
      
                  String objectName =
                      tokenData.FileNamePrefix
                      + Guid.NewGuid().ToString()
                      + "."
                      + filePath.Split(".").GetValue(1);
                  //上傳檔案
                  ossClient.PutObject(tokenData.BucketName, objectName, filePath);
                  return objectName;
              }
      
              //提交檢測請求
              public static Models.VideoModerationResponse invoke(
                  String accessKeyId,
                  String accessKeySecret,
                  String endpoint
              )
              {
                  //注意,此處執行個體化的client請儘可能重複使用,避免重複建立串連,提升檢測效能。
                  Client client = createClient(accessKeyId, accessKeySecret, endpoint);
      
                  //運行時參數設定,僅對使用了該運行時參數執行個體的請求有效
                  AlibabaCloud.TeaUtil.Models.RuntimeOptions runtimeOptions =
                      new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
      
                  //本地檔案的完整路徑,例如D:\localPath\exampleFile.mp4。
                  String filePath = "D:\localPath\exampleFile.mp4";
                  try
                  {
                      //擷取檔案上傳臨時token
                      if (
                          !tokenDic.ContainsKey(endpoint)
                          || tokenDic[endpoint].Body.Data.Expiration
                              <= DateTimeOffset.Now.ToUnixTimeSeconds()
                      )
                      {
                          var tokenResponse = client.DescribeUploadToken();
                          tokenDic[endpoint] = tokenResponse;
                      }
                      //上傳檔案
                      String objectName = uploadFile(filePath, tokenDic[endpoint]);
                      //構建檢測請求
                      Models.VideoModerationRequest videoModerationRequest =
                          new Models.VideoModerationRequest();
                      //service樣本:videoDetection_global
                        videoModerationRequest.Service = "videoDetection_global";
                      Dictionary<string, object> task = new Dictionary<string, object>();
                      //待檢測檔案資訊
                      task.Add("ossBucketName", tokenDic[endpoint].Body.Data.BucketName);
                      task.Add("ossObjectName", objectName);
                      //待檢測資料的ID
                      task.Add("dataId", Guid.NewGuid().ToString());
                      videoModerationRequest.ServiceParameters = JsonConvert.SerializeObject(task);
                      //調用API擷取檢測結果
                      Models.VideoModerationResponse response = client.VideoModerationWithOptions(
                          videoModerationRequest,
                          runtimeOptions
                      );
                      return response;
                  }
                  catch (Exception _err)
                  {
                      Console.WriteLine(_err);
                      return null;
                  }
              }
          }
      }
    • 擷取視頻檢測任務結果程式碼範例

      using Newtonsoft.Json;
      using Tea;
      
      namespace AlibabaCloud.SDK.Sample
      {
          public class Sample
          {
      
              /**
               * 使用AK&SK初始化帳號Client
               * @param accessKeyId
               * @param accessKeySecret
               * @return Client
               * @throws Exception
               */
              public static AlibabaCloud.SDK.Green20220302.Client CreateClient(string accessKeyId, string accessKeySecret)
              {
                  AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config
                  {
                      AccessKeyId = accessKeyId,
                      AccessKeySecret = accessKeySecret,
                  };
                  // 訪問的網域名稱。
                  config.Endpoint = "green-cip.ap-southeast-1.aliyuncs.com";
                  return new AlibabaCloud.SDK.Green20220302.Client(config);
              }
      
              public static void Main(string[] args)
              {
                  // 工程代碼泄露可能會導致AccessKey泄露,並威脅帳號下所有資源的安全性。以下程式碼範例僅供參考,建議使用更安全的STS方式。
                  /**
                  * 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
                  * 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。
                  * 常見擷取環境變數方式:
                  * 擷取RAM使用者AccessKey ID:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID")
                  * 擷取RAM使用者AccessKey Secret:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
                  */
                  string accessKeyId = "建議從環境變數中擷取RAM使用者AccessKey ID",
                  string accessKeySecret = '建議從環境變數中擷取RAM使用者AccessKey Secret',
                  // 注意:此處執行個體化的client儘可能重複使用,提升檢測效能。避免重複建立串連。
                  AlibabaCloud.SDK.Green20220302.Client client = CreateClient(accessKeyId, accessKeySecret);
                  // 構建檢測請求。
                  AlibabaCloud.SDK.Green20220302.Models.VideoModerationResultRequest videoModerationResultRequest = new AlibabaCloud.SDK.Green20220302.Models.VideoModerationResultRequest();
                  // 檢測service。
                  videoModerationResultRequest.Service="videoDetection_global";
                  Dictionary<String,Object> task=new Dictionary<string, object>();
                  // 待查詢結果的任務ID。
                  task.Add("taskId","<待查詢結果的任務ID>");
                  videoModerationResultRequest.ServiceParameters=JsonConvert.SerializeObject(task);
                  // 建立RuntimeObject執行個體並設定運行參數。
                  AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
                  runtime.ReadTimeout = 10000;
                  runtime.ConnectTimeout = 10000;
                  try
                  {
                      // 提交檢測任務。
                    AlibabaCloud.SDK.Green20220302.Models.VideoModerationResultResponse response= client.VideoModerationResultWithOptions(videoModerationResultRequest, runtime);
                  if(response is not null){
                      Console.WriteLine("response statusCode : "+response.StatusCode);
                      if (response.Body is not null){
                      Console.WriteLine("requestId : " + response.Body.RequestId);
                      Console.WriteLine("code : " + response.Body.Code);
                      Console.WriteLine("message : " + response.Body.Message);
                          if(response.Body.Data is not null){
                              Console.WriteLine("taskId : " + response.Body.Data.TaskId);
                              Console.WriteLine("riskLevel : " + response.Body.Data.RiskLevel);
                              Console.WriteLine("liveId : " + response.Body.Data.LiveId);
                              Console.WriteLine("url : " + response.Body.Data.Url);
                              Console.WriteLine("sliceDetails : " + JsonConvert.SerializeObject(response.Body.Data.SliceDetails));
                          }
                      }
                  }
                  }
                  catch (TeaException error)
                  {
                      // 如有需要,請列印error。
                      AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
                      Console.WriteLine("error : " + error);
                  }
                  catch (Exception _error)
                  {
                      TeaException error = new TeaException(new Dictionary<string, object>
                      {
                          { "message", _error.Message }
                      });
                      // 如有需要,請列印error。
                      AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
                      Console.WriteLine("error : " + error);
                  }
              }
          }
      }

使用情境

如果您需要審核的視頻檔案已經儲存在阿里雲Object Storage Service中,您可授權建立服務角色,允許Alibaba Content Security Service服務訪問Object Storage Service。視頻審核2.0版服務會通過服務角色擷取到Object Storage Service的檔案後進行審核。訪問雲資源訪問授權頁面建立服務角色。

  1. 執行如下命令引入相關依賴。

    dotnet add package AlibabaCloud.SDK.Green20220302 --version 2.19.1
  2. 接入C# SDK。

    • 提交視頻檢測任務程式碼範例

      using Newtonsoft.Json;
      using Tea;
      
      namespace AlibabaCloud.SDK.Sample
      {
          public class Sample
          {
      
              /**
               * 使用AK&SK初始化帳號Client
               * @param accessKeyId
               * @param accessKeySecret
               * @return Client
               * @throws Exception
               */
              public static AlibabaCloud.SDK.Green20220302.Client CreateClient(string accessKeyId, string accessKeySecret)
              {
                  AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config
                  {
                      AccessKeyId = accessKeyId,
                      AccessKeySecret = accessKeySecret,
                  };
                  // 訪問的網域名稱。
                  config.Endpoint = "green-cip.ap-southeast-1.aliyuncs.com";
                  return new AlibabaCloud.SDK.Green20220302.Client(config);
              }
      
              public static void Main(string[] args)
              {
                  // 工程代碼泄露可能會導致AccessKey泄露,並威脅帳號下所有資源的安全性。以下程式碼範例僅供參考,建議使用更安全的STS方式。
                  /**
                  * 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
                  * 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。
                  * 常見擷取環境變數方式:
                  * 擷取RAM使用者AccessKey ID:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID")
                  * 擷取RAM使用者AccessKey Secret:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
                  */
                  string accessKeyId = "建議從環境變數中擷取RAM使用者AccessKey ID",
                  string accessKeySecret = '建議從環境變數中擷取RAM使用者AccessKey Secret',
                  // 注意:此處執行個體化的client儘可能重複使用,提升檢測效能。避免重複建立串連。
                  AlibabaCloud.SDK.Green20220302.Client client = CreateClient(accessKeyId, accessKeySecret);
                  // 構建檢測請求。
                  AlibabaCloud.SDK.Green20220302.Models.VideoModerationRequest videoModerationRequest = new AlibabaCloud.SDK.Green20220302.Models.VideoModerationRequest();
                  // 檢測service。
                  videoModerationRequest.Service="videoDetection_global";
                  Dictionary<String,Object> task=new Dictionary<string, object>();
                  // OSS檔案傳參樣本。
                  task.Add("ossBucketName","bucket_01");
                  task.Add("ossObjectName","test/sample.wav");
                  task.Add("ossRegionId","ap-southeast-1");
                  videoModerationRequest.ServiceParameters=JsonConvert.SerializeObject(task);
                  // 建立RuntimeObject執行個體並設定運行參數。
                  AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
                  runtime.ReadTimeout = 10000;
                  runtime.ConnectTimeout = 10000;
                  try
                  {
                      // 提交檢測任務。
                    AlibabaCloud.SDK.Green20220302.Models.VideoModerationResponse response= client.VideoModerationWithOptions(videoModerationRequest, runtime);
                  if(response is not null){
                      Console.WriteLine("response statusCode : "+response.StatusCode);
                      if (response.Body is not null){
                      Console.WriteLine("requestId : " + response.Body.RequestId);
                      Console.WriteLine("code : " + response.Body.Code);
                      Console.WriteLine("message : " + response.Body.Message);
                          if(response.Body.Data is not null){
                              Console.WriteLine("taskId : " + response.Body.Data.TaskId);
                          }
                      }
                  }
                  }
                  catch (TeaException error)
                  {
                      // 如有需要,請列印error。
                      AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
                      Console.WriteLine("error : " + error);
                  }
                  catch (Exception _error)
                  {
                      TeaException error = new TeaException(new Dictionary<string, object>
                      {
                          { "message", _error.Message }
                      });
                      // 如有需要,請列印error。
                      AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
                      Console.WriteLine("error : " + error);
                  }
              }
          }
      }
    • 擷取視頻檢測任務結果程式碼範例

      using Newtonsoft.Json;
      using Tea;
      
      namespace AlibabaCloud.SDK.Sample
      {
          public class Sample
          {
      
              /**
               * 使用AK&SK初始化帳號Client
               * @param accessKeyId
               * @param accessKeySecret
               * @return Client
               * @throws Exception
               */
              public static AlibabaCloud.SDK.Green20220302.Client CreateClient(string accessKeyId, string accessKeySecret)
              {
                  AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config
                  {
                      AccessKeyId = accessKeyId,
                      AccessKeySecret = accessKeySecret,
                  };
                  // 訪問的網域名稱。
                  config.Endpoint = "green-cip.ap-southeast-1.aliyuncs.com";
                  return new AlibabaCloud.SDK.Green20220302.Client(config);
              }
      
              public static void Main(string[] args)
              {
                  // 工程代碼泄露可能會導致AccessKey泄露,並威脅帳號下所有資源的安全性。以下程式碼範例僅供參考,建議使用更安全的STS方式。
                  /**
                  * 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
                  * 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。
                  * 常見擷取環境變數方式:
                  * 擷取RAM使用者AccessKey ID:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID")
                  * 擷取RAM使用者AccessKey Secret:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
                  */
                  string accessKeyId = "建議從環境變數中擷取RAM使用者AccessKey ID",
                  string accessKeySecret = '建議從環境變數中擷取RAM使用者AccessKey Secret',
                  // 注意:此處執行個體化的client儘可能重複使用,提升檢測效能。避免重複建立串連。
                  AlibabaCloud.SDK.Green20220302.Client client = CreateClient(accessKeyId, accessKeySecret);
                  // 構建檢測請求。
                  AlibabaCloud.SDK.Green20220302.Models.VideoModerationResultRequest videoModerationResultRequest = new AlibabaCloud.SDK.Green20220302.Models.VideoModerationResultRequest();
                  // 檢測service。
                  videoModerationResultRequest.Service="videoDetection_global";
                  Dictionary<String,Object> task=new Dictionary<string, object>();
                  // 待查詢結果的任務ID。
                  task.Add("taskId","<待查詢結果的任務ID>");
                  videoModerationResultRequest.ServiceParameters=JsonConvert.SerializeObject(task);
                  // 建立RuntimeObject執行個體並設定運行參數。
                  AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
                  runtime.ReadTimeout = 10000;
                  runtime.ConnectTimeout = 10000;
                  try
                  {
                      // 提交檢測任務。
                    AlibabaCloud.SDK.Green20220302.Models.VideoModerationResultResponse response= client.VideoModerationResultWithOptions(videoModerationResultRequest, runtime);
                  if(response is not null){
                      Console.WriteLine("response statusCode : "+response.StatusCode);
                      if (response.Body is not null){
                      Console.WriteLine("requestId : " + response.Body.RequestId);
                      Console.WriteLine("code : " + response.Body.Code);
                      Console.WriteLine("message : " + response.Body.Message);
                          if(response.Body.Data is not null){
                              Console.WriteLine("taskId : " + response.Body.Data.TaskId);
                              Console.WriteLine("liveId : " + response.Body.Data.LiveId);
                              Console.WriteLine("riskLevel : " + response.Body.Data.RiskLevel);
                              Console.WriteLine("url : " + response.Body.Data.Url);
                              Console.WriteLine("sliceDetails : " + JsonConvert.SerializeObject(response.Body.Data.SliceDetails));
                          }
                      }
                  }
                  }
                  catch (TeaException error)
                  {
                      // 如有需要,請列印error。
                      AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
                      Console.WriteLine("error : " + error);
                  }
                  catch (Exception _error)
                  {
                      TeaException error = new TeaException(new Dictionary<string, object>
                      {
                          { "message", _error.Message }
                      });
                      // 如有需要,請列印error。
                      AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
                      Console.WriteLine("error : " + error);
                  }
              }
          }
      }

原始代碼,請參見Node.js SDK源碼

支援以下三種類型的視頻檢測。

對公網可訪問視頻進行檢測
對本地視頻進行檢測
對OSS視頻進行檢測

使用情境

當需要審核的視頻可通過公網連結訪問時,視頻審核2.0版服務可通過視頻URL擷取檔案後進行審核。

  1. 執行如下命令引入相關依賴。

    npm install @alicloud/green20220302@2.19.1

  2. 接入Node.js SDK。

    • 提交視頻檢測任務程式碼範例

      const Green20220302 = require('@alicloud/green20220302');
      const OpenApi = require('@alicloud/openapi-client');
      const Util = require('@alicloud/tea-util');
      // 注意:此處執行個體化的client儘可能重複使用,提升檢測效能。避免重複建立串連。
      // 工程代碼泄露可能會導致 AccessKey 泄露,並威脅帳號下所有資源的安全性。以下程式碼範例僅供參考。
      class Client {
          static createClient() {
              const config = new OpenApi.Config({
                  // 必填,請確保代碼運行環境設定了環境變數 ALIBABA_CLOUD_ACCESS_KEY_ID。
                  accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
                  // 必填,請確保代碼運行環境設定了環境變數 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
                  accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
                  endpoint: `green-cip.ap-southeast-1.aliyuncs.com`,
              });
              return new Green20220302.default(config);
          }
      
          static async main() {
              const client = Client.createClient();
              // 構造請求對象
              const videoModerationRequest = new Green20220302.VideoModerationRequest({
                  // 視頻檢測service。
                  "service": "videoDetection_global",
                  // 待檢測視頻連結。
                  "serviceParameters": JSON.stringify({"url":"http://aliyundoc.com/test.flv"})
              });
              // 建立運行時設定物件
              const runtime = new Util.RuntimeOptions();
              try {
                  // 發起請求並擷取響應
                  const response = await client.videoModerationWithOptions(videoModerationRequest, runtime);
                  console.log(JSON.stringify(response.body));
              } catch (error) {
                  // 此處僅做列印展示,請謹慎對待異常處理,在工程專案中切勿直接忽略異常。
                  // 錯誤 message
                  console.log('Error occurred:', error.message);
              }
          }
      }
      
      Client.main();
    • 擷取視頻檢測任務結果程式碼範例

      const Green20220302 = require('@alicloud/green20220302');
      const OpenApi = require('@alicloud/openapi-client');
      const Util = require('@alicloud/tea-util');
      // 注意:此處執行個體化的client儘可能重複使用,提升檢測效能。避免重複建立串連。
      // 工程代碼泄露可能會導致 AccessKey 泄露,並威脅帳號下所有資源的安全性。以下程式碼範例僅供參考。
      class Client {
          static createClient() {
              const config = new OpenApi.Config({
                  // 必填,請確保代碼運行環境設定了環境變數 ALIBABA_CLOUD_ACCESS_KEY_ID。
                  accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
                  // 必填,請確保代碼運行環境設定了環境變數 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
                  accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
                  endpoint: `green-cip.ap-southeast-1.aliyuncs.com`,
              });
              return new Green20220302.default(config);
          }
      
          static async main() {
              const client = Client.createClient();
              // 構造請求對象
              const videoModerationResultRequest = new Green20220302.VideoModerationResultRequest({
                  // 視頻檢測service。
                  "service": "videoDetection_global",
                  "serviceParameters": JSON.stringify({"taskId":"<待擷取視頻檢測結果的任務ID>"})
              });
              // 建立運行時設定物件
              const runtime = new Util.RuntimeOptions();
              try {
                  // 發起請求並擷取響應
                  const response = await client.videoModerationResultWithOptions(videoModerationResultRequest, runtime);
                  console.log(JSON.stringify(response.body));
              } catch (error) {
                  // 此處僅做列印展示,請謹慎對待異常處理,在工程專案中切勿直接忽略異常。
                  // 錯誤 message
                  console.log('Error occurred:', error.message);
              }
          }
      }
      
      Client.main();

使用情境

當您需要審核的視頻在本地機器且無公網訪問連結,您可以將視頻上傳到Alibaba Content Security Service提供的Object Storage Service Bucket中,視頻審核2.0版服務可直接存取Object Storage Service,擷取到視頻內容後進行審核。

  1. 執行如下命令引入相關依賴。

    npm install @alicloud/green20220302@2.19.1

  2. 接入Node.js SDK。

    • 提交視頻檢測任務程式碼範例

      const RPCClient = require("@alicloud/pop-core");
      const OSS = require('ali-oss');
      const { v4: uuidv4 } = require('uuid');
      const path = require("path");
      
      //服務是否部署在VPC上
      var isVPC = false;
      //檔案上傳token
      var tokenDic = new Array();
      //檔案上傳用戶端
      var ossClient;
      
      //建立檔案上傳用戶端
      function createClient(accessKeyId, accessKeySecret, endpoint) {
          return new RPCClient({
              accessKeyId: accessKeyId,
              accessKeySecret: accessKeySecret,
              endpoint: endpoint,
              apiVersion: '2022-03-02',
              //設定http代理
              //httpProxy: "http://xx.xx.xx.xx:xxxx",
              //設定https代理
              //httpsProxy: "https://username:password@xxx.xxx.xxx.xxx:9999",
          });
      }
      
      //建立檔案上傳用戶端
      function getOssClient(tokenData, isVPC) {
          if (isVPC) {
              ossClient = new OSS({
                  accessKeyId: tokenData['AccessKeyId'],
                  accessKeySecret: tokenData['AccessKeySecret'],
                  stsToken: tokenData['SecurityToken'],
                  endpoint: tokenData['OssInternalEndPoint'],
                  bucket: tokenData['BucketName'],
              });
          } else {
              ossClient = new OSS({
                  accessKeyId: tokenData['AccessKeyId'],
                  accessKeySecret: tokenData['AccessKeySecret'],
                  stsToken: tokenData['SecurityToken'],
                  endpoint: tokenData['OssInternetEndPoint'],
                  bucket: tokenData['BucketName'],
              });
          }
      }
      
      //提交檢測任務
      async function invoke(accessKeyId, accessKeySecret, endpoint) {
          //注意,此處執行個體化的client請儘可能重複使用,避免重複建立串連,提升檢測效能。
          var client = createClient(accessKeyId, accessKeySecret, endpoint);
          var requestOption = {
              method: 'POST',
              formatParams: false,
          };
          //本地檔案的完整路徑,例如D:\\localPath\\exampleFile.mp4。
          var filePath = 'D:\\localPath\\exampleFile.mp4';
      
          //擷取上傳檔案token
          if (tokenDic[endpoint] == null || tokenDic[endpoint]['Expiration'] <= Date.parse(new Date() / 1000)) {
              var tokenResponse = await client.request('DescribeUploadToken', '', requestOption)
              tokenDic[endpoint] = tokenResponse.Data;
          }
      
          //擷取上傳檔案用戶端
          getOssClient(tokenDic[endpoint], isVPC)
          var split = filePath.split(".");
          var objectName;
          if (split.length > 1) {
              objectName = tokenDic[endpoint].FileNamePrefix + uuidv4() + "." + split[split.length - 1];
          } else {
              objectName = tokenDic[endpoint].FileNamePrefix + uuidv4();
          }
          //上傳檔案
          const result = await ossClient.put(objectName, path.normalize(filePath));
      
          //通過以下代碼建立檢測API請求並設定參數。
          var params = {
              //視頻檢測service樣本:videoDetection_global
              "Service": "videoDetection_global",
              //本地視頻上傳資訊
              "ServiceParameters": JSON.stringify({
                  "ossBucketName": tokenDic[endpoint].BucketName,
                  "ossObjectName": objectName
              })
          }
          //調用介面擷取檢測結果
          return await client.request('VideoModeration', params, requestOption);
      }
      
      
      
      function main() {
          /**
          * 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
          * 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。
          * 常見擷取環境變數方式:
          * 擷取RAM使用者AccessKey ID:process.env['ALIBABA_CLOUD_ACCESS_KEY_ID']
          * 擷取RAM使用者AccessKey Secret:process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
          */
          const accessKeyId: '建議從環境變數中擷取RAM使用者AccessKey ID'
          const accessKeySecret: '建議從環境變數中擷取RAM使用者AccessKey Secret'
          //接入地區和地址請根據實際情況修改
          var endpoint = "https://green-cip.ap-southeast-1.aliyuncs.com"
      
          try {
              var response;
              //調用介面擷取檢測結果
              invoke(accessKeyId, accessKeySecret, endpoint).then(function (response) {
                  console.log(JSON.stringify(response))
              })
          } catch (err) {
              console.log(err);
          }
      }
      
      main();
    • 擷取視頻檢測任務結果程式碼範例

      const Green20220302 = require('@alicloud/green20220302');
      const OpenApi = require('@alicloud/openapi-client');
      const Util = require('@alicloud/tea-util');
      // 注意:此處執行個體化的client儘可能重複使用,提升檢測效能。避免重複建立串連。
      // 工程代碼泄露可能會導致 AccessKey 泄露,並威脅帳號下所有資源的安全性。以下程式碼範例僅供參考。
      class Client {
          static createClient() {
              const config = new OpenApi.Config({
                  // 必填,請確保代碼運行環境設定了環境變數 ALIBABA_CLOUD_ACCESS_KEY_ID。
                  accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
                  // 必填,請確保代碼運行環境設定了環境變數 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
                  accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
                  endpoint: `green-cip.ap-southeast-1.aliyuncs.com`,
              });
              return new Green20220302.default(config);
          }
      
          static async main() {
              const client = Client.createClient();
              // 構造請求對象
              const videoModerationResultRequest = new Green20220302.VideoModerationResultRequest({
                  // 視頻檢測service。
                  "service": "videoDetection_global",
                  "serviceParameters": JSON.stringify({"taskId":"<待擷取視頻檢測結果的任務ID>"})
              });
              // 建立運行時設定物件
              const runtime = new Util.RuntimeOptions();
              try {
                  // 發起請求並擷取響應
                  const response = await client.videoModerationResultWithOptions(videoModerationResultRequest, runtime);
                  console.log(JSON.stringify(response.body));
              } catch (error) {
                  // 此處僅做列印展示,請謹慎對待異常處理,在工程專案中切勿直接忽略異常。
                  // 錯誤 message
                  console.log('Error occurred:', error.message);
              }
          }
      }
      
      Client.main();

使用情境

如果您需要審核的視頻檔案已經儲存在阿里雲Object Storage Service中,您可授權建立服務角色,允許Alibaba Content Security Service服務訪問Object Storage Service。視頻審核2.0版服務會通過服務角色擷取到Object Storage Service的檔案後進行審核。訪問雲資源訪問授權頁面建立服務角色。

  1. 執行如下命令引入相關依賴。

    npm install @alicloud/green20220302@2.19.1

  2. 接入Node.js SDK。

    • 提交視頻檢測任務程式碼範例

      const Green20220302 = require('@alicloud/green20220302');
      const OpenApi = require('@alicloud/openapi-client');
      const Util = require('@alicloud/tea-util');
      // 注意:此處執行個體化的client儘可能重複使用,提升檢測效能。避免重複建立串連。
      // 工程代碼泄露可能會導致 AccessKey 泄露,並威脅帳號下所有資源的安全性。以下程式碼範例僅供參考。
      class Client {
          static createClient() {
              const config = new OpenApi.Config({
                  // 必填,請確保代碼運行環境設定了環境變數 ALIBABA_CLOUD_ACCESS_KEY_ID。
                  accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
                  // 必填,請確保代碼運行環境設定了環境變數 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
                  accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
                  endpoint: `green-cip.ap-southeast-1.aliyuncs.com`,
              });
              return new Green20220302.default(config);
          }
      
          static async main() {
              const client = Client.createClient();
              // 構造請求對象
              const videoModerationRequest = new Green20220302.VideoModerationRequest({
                  // 視頻檢測service。
                  "service": "videoDetection_global",
                  // 待檢測視頻連結。
                  "serviceParameters": JSON.stringify({
                  // 待檢測檔案所在bucket的地區。 樣本:cn-shanghai
                  "ossRegionId": "cn-shanghai",
                  // 待檢測檔案所在bucket名稱。樣本:bucket001
                  "ossBucketName": "bucket001",
                  // 待檢測檔案。 樣本:video/001.mp4
                  "ossObjectName": "video/001.mp4",})
              });
              // 建立運行時設定物件
              const runtime = new Util.RuntimeOptions();
              try {
                  // 發起請求並擷取響應
                  const response = await client.videoModerationWithOptions(videoModerationRequest, runtime);
                  console.log(JSON.stringify(response.body));
              } catch (error) {
                  // 此處僅做列印展示,請謹慎對待異常處理,在工程專案中切勿直接忽略異常。
                  // 錯誤 message
                  console.log('Error occurred:', error.message);
              }
          }
      }
      
      Client.main();
    • 擷取視頻檢測任務結果程式碼範例

      const Green20220302 = require('@alicloud/green20220302');
      const OpenApi = require('@alicloud/openapi-client');
      const Util = require('@alicloud/tea-util');
      // 注意:此處執行個體化的client儘可能重複使用,提升檢測效能。避免重複建立串連。
      // 工程代碼泄露可能會導致 AccessKey 泄露,並威脅帳號下所有資源的安全性。以下程式碼範例僅供參考。
      class Client {
          static createClient() {
              const config = new OpenApi.Config({
                  // 必填,請確保代碼運行環境設定了環境變數 ALIBABA_CLOUD_ACCESS_KEY_ID。
                  accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
                  // 必填,請確保代碼運行環境設定了環境變數 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
                  accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
                  endpoint: `green-cip.ap-southeast-1.aliyuncs.com`,
              });
              return new Green20220302.default(config);
          }
      
          static async main() {
              const client = Client.createClient();
              // 構造請求對象
              const videoModerationResultRequest = new Green20220302.VideoModerationResultRequest({
                  // 視頻檢測service。
                  "service": "videoDetection_global",
                  "serviceParameters": JSON.stringify({"taskId":"<待擷取視頻檢測結果的任務ID>"})
              });
              // 建立運行時設定物件
              const runtime = new Util.RuntimeOptions();
              try {
                  // 發起請求並擷取響應
                  const response = await client.videoModerationResultWithOptions(videoModerationResultRequest, runtime);
                  console.log(JSON.stringify(response.body));
              } catch (error) {
                  // 此處僅做列印展示,請謹慎對待異常處理,在工程專案中切勿直接忽略異常。
                  // 錯誤 message
                  console.log('Error occurred:', error.message);
              }
          }
      }
      
      Client.main();
  • 調用方式

    服務要求地址:https://green-cip.{region}.aliyuncs.com

    協議:HTTPS

    方式:POST

  • 公用請求參數

    語音審核增強版API介面的入參數包含公用請求參數和具體介面請求參數,公用請求參數是指每一個介面都需要使用到的參數,以下表格是公用請求參數的詳細介紹。

    名稱

    類型

    是否必須

    描述

    Format

    String

    返回訊息的格式。取值:

    • JSON(預設值)

    • XML

    Version

    String

    API版本號碼,使用YYYY-MM-DD日期格式,本版本為2022-03-02。

    AccessKeyId

    String

    阿里雲頒發給使用者的訪問服務所用的密鑰ID。

    Signature

    String

    簽名結果串,關於簽名的計算方法,請參見下方簽名方式。

    SignatureMethod

    String

    簽名方式,目前支援HMAC-SHA1。

    Timestamp

    String

    請求的時間戳記。日期格式按照ISO8601標準表示,並需要使用UTC時間。

    格式為:yyyy-MM-ddTHH:mm:ssZ。

    例如,北京時間2022年12月12日09點13分14秒錶示為2022-12-12T01:13:14Z。

    SignatureVersion

    String

    簽名演算法版本,取值為1.0。

    SignatureNonce

    String

    唯一隨機數,用於防止網路重放攻擊。不同請求要使用不同的隨機數值。

    Action

    String

    取值:

    • VideoModeration

    • VideoModerationResult

  • 公用返回參數

    您發送的每次介面調用請求,無論成功與否,系統都會返回唯一識別碼(RequestId)。其他返回參數會根據您調用的服務不同而返回不同的參數。

    {
        "RequestId":"20B935A9-XXXXXXXX-XXXXXXXX0C2",
        "Message":"SUCCESS",
        "Data":{
            "TaskId":"vi_f_O5xxxxxxxxxxxxxxqa-1****"
        },
        "Code":200
    }
  • 程式碼範例

    以下返回樣本為了便於閱讀,做了格式化處理,實際返回結果沒有進行換行、縮排等格式化處理。

    • 審核任務程式碼範例

      請求樣本

      http://green-cip.ap-southeast-1.aliyuncs.com/
      ?Format=JSON
      &Version=2022-03-02
      &Signature=vpEEL0zFHfxXYzSFV0n7%2FZiFL9o%3D
      &SignatureMethod=Hmac-SHA1
      &SignatureNonce=15215528852396
      &SignatureVersion=1.0
      &Action=VideoModeration
      &AccessKeyId=123****cip
      &Timestamp=2023-02-03T12:00:00Z
      &Service=videoDetection_global
      &ServiceParameters={"url": "https://xxxxxx.aliyuncs.com/sample/****.mp4"}

      正常返回樣本

      {
          "RequestId":"20B935A9-XXXXXXXX-XXXXXXXX0C2",
          "Message":"SUCCESS",
          "Data":{
              "TaskId":"vi_f_O5xxxxxxxxxxxxxxqa-1x****"
          },
          "Code":200
      }
    • 查詢任務程式碼範例

      請求樣本

      http://green-cip.ap-southeast-1.aliyuncs.com/
      ?Format=JSON
      &Version=2022-03-02
      &Signature=vpEEL0zFHfxXYzSFV0n7%2FZiFL9o%3D
      &SignatureMethod=Hmac-SHA1
      &SignatureNonce=15215528852396
      &SignatureVersion=1.0
      &Action=VideoModerationResult
      &AccessKeyId=123****cip
      &Timestamp=2023-02-03T12:00:00Z
      &Service=videoDetection_global
      &ServiceParameters={"taskId": "vi_f_O5zxxxxxxxxxxxxxxxx-1x****"}

      正常返回樣本

      {
          "Code": 200,
          "RequestId": "25106421-XXXX-XXXX-XXXX-15DA5AAAC546",
          "Message": "success finished",
          "Data": {
              "DataId": "ABCDEF-TESTDATAID",
              "TaskId": "vi_f_VnI6BO74NXFIZm7XXXXXXXXXXXXXX",
              "RiskLevel": "medium",
              "FrameResult": {
                  "FrameNum": 2,
                  "FrameSummarys": [
                      {
                          "Label": "violent_explosion",
                          "Description": "疑似含有煙火類內容元素",
                          "LabelSum": 8
                      },
                      {
                          "Label": "sexual_cleavage",
                          "Description": "疑似含有包含肢體裸露或性感內容",
                          "LabelSum": 8
                      }
                  ],
                  "RiskLevel": "medium",
                  "Frames": [
                      {
                          "Offset": 1,
                          "RiskLevel": "none",
                          "Results": [
                              {
                                  "Result": [
                                      {
                                          "Label": "nonLabel",
                                          "Description": "未檢測出風險"
                                      }
                                  ],
                                  "Service": "baselineCheck"
                              },
                              {
                                  "Result": [
                                      {
                                          "Label": "nonLabel"
                                      }
                                  ],
                                  "Service": "baselineCheck_pro"
                              }
                          ],
                          "TempUrl": "http://abc.oss-cn-shanghai.aliyuncs.com/test1.jpg"
                      },
                      {
                          "Offset": 2,
                          "RiskLevel": "medium",
                          "Results": [
                              {
                                  "Result": [
                                      {
                                          "Confidence": 74.1,
                                          "Label": "violent_explosion",
                                          "Description": "疑似含有煙火類內容元素"
                                      }
                                  ],
                                  "Service": "baselineCheck"
                              },
                              {
                                  "Result": [
                                      {
                                          "Confidence": 1,
                                          "Label": "sexual_cleavage",
                                          "Description": "疑似含有包含肢體裸露或性感內容"
                                      }
                                  ],
                                  "Service": "baselineCheck_pro"
                              }
                          ],
                          "TempUrl": "http://abc.oss-cn-shanghai.aliyuncs.com/test2.jpg"
                      }
                  ]
              }
          }
      }
  • 簽名方式

    語音審核增強版服務會對每個訪問的請求進行身分識別驗證,因此,需要在請求中包含簽名(Signature)資訊。語音審核增強版服務通過使用AccessKey ID和AccessKey Secret進行對稱式加密的方法來驗證請求的寄件者身份。

    AccessKey ID和AccessKey Secret由阿里雲官方頒發給訪問者(可以通過阿里雲官方網站申請和管理),其中AccessKey ID用於標識訪問者身份;AccessKey Secret是用於加密簽名字串和伺服器端驗證簽名字串的密鑰,必須嚴格保密,只有阿里雲和使用者知道。

    使用者在訪問時,按照下面的方法對請求進行簽名處理:

    1. 使用請求參數構造正常化的請求字串(Canonicalized Query String)。

      1. 按照參數名稱的字典順序對請求中所有的請求參數(包括公用請求參數和給定了的請求介面的自訂參數,但不能包括公用請求參數中提到的Signature參數本身)進行排序。

      2. 對相關請求參數的名稱和值進行編碼。名稱和值要使用UTF-8字元集進行URL編碼。

        說明

        一般支援URL編碼的庫(比如Java中的java.net.URLEncoder)都是按照application/x-www-form-urlencoded的MIME類型的規則進行編碼的。實現時可以直接使用這類方式進行編碼,把編碼後的字串中加號(+)替換成%20、星號(*)替換成%2A、%7E替換回波浪號(~),即可得到上述規則描述的編碼字串。

        URL編碼的編碼規則如下:

        • 對於字元A-Z、a-z、0-9以及字元中劃線(-)、底線(_)、半形句號(.)、波浪線(~)不編碼。

        • 對於其它字元編碼成%XY的格式,其中XY是字元對應ASCII碼的16進位表示。比如英文的雙引號(")對應的編碼就是%22

        • 對於擴充的UTF-8字元,編碼成%XY%ZA…的格式。

        • 需要說明的是英文空格( )要被編碼是%20,而不是加號(+)。

      3. 對編碼後的參數名稱和值使用英文等號(=)進行串連。

      4. 將英文等號串連得到字串按參數名稱的字典順序依次使用&符號串連,即得到正常化請求字串。

    2. 使用 a.i 構造的正常化字串按照下面的規則構造用於計算簽名的字串:

      StringToSign=
      HTTPMethod + "&" +
      percentEncode("/") + "&" +
      percentEncode(CanonicalizedQueryString)
      說明

      其中HTTPMethod是提交請求用的HTTP方法,比如POST。percentEncode(/)是按照 a.ii 中描述的URL編碼規則對字元(/)進行編碼得到的值,即%2F。percentEncode(CanonicalQueryString)是對 a.i 中構造的正常化請求字串按 a.ii 中描述的URL編碼規則編碼後得到的字串。

    3. 按照RFC2104的定義,使用上面的用於簽名的字串計算簽名HMAC值。

      說明

      注意計算簽名時使用的Key就是使用者持有的AccessKey Secret並加上一個&字元(ASCII:38),使用的雜湊演算法是SHA1。

    4. 按照Base64編碼規則把上面的HMAC值編碼成字串,即得到簽名值(Signature)。

    5. 將得到的簽名值作為Signature參數添加到請求參數中,即完成對請求籤名的過程。

      說明

      得到的簽名值在作為最後的請求參數值提交給Alibaba Content Security Service伺服器時,要和其他參數一樣,按照RFC3986的規則進行URL編碼。

  • 本頁導讀 (0, M)
  • 步驟一:開通服務
  • 步驟二:為RAM使用者授權
  • 步驟三:安裝並接入視頻審核服務
文檔反饋