SDK 参考
文档版本 01
发布日期 2021-11-04
非经本公司书面许可,任何单位和个人不得擅自摘抄、复制本文档内容的部分或全部,并不得以任何形式传 播。
商标声明
和其他华为商标均为华为技术有限公司的商标。
本文档提及的其他所有商标或注册商标,由各自的所有人拥有。
注意
您购买的产品、服务或特性等应受华为公司商业合同和条款的约束,本文档中描述的全部或部分产品、服务或 特性可能不在您的购买或使用范围之内。除非合同另有约定,华为公司对本文档内容不做任何明示或暗示的声 明或保证。
由于产品版本升级或其他原因,本文档内容会不定期进行更新。除非另有约定,本文档仅作为使用指导,本文 档中的所有陈述、信息和建议不构成任何明示或暗示的担保。
目 录
1 SDK 介绍... 1
2 Java SDK(3.x.x)... 2
2.1 开发前准备... 2
2.2 视频转码...7
2.2.1 新建转码任务...8
2.2.2 取消转码任务... 10
2.2.3 查询转码任务... 11
2.3 抽帧截图... 12
2.3.1 新建截图任务... 13
2.3.2 取消截图任务... 14
2.3.3 查询截图任务... 16
2.4 独立加密... 17
2.4.1 新建独立加密任务... 17
2.4.2 取消独立加密任务... 19
2.4.3 查询独立加密任务... 20
2.5 动图管理... 22
2.5.1 新增动图任务... 22
2.5.2 查询动图任务... 24
2.5.3 取消动图任务... 25
2.6 视频解析... 26
2.6.1 创建视频解析任务... 27
2.6.2 查询视频解析任务... 28
2.6.3 取消视频解析任务... 30
2.7 转封装管理... 31
2.7.1 创建转封装任务...31
2.7.2 查询转封装任务...32
2.7.3 取消转封装任务...34
2.8 配置转码模板...35
2.8.1 新建转码模板... 35
2.8.2 删除转码模板... 37
2.8.3 更新转码模板... 38
2.8.4 查询转码模板... 41
2.9 配置水印模板...42
2.9.1 新建水印模板... 42
2.9.2 更新水印模板... 44
2.9.3 查询水印配置模板... 45
2.9.4 删除水印模板... 46
2.10 SDK & API 对应关系... 48
3 Python SDK... 50
4 Go SDK... 55
A 附录... 59
A.1 JDK 安装... 59
A.2 错误码表... 60
A.3 返回状态码... 74
A.4 获取关键参数... 75
1 SDK 介绍
媒体处理SDK提供了创建转码任务、取消转码任务、查询转码任务、创建转码配置模 板、删除转码配置模板、更新转码配置模板、查询转码配置模板等。
目前暂提供了JAVA、Python和Go三种语言SDK,若您有其它开发语言的需求,建议您 通过媒体处理API进行调用。
表1-1 服务端 SDK
语言 下载地址 参考文档
JAVA(3.x.x 版)
huaweicloud-sdk-java-v3 Java SDK使用指导(3.x.x)
Python
huaweicloud-sdk-python-
v3 Python SDK使用指导
Go
huaweicloud-sdk-go-v3 Go SDK使用指导
2 Java SDK(3.x.x)
2.1 开发前准备 2.2 视频转码 2.3 抽帧截图 2.4 独立加密 2.5 动图管理 2.6 视频解析 2.7 转封装管理 2.8 配置转码模板 2.9 配置水印模板
2.10 SDK & API对应关系
2.1 开发前准备
本章节介绍了Java SDK的使用说明,您可以参考本章节进行快速集成开发。
开发前准备
● 已完成华为云官网注册,并进行了实名认证。
● 已具备开发环境 ,支持Java JDK 1.8 及其以上版本。
● 已获取华为云账号对应的 Access Key(AK)和 Secret Access Key(SK)。请在 华为云控制台“我的凭证 > 访问密钥”页面上创建和查看您的 AK/SK。具体请参 见访问密钥。
● 已获取转码服务对应区域的项目ID,请在华为云控制台“我的凭证 > API凭证”页 面上查看项目ID。具体请参见API凭证。
● 已将需要处理的媒资文件上传至MPC同区域的OBS桶中,并将OBS桶进行授权,
允许MPC访问。具体请参见上传音视频文件和获取云资源授权。
Maven 安装配置
下载settings.xml文件,覆盖<Maven安装目录>/conf/settings.xml文件即可。如果您不 想覆盖配置文件,可以依次按照下面方法手动修改settings.xml文件。
1. 在profiles节点中添加如下内容:
<profile>
<id>MyProfile</id>
<repositories>
<repository>
<id>HuaweiCloudSDK</id>
<url>https://repo.huaweicloud.com/repository/maven</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>HuaweiCloudSDK</id>
<url>https://repo.huaweicloud.com/repository/maven</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
2. 在mirrors节点中增加:
<mirror>
<id>huaweicloud</id>
<mirrorOf>*,!HuaweiCloudSDK</mirrorOf>
<url>https://repo.huaweicloud.com/repository/maven</url>
</mirror>
3. 增加activeProfiles标签激活配置:
<activeProfiles>
<activeProfile>MyProfile</activeProfile>
</activeProfiles>
4. 配置pom.xml,添加媒体处理的SDK依赖,媒体处理服务具体的SDK版本号请参见
SDK开发中心。
<dependency>
<groupId>com.huaweicloud.sdk</groupId>
<artifactId>huaweicloud-sdk-mpc</artifactId>
<version>3.0.39-rc</version>
</dependency>
开始使用
步骤1 导入依赖模块。
// 用户身份认证
import com.huaweicloud.sdk.core.auth.BasicCredentials;
// 请求异常类
import com.huaweicloud.sdk.core.exception.ClientRequestException;
import com.huaweicloud.sdk.core.exception.ServerResponseException;
// Http 配置
import com.huaweicloud.sdk.core.http.HttpConfig;
// 导入mpc的客户端
import com.huaweicloud.sdk.mpc.v1.MpcClient;
// 导入待请求接口的 request 和 response 类
import com.huaweicloud.sdk.mpc.v1.model.ListTranscodingTaskRequest;
import com.huaweicloud.sdk.mpc.v1.model.ListTranscodingTaskResponse;
// 日志打印
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
步骤2 配置客户端属性。
1. 默认配置。
// 使用默认配置
HttpConfig config = HttpConfig.getDefaultHttpConfig();
2. 代理配置(可选)。
// 使用代理服务器(可选)
config.withProxyHost("http://proxy.huaweicloud.com") .withProxyPort(8080)
.withProxyUsername("test") .withProxyPassword("test");
3. 连接配置(可选)。
// 配置连接超时(可选)
config.withTimeout(3);
4. SSL配置(可选)。
// 配置跳过服务端证书验证(可选)
config.withIgnoreSSLVerification(true);
步骤3 初始化认证信息。
支持两种方式认证,您可以根据实际情况进行选择。
● 使用永久AK/SK
首先需要获取永久AK和SK,以及projectId,您可以参考开发前准备获取。
BasicCredentials credentials = new BasicCredentials() .withAk(ak)
.withSk(sk)
.withProjectId(projectId)
● 使用临时AK/SK
首先需要获取临时AK、SK和SecurityToken,您可以通过token获取或者通过委托 授权获取。
BasicCredentials credentials = new BasicCredentials() .withAk(ak)
.withSk(sk)
.withSecurityToken(securityToken) .withProjectId(projectId)
相关参数说明如下所示:
● ak:华为云账号 Access Key。
● sk:华为云账号 Secret Access Key 。
● projectId:云服务所在区域的项目 ID ,根据你想操作的项目所属区域选择对应 的项目 ID。
● securityToken:采用临时AK/SK认证场景下的安全票据。
步骤4 初始化客户端。
//初始化MPC的客户端
MpcClient MpcClient = MpcClient.newBuilder() .withHttpConfig(config)
.withCredential(credentials) .withEndpoint(endpoint) .build();
endpoint:MPC应用区域和各服务的终端节点,具体请参见地区和终端节点。
步骤5 发送请求并查看响应。
// 初始化请求,以调用查询转码模板接口为例 ListTranscodingTaskResponse response = mpcClient.
listTranscodingTask(new ListTranscodingTaskRequest().withTaskId(Collections.singletonList(1900293L)) ));logger.info(response.toString());
步骤6 异常处理。
表2-1 异常处理
一级分类 一级分类说
明
二级分类 二级分类说明
ConnectionExce
ption 连接类异常 HostUnreachableEx
ception 网络不可达、被拒绝
SslHandShakeExcep
tion SSL认证异常
RequestTimeout
Exception 响应超时异
常 CallTimeoutExcepti
on 单次请求,服务器处理超
时未返回 RetryOutageExcepti
on 在重试策略消耗完成已
后,仍无有效的响应 ServiceResponse
Exception 服务器响应 异常
ServerResponseExce
ption 服务端内部错误,Http响
应码:[500,]
ClientRequestExcep
tion 请求参数不合法,Http响
应码:[400, 500)
// 异常处理 try {
ListTranscodingTaskResponse response= mpcClient.listTranscodingTask(new ListTranscodingTaskRequest().withTaskId(Collections.singletonList(1900293L)));
} catch(ServiceResponseException e) {
logger.error("HttpStatusCode: " + e.getHttpStatusCode());
logger.error("RequestId: " + e.getRequestId());
logger.error("ErrorCode: " + e.getErrorCode());
logger.error("ErrorMsg: " + e.getErrorMsg());
}
步骤7 异步客户端使用。
// 初始化异步客户端
MpcAsyncClient mpcAsyncClient = MpcAsyncClient.newBuilder() .withHttpConfig(config) .withCredential(credentials) .withEndpoint(endpoint) .build();
// 发送异步请求
CompletableFuture<ListTranscodingTaskResponse> future = mpcAsyncClient.listTranscodingTaskAsync(new ListTranscodingTaskRequest().withTaskId(Collections.singletonList(1900293L)));
// 获取异步请求结果
ListTranscodingTaskResponse response = future.get();
logger.info(response.toString());
步骤8 访问日志。
SDK在运行的时候采用了slf4j进行日志打印,如果在运行代码实例时,未配置日志实现 库,会有提示如下:
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
您可以根据目标项目实际情况引入对应的日志实现,请在对应的工程项目的 pom.xml 文件中引入日志实现的依赖,如下所示:
● slf4j
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.21</version>
</dependency>
logback
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.3</version>
</dependency>
● log4j
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
SDK默认会打印访问日志,每次请求都会有一条记录,日志名称为"HuaweiCloud- SDK-Access", 日志格式如下所示:
"{httpMethod} {uri}" {httpStatusCode} {responseContentLength} {requestId}
其中“requestId”是华为云APIG返回的请求ID,可以用于问题跟踪。
可以根据项目情况在对应的日志配置文件中对访问日志进行屏蔽,或者单独打印到独 立文件中。例如在logback中关闭访问日志:
<logger name="HuaweiCloud-SDK-Access" level="OFF"> </logger>
步骤9 原始HTTP侦听器。
在某些场景下可能对业务发出的Http请求进行Debug,需要看到原始的Http请求和返 回信息,SDK提供侦听器功能来获取原始的为加密的Http请求和返回信息。
注意
原始信息打印仅在debug阶段使用,请不要在生产系统中将原始的Http头和Body信息 打印到日志,这些信息并未加密且其中包含敏感数据;当Body体为二进制内容,即 Content-Type标识为二进制时,body为"***",详细内容不输出。
HttpConfig config = new HttpConfig().addHttpListener(HttpListener.forRequestListener(requestListener ->
// 注册侦听器后打印Http Request 原始信息,请勿在生产系统中使用 logger.debug("REQUEST: {} {} {} {}",
requestListener.httpMethod(), requestListener.uri(),
requestListener.headers().entrySet().stream().flatMap(entry ->
entry.getValue().stream().map(value -> entry.getKey() + " : " + value)) .collect(Collectors.joining(";")),
requestListener.body().orElse(""))));
.addHttpListener(HttpListener.forResponseListener(responseListener ->
// 注册侦听器后打印Http Request 原始信息,请勿在生产系统中使用 logger.debug("RESPONSE: {} {} {} {} {}",
responseListener.httpMethod(), responseListener.uri(), responseListener.statusCode(),
responseListener.headers().entrySet().stream().flatMap(entry ->
entry.getValue().stream().map(value -> entry.getKey() + " : " + value)) .collect(Collectors.joining(";")),
responseListener.body().orElse(""))));
MpcClient mpcClient = MpcClient.newBuilder() .withHttpConfig(config)
.withCredential(auth) .withEndpoint(endpoint) .build();
----结束
代码示例 - 初始化 MpcClient
以下示例endpoint为上海2,调用前请根据实际情况填写,并替换如下变量: {your ak string}、{your sk string}、{your endpoint string} 和 {your project id}。
package com.huaweicloud.sdk.test;
import com.huaweicloud.sdk.core.auth.BasicCredentials;
import com.huaweicloud.sdk.core.http.HttpConfig;
import com.huaweicloud.sdk.mpc.v1.MpcClient;
public class InitMpc {
private static HttpConfig httpConfig;
private static BasicCredentials auth;
private static String endpoint;
private static MpcClient mpcClient;
public static MpcClient getMpcClient() {
httpConfig = HttpConfig.getDefaultHttpConfig().withIgnoreSSLVerification(true).withTimeout(3);
//http代理设置,请根据实际情况设置
//httpConfig.withProxyHost("xxxxx").withProxyPort(xxxxx).withProxyUsername("xxxxx").
// withProxyPassword("xxxxx");
String ak = "xxxxx";
String sk = "xxxxx";
String projectId = "xxxxx";
endpoint = "https://mpc.cn-east-2.myhuaweicloud.com";
auth = new BasicCredentials().withAk(ak).withSk(sk).withProjectId(projectId);
mpcClient = MpcClient.newBuilder() .withHttpConfig(httpConfig) .withCredential(auth) .withEndpoint(endpoint) .build();
return mpcClient;
} }
2.2 视频转码
2.2.1 新建转码任务
您可以通过创建转码MpcClient实例并设置相关参数新建转码任务。
核心代码
1. 创建转码MpcClient实例。
public static MpcClient initMpcClient() { //设置httpConfig
HttpConfig httpConfig =
HttpConfig.getDefaultHttpConfig().withIgnoreSSLVerification(true).withTimeout(3);
//根据实际需要,是否设置http代理
//httpConfig.withProxyHost("xxxxxx").withProxyPort(xxxxxx).withProxyUsername("xxxxxx").
//withProxyPassword("xxxxxx");
//根据实际填写ak,sk,华为云控制台账号名下“我的凭证”>访问密钥上创建和查看您的AK/SK String ak = "xxxxxx";
String sk = "xxxxxx";
//根据实际填写项目ID,华为云控制台账号名下“我的凭证”>API凭证下查看您的项目ID String projectId = "xxxxxx";
//根据实际填写所需endpoint,这里以华东2为例
String endpoint = "https://mpc.cn-east-2.myhuaweicloud.com";
BasicCredentials auth = new BasicCredentials().withAk(ak).withSk(sk).withProjectId(projectId);
return MpcClient.newBuilder() .withHttpConfig(httpConfig) .withCredential(auth) .withEndpoint(endpoint) .build();
}
2. 创建转码请求,并设置请求体。
转码请求包括输入文件、输出文件和转码模板设置。具体参数含义请参考新建转 码任务。//设置转码输入视频地址
ObsObjInfo input = new ObsObjInfo() //设置桶名
.withBucket("mpc-east-2") //设置OBS桶所在区域 .withLocation("cn-east-2") //设置输入视频对象
.withObject("input/ok.mp4");
//设置转码输出视频路径
ObsObjInfo output = new ObsObjInfo().withBucket("mpc-east-2").withLocation("cn-east-2") //设置输出路径
.withObject("output");
//创建转码请求
CreateTranscodingTaskRequest request
= new CreateTranscodingTaskRequest().withBody(new CreateTranscodingReq() .withInput(input)
.withOutput(output)
//设置转码模板,预置模板Id可以在MPC console页面“全局设置” - “预置模板”上查看 .withTransTemplateId(Collections.singletonList(7000530))
//设置输出名称,名称个数需要与模板个数一一对应 .withOutputFilenames(Collections.singletonList("output_")) //设置截图参数,根据实际需要填充Thumbnail结构
//.withThumbnail(new Thumbnail())
//设置加密参数,根据实际需要填充Encryption结构 //.withEncryption(new Encryption())
);
3. 发送转码请求。
//发送媒体处理服务请求
CreateTranscodingTaskResponse response = initMpcClient().createTranscodingTask(request);
//返回消息
System.out.println("CreateTranscodingTaskResponse=" + response);
示例代码
import com.huaweicloud.sdk.core.auth.BasicCredentials;
import com.huaweicloud.sdk.core.exception.ConnectionException;
import com.huaweicloud.sdk.core.exception.RequestTimeoutException;
import com.huaweicloud.sdk.core.http.HttpConfig;
import com.huaweicloud.sdk.core.utils.JsonUtils;
import com.huaweicloud.sdk.mpc.v1.MpcClient;
import com.huaweicloud.sdk.mpc.v1.model.CreateTranscodingReq;
import com.huaweicloud.sdk.mpc.v1.model.CreateTranscodingTaskRequest;
import com.huaweicloud.sdk.mpc.v1.model.CreateTranscodingTaskResponse;
import com.huaweicloud.sdk.mpc.v1.model.ListTranscodingTaskRequest;
import com.huaweicloud.sdk.mpc.v1.model.ListTranscodingTaskResponse;
import com.huaweicloud.sdk.mpc.v1.model.ObsObjInfo;
import com.obs.services.internal.ServiceException;
import org.junit.Test;
import java.util.Arrays;
import java.util.Collections;
public class TestTranscode { /**
* 初始化 MpcClient * @return */
public static MpcClient initMpcClient() { HttpConfig httpConfig =
HttpConfig.getDefaultHttpConfig().withIgnoreSSLVerification(true).withTimeout(3);
//http代理设置,请根据实际情况设置
//httpConfig.withProxyHost("xxxxxx").withProxyPort(xxxxxx).withProxyUsername("xxxxxx").
// withProxyPassword("xxxxxx");
//根据实际填写ak,sk,华为云控制台账号名下“我的凭证”>访问密钥上创建和查看您的AK/SK String ak = "xxxxxx";
String sk = "xxxxxx";
//根据实际填写项目ID,华为云控制台账号名下“我的凭证”>API凭证下查看您的项目ID String projectId = "xxxxxx";
//根据实际填写所需endpoint,这里以华东2为例
String endpoint = "https://mpc.cn-east-2.myhuaweicloud.com";
BasicCredentials auth = new BasicCredentials().withAk(ak).withSk(sk).withProjectId(projectId);
return MpcClient.newBuilder() .withHttpConfig(httpConfig) .withCredential(auth) .withEndpoint(endpoint) .build();
} /**
* 创建转码任务 * @param args */
public static void main(String[] args) { //设置转码输入视频地址
ObsObjInfo input = new ObsObjInfo().withBucket("mpc-east-2").withLocation("cn- east-2").withObject("ok.mp4");
//设置转码输出视频路径
ObsObjInfo output = new ObsObjInfo().withBucket("mpc-east-2").withLocation("cn- east-2").withObject("output");
//创建转码请求
CreateTranscodingTaskRequest request
= new CreateTranscodingTaskRequest().withBody(new CreateTranscodingReq() .withInput(input)
.withOutput(output)
//设置转码模板,预置模板Id可以在MPC console页面“全局设置” - “预置模板”上查看 .withTransTemplateId(Collections.singletonList(7000530))
//设置输出名称,名称个数需要与模板个数一一对应 .withOutputFilenames(Collections.singletonList("output_")) //设置截图参数
//.withThumbnail(new Thumbnail()) //设置加密参数
//.withEncryption(new Encryption())
);
try {
CreateTranscodingTaskResponse response = initMpcClient().createTranscodingTask(request);
System.out.println("CreateTranscodingTaskResponse=" + response);
} catch (ClientRequestException | ConnectionException | RequestTimeoutException | ServiceException e) { System.out.println(e);
} } }
2.2.2 取消转码任务
说明
● 取消转码任务需要用户提供所要取消任务的taskId。
● 待取消的taskId只能是正在转码任务队列中排队的转码任务。已开始转码或已完成 的转码任务不能取消。
● 错误处理请参考错误码表。
设置取消转码参数
//取消任务,TaskId是转码请求响应中返回的任务ID
DeleteTranscodingTaskRequest req = new DeleteTranscodingTaskRequest().withTaskId(3273178);
//发送请求
DeleteTranscodingTaskResponse deleteTranscodingTaskResponse = initMpcClient().deleteTranscodingTask(req);
//返回处理消息
System.out.println(JsonUtils.toJSON(deleteTranscodingTaskResponse));
示例代码
import com.huaweicloud.sdk.core.auth.BasicCredentials;
import com.huaweicloud.sdk.core.exception.ClientRequestException;
import com.huaweicloud.sdk.core.exception.ConnectionException;
import com.huaweicloud.sdk.core.exception.RequestTimeoutException;
import com.huaweicloud.sdk.core.http.HttpConfig;
import com.huaweicloud.sdk.core.utils.JsonUtils;
import com.huaweicloud.sdk.mpc.v1.MpcClient;
import com.huaweicloud.sdk.mpc.v1.model.DeleteTranscodingTaskRequest;
import com.huaweicloud.sdk.mpc.v1.model.DeleteTranscodingTaskResponse;
import com.obs.services.internal.ServiceException;
public class TestDeleteTranscode { /**
* 初始化 MpcClient * @return */
public static MpcClient initMpcClient() { HttpConfig httpConfig =
HttpConfig.getDefaultHttpConfig().withIgnoreSSLVerification(true).withTimeout(3);
//http代理设置,请根据实际情况设置
//httpConfig.withProxyHost("xxxxxx").withProxyPort(xxxxxx).withProxyUsername("xxxxxx").
// withProxyPassword("xxxxxx");
//根据实际填写ak,sk,华为云控制台账号名下“我的凭证”>访问密钥上创建和查看您的AK/SK String ak = "xxxxxx";
String sk = "xxxxxx";
//根据实际填写项目ID,华为云控制台账号名下“我的凭证”>API凭证下查看您的项目ID String projectId = "xxxxxx";
//根据实际填写所需endpoint,这里以华东2为例
String endpoint = "https://mpc.cn-east-2.myhuaweicloud.com";
BasicCredentials auth = new BasicCredentials().withAk(ak).withSk(sk).withProjectId(projectId);
return MpcClient.newBuilder() .withHttpConfig(httpConfig)
.withCredential(auth) .withEndpoint(endpoint) .build();
} /**
* 取消排队中的任务 */
public static void main(String[] args) { try {
//取消任务请求,TaskId是转码请求响应中返回的任务ID
DeleteTranscodingTaskRequest req = new DeleteTranscodingTaskRequest().withTaskId(3273178);
//发送请求
DeleteTranscodingTaskResponse deleteTranscodingTaskResponse = initMpcClient().deleteTranscodingTask(req);
//返回处理消息
System.out.println(JsonUtils.toJSON(deleteTranscodingTaskResponse));
} catch (ClientRequestException | ConnectionException | RequestTimeoutException | ServiceException e) { System.out.println(e);
} } }
2.2.3 查询转码任务
您可根据转码任务ID、状态、页码数、开始和结束时间,查询单个或多个转码任务的 执行情况。
在查询到的结果集中,如果不提供页码数和显示条数并且数据大于10条,会默认显示 10条数据并进行分页处理。
具体查询条件和查询结果参数请参考查询转码任务接口。
查询单个转码任务
//按单个TaskId查询任务,TaskId是转码请求响应中返回的任务ID ListTranscodingTaskRequest req = new
ListTranscodingTaskRequest().withTaskId(Collections.singletonList(3273178L));
//发送请求
ListTranscodingTaskResponse listTranscodingTaskResponse = initMpcClient().listTranscodingTask(req);
System.out.println(JsonUtils.toJSON(listTranscodingTaskResponse));
查询多个转码任务
//按多个TaskId查询任务,TaskId是转码请求响应中返回的任务ID
ListTranscodingTaskRequest req = new ListTranscodingTaskRequest().withTaskId(Arrays.asList(3273178L, 3273179L));
//发送请求
ListTranscodingTaskResponse listTranscodingTaskResponse = initMpcClient().listTranscodingTask(req);
System.out.println(JsonUtils.toJSON(listTranscodingTaskResponse));
根据状态查询
//按状态查询任务
ListTranscodingTaskRequest req = new ListTranscodingTaskRequest().withStatus("FAILED");
//发送请求
ListTranscodingTaskResponse listTranscodingTaskResponse = initMpcClient().listTranscodingTask(req);
System.out.println(JsonUtils.toJSON(listTranscodingTaskResponse));
根据开始时间和结束时间查询
//根据转码任务开始和结束时间查询 ListTranscodingTaskRequest req = new
ListTranscodingTaskRequest().withStartTime("20210401001517").withEndTime("20210402081517");
//发送请求
ListTranscodingTaskResponse listTranscodingTaskResponse = initMpcClient().listTranscodingTask(req);
System.out.println(JsonUtils.toJSON(listTranscodingTaskResponse));
根据页码查询
//根据页码和每页条数查询
ListTranscodingTaskRequest req = new ListTranscodingTaskRequest().withPage(0).withSize(4);
//发送请求
ListTranscodingTaskResponse listTranscodingTaskResponse = initMpcClient().listTranscodingTask(req);
System.out.println(JsonUtils.toJSON(listTranscodingTaskResponse));
示例代码
import com.huaweicloud.sdk.core.auth.BasicCredentials;
import com.huaweicloud.sdk.core.http.HttpConfig;
import com.huaweicloud.sdk.core.utils.JsonUtils;
import com.huaweicloud.sdk.mpc.v1.MpcClient;
import com.huaweicloud.sdk.mpc.v1.model.ListTranscodingTaskRequest;
import com.huaweicloud.sdk.mpc.v1.model.ListTranscodingTaskResponse;
public class TestListTranscode { /**
* 初始化 MpcClient * @return */
public static MpcClient initMpcClient() { HttpConfig httpConfig =
HttpConfig.getDefaultHttpConfig().withIgnoreSSLVerification(true).withTimeout(3);
//http代理设置,请根据实际情况设置
//httpConfig.withProxyHost("xxxxxx").withProxyPort(xxxxxx).withProxyUsername("xxxxxx").
// withProxyPassword("xxxxxx");
//根据实际填写ak,sk,华为云控制台账号名下“我的凭证”>访问密钥上创建和查看您的AK/SK String ak = "xxxxxx";
String sk = "xxxxxx";
//根据实际填写项目ID,华为云控制台账号名下“我的凭证”>API凭证下查看您的项目ID String projectId = "xxxxxx";
//根据实际填写所需endpoint,这里以华东2为例
String endpoint = "https://mpc.cn-east-2.myhuaweicloud.com";
BasicCredentials auth = new BasicCredentials().withAk(ak).withSk(sk).withProjectId(projectId);
return MpcClient.newBuilder() .withHttpConfig(httpConfig) .withCredential(auth) .withEndpoint(endpoint) .build();
} /**
* 查询转码任务 */
public static void main(String[] args) { try {
//按TaskId查询任务,TaskId是转码请求响应中返回的任务ID ListTranscodingTaskRequest req = new
ListTranscodingTaskRequest().withTaskId(Collections.singletonList(3273178L));
//发送请求
ListTranscodingTaskResponse listTranscodingTaskResponse = initMpcClient().listTranscodingTask(req);
System.out.println(JsonUtils.toJSON(listTranscodingTaskResponse));
} catch (Exception e) { System.out.println(e);
} } }
2.3 抽帧截图
2.3.1 新建截图任务
前提条件
● 已购买对象存储服务,并参考上传媒体文件在媒体处理服务同区域(如华北-北京 四)上传媒体处理的源视频。
● 已参考获取云资源授权,完成媒体处理服务授权。
核心代码
1. 创建截图任务请求。
新建截图任务请求包括输入文件、输出文件的路径。具体参数请参考新建截图任 务接口。//设置截图输入视频地址
ObsObjInfo input = new ObsObjInfo().withBucket("mpc-east-2").withLocation("cn- east-2").withObject("ok.mp4");
//设置截图输出路径
ObsObjInfo output = new ObsObjInfo().withBucket("mpc-east-2").withLocation("cn- east-2").withObject("output");
//创建截图请求
CreateThumbnailsTaskRequest req = new CreateThumbnailsTaskRequest() .withBody(new CreateThumbReq().withInput(input).withOutput(output) //设置截图类型,此处理按时间点截图
.withThumbnailPara(new ThumbnailPara().withType(ThumbnailPara.TypeEnum.DOTS) //设置截图输出文件名称
.withOutputFilename("photo") //设置截图的时间点
.withDots(Collections.singletonList(2)) //设置截图的宽
.withWidth(480) //设置截图的高 .withHeight(360)));
说明:生成的截图文件按截图时间戳命名,从首帧开始截取,中间按时间间隔截 取,最后末帧截取一张。如视频文件20s,截图间隔为11s,则生成的截图文件为 0.jpg,11.jpg,20.jpg。
2. 发送创建截图任务请求并显示返回消息。
CreateThumbnailsTaskResponse rsp = initMpcClient().createThumbnailsTask(req);
System.out.println("CreateThumbnailsTaskResponse=" + JsonUtils.toJSON(rsp));
示例代码
package SdkTestCase.thumbnail;
import com.huaweicloud.sdk.core.auth.BasicCredentials;
import com.huaweicloud.sdk.core.exception.ClientRequestException;
import com.huaweicloud.sdk.core.exception.ConnectionException;
import com.huaweicloud.sdk.core.exception.RequestTimeoutException;
import com.huaweicloud.sdk.core.http.HttpConfig;
import com.huaweicloud.sdk.core.utils.JsonUtils;
import com.huaweicloud.sdk.mpc.v1.MpcClient;
import com.huaweicloud.sdk.mpc.v1.model.CreateThumbReq;
import com.huaweicloud.sdk.mpc.v1.model.CreateThumbnailsTaskRequest;
import com.huaweicloud.sdk.mpc.v1.model.CreateThumbnailsTaskResponse;
import com.huaweicloud.sdk.mpc.v1.model.ObsObjInfo;
import com.huaweicloud.sdk.mpc.v1.model.ThumbnailPara;
import com.obs.services.internal.ServiceException;
import java.util.Collections;
public class TestThumbnail { /**
* 初始化 MpcClient
* @return */
public static MpcClient initMpcClient() { HttpConfig httpConfig =
HttpConfig.getDefaultHttpConfig().withIgnoreSSLVerification(true).withTimeout(3);
//http代理设置,请根据实际情况设置
//httpConfig.withProxyHost("xxxxxx").withProxyPort(xxxxxx).withProxyUsername("xxxxxx").
// withProxyPassword("xxxxxx");
//根据实际填写ak,sk,华为云控制台账号名下“我的凭证”>访问密钥上创建和查看您的AK/SK String ak = "xxxxxx";
String sk = "xxxxxx";
//根据实际填写项目ID,华为云控制台账号名下“我的凭证”>API凭证下查看您的项目ID String projectId = "xxxxxx";
//根据实际填写所需endpoint,这里以华东2为例
String endpoint = "https://mpc.cn-east-2.myhuaweicloud.com";
BasicCredentials auth = new BasicCredentials().withAk(ak).withSk(sk).withProjectId(projectId);
return MpcClient.newBuilder() .withHttpConfig(httpConfig) .withCredential(auth) .withEndpoint(endpoint) .build();
} /**
* 创建截图任务 * @param args */
public static void main(String[] args) { //设置截图输入视频地址
ObsObjInfo input = new ObsObjInfo().withBucket("mpc-east-2").withLocation("cn- east-2").withObject("ok.mp4");
//设置截图输出路径
ObsObjInfo output = new ObsObjInfo().withBucket("mpc-east-2").withLocation("cn- east-2").withObject("output");
//创建截图请求
CreateThumbnailsTaskRequest req = new CreateThumbnailsTaskRequest() .withBody(new CreateThumbReq().withInput(input).withOutput(output) //设置截图类型,此处理按时间点截图
.withThumbnailPara(new ThumbnailPara().withType(ThumbnailPara.TypeEnum.DOTS) //设置截图文件名称
.withOutputFilename("photo") //设置截图的时间点
.withDots(Collections.singletonList(2)) //设置截图的宽
.withWidth(480) //设置截图的高 .withHeight(360)));
//发送截图请求 try {
CreateThumbnailsTaskResponse rsp = initMpcClient().createThumbnailsTask(req);
System.out.println("CreateThumbnailsTaskResponse=" + JsonUtils.toJSON(rsp));
} catch (ClientRequestException | ConnectionException | RequestTimeoutException | ServiceException e) { System.out.println(e);
} } }
2.3.2 取消截图任务
说明
● 取消任务需要用户提供所要取消任务的taskId。
● 待取消的taskId只能是正在截图任务队列中排队的。已开始或已完成的截图任务不 能删除。
核心代码
// 发送取消截图任务请求给媒体处理服务
DeleteThumbnailsTaskRequest req = new DeleteThumbnailsTaskRequest().withTaskId("2210744");
DeleteThumbnailsTaskResponse rsp = initMpcClient().deleteThumbnailsTask(req);
// 返回消息
System.out.println("DeleteThumbnailsTaskResponse=" + JsonUtils.toJSON(rsp));
完整代码
import com.huaweicloud.sdk.core.auth.BasicCredentials;
import com.huaweicloud.sdk.core.exception.ClientRequestException;
import com.huaweicloud.sdk.core.exception.ConnectionException;
import com.huaweicloud.sdk.core.exception.RequestTimeoutException;
import com.huaweicloud.sdk.core.http.HttpConfig;
import com.huaweicloud.sdk.core.utils.JsonUtils;
import com.huaweicloud.sdk.mpc.v1.MpcClient;
import com.huaweicloud.sdk.mpc.v1.model.DeleteThumbnailsTaskRequest;
import com.huaweicloud.sdk.mpc.v1.model.DeleteThumbnailsTaskResponse;
import com.obs.services.internal.ServiceException;
public class TestDeleteThumbnail { /**
* 初始化 MpcClient * @return */
public static MpcClient initMpcClient() { HttpConfig httpConfig =
HttpConfig.getDefaultHttpConfig().withIgnoreSSLVerification(true).withTimeout(3);
//http代理设置,请根据实际情况设置
//httpConfig.withProxyHost("xxxxxx").withProxyPort(xxxxxx).withProxyUsername("xxxxxx").
// withProxyPassword("xxxxxx");
//根据实际填写ak,sk,华为云控制台账号名下“我的凭证”>访问密钥上创建和查看您的AK/SK String ak = "xxxxxx";
String sk = "xxxxxx";
//根据实际填写项目ID,华为云控制台账号名下“我的凭证”>API凭证下查看您的项目ID String projectId = "xxxxxx";
//根据实际填写所需endpoint,这里以华东2为例
String endpoint = "https://mpc.cn-east-2.myhuaweicloud.com";
BasicCredentials auth = new BasicCredentials().withAk(ak).withSk(sk).withProjectId(projectId);
return MpcClient.newBuilder() .withHttpConfig(httpConfig) .withCredential(auth) .withEndpoint(endpoint) .build();
} /**
* 取消截图任务 * @param args */
public static void main(String[] args) {
DeleteThumbnailsTaskRequest req = new DeleteThumbnailsTaskRequest().withTaskId("2210744");
try {
DeleteThumbnailsTaskResponse rsp = initMpcClient().deleteThumbnailsTask(req);
System.out.println("DeleteThumbnailsTaskResponse=" + JsonUtils.toJSON(rsp));
} catch (ClientRequestException | ConnectionException | RequestTimeoutException | ServiceException e) { System.out.println(e);
} } }
2.3.3 查询截图任务
说明
● 查询截图任务,支持根据任务ID查询、任务状态、时间段、分页查询和复合查 询。
● 在查询到的结果集中,如果不提供页码数page和显示条数size并且数据大于10条 时,会默认显示10条数据并进行分页处理。
根据任务 ID 查询
//根据任务ID查询,最多支持10个任务ID ListThumbnailsTaskRequest req = new
ListThumbnailsTaskRequest().withTaskId(Collections.singletonList("2210744"));
// 发送查询截图任务请求给媒体处理服务
ListThumbnailsTaskResponse rsp = initMpcClient().listThumbnailsTask(req);
// 返回消息
System.out.println("rsp=" + JsonUtils.toJSON(rsp));
分页查询
//分页查询
ListThumbnailsTaskRequest req = new ListThumbnailsTaskRequest().withPage(1).withSize(4);
//发送查询截图任务请求给媒体处理服务
ListThumbnailsTaskResponse rsp = initMpcClient().listThumbnailsTask(req);
//返回消息
System.out.println("rsp=" + JsonUtils.toJSON(rsp));
根据时间段查询
ListThumbnailsTaskRequest req = new
ListThumbnailsTaskRequest().withStartTime("20201220131400").withEndTime("20201220131400");
// 发送查询截图任务请求给媒体处理服务
ListThumbnailsTaskResponse rsp = initMpcClient().listThumbnailsTask(req);
// 返回消息
System.out.println("rsp=" + JsonUtils.toJSON(rsp));
根据任务状态查询
// 根据任务的状态查询
ListThumbnailsTaskRequest req = new
ListThumbnailsTaskRequest().withStatus(ListThumbnailsTaskRequest.StatusEnum.FAILED);
// 发送查询截图任务请求给媒体处理服务
ListThumbnailsTaskResponse rsp = initMpcClient().listThumbnailsTask(req);
// 返回消息
System.out.println("rsp=" + JsonUtils.toJSON(rsp));
复合查询
//复合查询
ListThumbnailsTaskRequest req = new ListThumbnailsTaskRequest().withPage(1).withSize(4) .withStartTime("20201220131400")
.withEndTime("20201220131400")
.withStatus(ListThumbnailsTaskRequest.StatusEnum.FAILED);
完整代码
import com.huaweicloud.sdk.core.auth.BasicCredentials;
import com.huaweicloud.sdk.core.exception.ClientRequestException;
import com.huaweicloud.sdk.core.exception.ConnectionException;
import com.huaweicloud.sdk.core.exception.RequestTimeoutException;
import com.huaweicloud.sdk.core.http.HttpConfig;
import com.huaweicloud.sdk.core.utils.JsonUtils;
import com.huaweicloud.sdk.mpc.v1.MpcClient;
import com.huaweicloud.sdk.mpc.v1.model.ListThumbnailsTaskRequest;
import com.huaweicloud.sdk.mpc.v1.model.ListThumbnailsTaskResponse;
import com.obs.services.internal.ServiceException;
public class TestListThumbnail { /**
* 初始化 MpcClient * @return */
public static MpcClient initMpcClient() { HttpConfig httpConfig =
HttpConfig.getDefaultHttpConfig().withIgnoreSSLVerification(true).withTimeout(3);
//http代理设置,请根据实际情况设置
//httpConfig.withProxyHost("xxxxxx").withProxyPort(xxxxxx).withProxyUsername("xxxxxx").
// withProxyPassword("xxxxxx");
//根据实际填写ak,sk,华为云控制台账号名下“我的凭证”>访问密钥上创建和查看您的AK/SK String ak = "xxxxxx";
String sk = "xxxxxx";
//根据实际填写项目ID,华为云控制台账号名下“我的凭证”>API凭证下查看您的项目ID String projectId = "xxxxxx";
//根据实际填写所需endpoint,这里以华东2为例
String endpoint = "https://mpc.cn-east-2.myhuaweicloud.com";
BasicCredentials auth = new BasicCredentials().withAk(ak).withSk(sk).withProjectId(projectId);
return MpcClient.newBuilder() .withHttpConfig(httpConfig) .withCredential(auth) .withEndpoint(endpoint) .build();
} /**
* 查询截图任务 * @param args */
public static void main(String[] args) {
ListThumbnailsTaskRequest req = new ListThumbnailsTaskRequest().withPage(1).withSize(4) .withStartTime("20201220131400")
.withEndTime("20201220131400")
.withStatus(ListThumbnailsTaskRequest.StatusEnum.FAILED);
try {
ListThumbnailsTaskResponse rsp = initMpcClient().listThumbnailsTask(req);
System.out.println("rsp=" + JsonUtils.toJSON(rsp));
} catch (ClientRequestException | ConnectionException | RequestTimeoutException | ServiceException e) { System.out.println(e);
} } }
2.4 独立加密
2.4.1 新建独立加密任务
您可以通过创建MpcClient实例并设置相关参数新建独立加密任务。
前提条件
● 已购买对象存储服务,并参考上传媒体文件在媒体处理服务同区域(如华北-北京 四)上传媒体处理的源视频。
● 已参考获取云资源授权,完成媒体处理服务授权。
核心代码
1. 创建独立加密请求。
独立加密请求包括输入文件、输出文件和加密参数设置。
//设置输入视频地址和输出路径
ObsObjInfo input = new ObsObjInfo().withBucket("mpc-east-2").withLocation("cn- east-2").withObject("input/hls/index.m3u8");
ObsObjInfo output = new ObsObjInfo().withBucket("mpc-east-2").withLocation("cn- east-2").withObject("output");
//创建请求
CreateEncryptTaskRequest req = new CreateEncryptTaskRequest()
.withBody(new CreateEncryptReq().withInput(input).withOutput(output) .withEncryption(new Encryption().withHlsEncrypt(new HlsEncrypt() // 设置加密算法
.withAlgorithm("AES-128-CBC") // 密钥获取服务的地址
.withUrl("www.xxxxx.com") // 设置初始向量
.withIv("xxxxxxxxxxxxxxxxxxx") // 设置初始向量
.withKey("xxxxxxxxxxxxxxxxxxxxxx"))));
//向转码服务发送请求
CreateEncryptTaskResponse rsp = initMpcClient().createEncryptTask(req);
//打印返回消息
System.out.println("CreateEncryptTaskResponse=" + JsonUtils.toJSON(rsp));
完整代码
import com.huaweicloud.sdk.core.auth.BasicCredentials;
import com.huaweicloud.sdk.core.exception.ClientRequestException;
import com.huaweicloud.sdk.core.exception.ConnectionException;
import com.huaweicloud.sdk.core.exception.RequestTimeoutException;
import com.huaweicloud.sdk.core.http.HttpConfig;
import com.huaweicloud.sdk.core.utils.JsonUtils;
import com.huaweicloud.sdk.mpc.v1.MpcClient;
import com.huaweicloud.sdk.mpc.v1.model.CreateEncryptReq;
import com.huaweicloud.sdk.mpc.v1.model.CreateEncryptTaskRequest;
import com.huaweicloud.sdk.mpc.v1.model.CreateEncryptTaskResponse;
import com.huaweicloud.sdk.mpc.v1.model.Encryption;
import com.huaweicloud.sdk.mpc.v1.model.HlsEncrypt;
import com.huaweicloud.sdk.mpc.v1.model.ObsObjInfo;
import com.obs.services.internal.ServiceException;
public class TestEncrypt { /**
* 初始化 MpcClient * @return */
public static MpcClient initMpcClient() { HttpConfig httpConfig =
HttpConfig.getDefaultHttpConfig().withIgnoreSSLVerification(true).withTimeout(3);
//http代理设置,请根据实际情况设置
//httpConfig.withProxyHost("xxxxxx").withProxyPort(xxxxxx).withProxyUsername("xxxxxx").
// withProxyPassword("xxxxxx");
//根据实际填写ak,sk,华为云控制台账号名下“我的凭证”>访问密钥上创建和查看您的AK/SK String ak = "xxxxxx";
String sk = "xxxxxx";
//根据实际填写项目ID,华为云控制台账号名下“我的凭证”>API凭证下查看您的项目ID String projectId = "xxxxxx";
//根据实际填写所需endpoint,这里以华东2为例
String endpoint = "https://mpc.cn-east-2.myhuaweicloud.com";
BasicCredentials auth = new BasicCredentials().withAk(ak).withSk(sk).withProjectId(projectId);
return MpcClient.newBuilder() .withHttpConfig(httpConfig) .withCredential(auth) .withEndpoint(endpoint) .build();
}
/**
* 创建加密任务 * @param args */
public static void main(String[] args) { //设置输入视频地址和输出路径
ObsObjInfo input = new ObsObjInfo().withBucket("mpc-east-2").withLocation("cn- east-2").withObject("input/hls/index.m3u8");
ObsObjInfo output = new ObsObjInfo().withBucket("mpc-east-2").withLocation("cn- east-2").withObject("output");
//创建请求
CreateEncryptTaskRequest req = new CreateEncryptTaskRequest()
.withBody(new CreateEncryptReq().withInput(input).withOutput(output) .withEncryption(new Encryption().withHlsEncrypt(new HlsEncrypt() // 设置加密算法
.withAlgorithm("AES-128-CBC") // 密钥获取服务的地址
.withUrl("www.xxxxx.com") // 设置初始向量
.withIv("xxxxxxxxxxxxxxxxxxx") // 设置初始向量
.withKey("xxxxxxxxxxxxxxxxxxxxxx"))));
//发送加密请求 try {
CreateEncryptTaskResponse rsp = initMpcClient().createEncryptTask(req);
System.out.println("CreateEncryptTaskResponse=" + JsonUtils.toJSON(rsp));
} catch (ClientRequestException | ConnectionException | RequestTimeoutException | ServiceException e) { System.out.println(e);
} } }
2.4.2 取消独立加密任务
说明
● 取消任务需要用户提供所要取消任务的taskId。
● 待取消的taskId只能是正在任务队列中排队的任务。已开始或已完成的独立加密任 务不能删除。
核心代码
// 向MPC发送取消独立加密任务的请求
DeleteEncryptTaskRequest req = new DeleteEncryptTaskRequest().withTaskId("3223179");
DeleteEncryptTaskResponse rsp = initMpcClient().deleteEncryptTask(req);
// 打印返回消息
System.out.println("rsp=" + JsonUtils.toJSON(rsp));
完整代码
import com.huaweicloud.sdk.core.auth.BasicCredentials;
import com.huaweicloud.sdk.core.exception.ClientRequestException;
import com.huaweicloud.sdk.core.exception.ConnectionException;
import com.huaweicloud.sdk.core.exception.RequestTimeoutException;
import com.huaweicloud.sdk.core.http.HttpConfig;
import com.huaweicloud.sdk.core.utils.JsonUtils;
import com.huaweicloud.sdk.mpc.v1.MpcClient;
import com.huaweicloud.sdk.mpc.v1.model.DeleteEncryptTaskRequest;
import com.huaweicloud.sdk.mpc.v1.model.DeleteEncryptTaskResponse;
import com.obs.services.internal.ServiceException;
public class TestDeleteEncrypt { /**
* 初始化 MpcClient
* @return */
public static MpcClient initMpcClient() { HttpConfig httpConfig =
HttpConfig.getDefaultHttpConfig().withIgnoreSSLVerification(true).withTimeout(3);
//http代理设置,请根据实际情况设置
//httpConfig.withProxyHost("xxxxxx").withProxyPort(xxxxxx).withProxyUsername("xxxxxx").
// withProxyPassword("xxxxxx");
//根据实际填写ak,sk,华为云控制台账号名下“我的凭证”>访问密钥上创建和查看您的AK/SK String ak = "xxxxxx";
String sk = "xxxxxx";
//根据实际填写项目ID,华为云控制台账号名下“我的凭证”>API凭证下查看您的项目ID String projectId = "xxxxxx";
//根据实际填写所需endpoint,这里以华东2为例
String endpoint = "https://mpc.cn-east-2.myhuaweicloud.com";
BasicCredentials auth = new BasicCredentials().withAk(ak).withSk(sk).withProjectId(projectId);
return MpcClient.newBuilder() .withHttpConfig(httpConfig) .withCredential(auth) .withEndpoint(endpoint) .build();
} /**
* 取消排队中的加密任务 * @param args */
public static void main(String[] args) {
DeleteEncryptTaskRequest req = new DeleteEncryptTaskRequest().withTaskId("3223179");
try {
DeleteEncryptTaskResponse rsp = initMpcClient().deleteEncryptTask(req);
System.out.println("rsp=" + JsonUtils.toJSON(rsp));
System.out.println(rsp.toString());
} catch (ClientRequestException | ConnectionException | RequestTimeoutException | ServiceException e) { System.out.println(e);
} } }
2.4.3 查询独立加密任务
说明
● 查询独立加密任务,支持根据任务ID查询、任务状态、时间段、分页查询和复合 查询。
● 在查询到的结果集中,如果不提供页码数page和显示条数size并且数据大于10条 时,会默认显示10条数据并进行分页处理。
根据任务 ID 查询
//根据任务ID查询,最多支持10个任务ID ListEncryptTaskRequest req = new
ListEncryptTaskRequest().withTaskId(Collections.singletonList("3223179"));
// 向MPC发送查询独立加密任务的请求
ListEncryptTaskResponse rsp = initMpcClient().listEncryptTask(req);
// 打印返回消息
System.out.println(rsp.toString());
分页查询
// 分页查询
ListEncryptTaskRequest req = new ListEncryptTaskRequest().withPage(1).withSize(4);
// 向MPC发送查询独立加密任务的请求
ListEncryptTaskResponse rsp = initMpcClient().listEncryptTask(req);
// 打印返回消息
System.out.println(rsp.toString());
根据时间段查询
// 根据时间段查询
ListEncryptTaskRequest req = new
ListEncryptTaskRequest().withStartTime("20201220131400").withEndTime("20201221131400");
// 向MPC发送查询独立加密任务的请求
ListEncryptTaskResponse rsp = initMpcClient().listEncryptTask(req);
// 打印返回消息
System.out.println(rsp.toString());
根据任务状态查询
// 根据任务的状态查询
ListEncryptTaskRequest req = new
ListEncryptTaskRequest().withStatus(ListEncryptTaskRequest.StatusEnum.FAILED);
// 向MPC发送查询独立加密任务的请求
ListEncryptTaskResponse rsp = initMpcClient().listEncryptTask(req);
// 打印返回消息
System.out.println(rsp.toString());
复合查询
// 复合查询
ListEncryptTaskRequest req = new ListEncryptTaskRequest().withPage(1).withSize(4) .withStartTime("20201220131400").withEndTime("20201221131400") .withStatus(ListEncryptTaskRequest.StatusEnum.FAILED);
// 向MPC发送查询独立加密任务的请求
ListEncryptTaskResponse rsp = initMpcClient().listEncryptTask(req);
// 打印返回消息
System.out.println(rsp.toString());
完整代码
import com.huaweicloud.sdk.core.auth.BasicCredentials;
import com.huaweicloud.sdk.core.exception.ClientRequestException;
import com.huaweicloud.sdk.core.exception.ConnectionException;
import com.huaweicloud.sdk.core.exception.RequestTimeoutException;
import com.huaweicloud.sdk.core.http.HttpConfig;
import com.huaweicloud.sdk.mpc.v1.MpcClient;
import com.huaweicloud.sdk.mpc.v1.model.ListEncryptTaskRequest;
import com.huaweicloud.sdk.mpc.v1.model.ListEncryptTaskResponse;
import com.obs.services.internal.ServiceException;
public class TestListEncrypt { /**
* 初始化 MpcClient * @return */
public static MpcClient initMpcClient() { HttpConfig httpConfig =
HttpConfig.getDefaultHttpConfig().withIgnoreSSLVerification(true).withTimeout(3);
//http代理设置,请根据实际情况设置
//httpConfig.withProxyHost("xxxxxx").withProxyPort(xxxxxx).withProxyUsername("xxxxxx").
// withProxyPassword("xxxxxx");
//根据实际填写ak,sk,华为云控制台账号名下“我的凭证”>访问密钥上创建和查看您的AK/SK String ak = "xxxxxx";
String sk = "xxxxxx";
//根据实际填写项目ID,华为云控制台账号名下“我的凭证”>API凭证下查看您的项目ID String projectId = "xxxxxx";
//根据实际填写所需endpoint,这里以华东2为例
String endpoint = "https://mpc.cn-east-2.myhuaweicloud.com";
BasicCredentials auth = new BasicCredentials().withAk(ak).withSk(sk).withProjectId(projectId);
return MpcClient.newBuilder() .withHttpConfig(httpConfig) .withCredential(auth)
.withEndpoint(endpoint) .build();
} /**
* 查询加密任务 * @param args */
public static void main(String[] args) {
ListEncryptTaskRequest req = new ListEncryptTaskRequest().withPage(1).withSize(4) .withStartTime("20201220131400").withEndTime("20201221131400") .withStatus(ListEncryptTaskRequest.StatusEnum.FAILED);
try {
ListEncryptTaskResponse rsp = initMpcClient().listEncryptTask(req);
System.out.println(rsp.toString());
} catch (ClientRequestException | ConnectionException | RequestTimeoutException | ServiceException e) { System.out.println(e);
} } }
2.5 动图管理
2.5.1 新增动图任务
您可以通过创建MpcClient实例并设置相关参数新建动图任务,动图任务用于将视频转 换为动态图。
前提条件
● 已购买对象存储服务,并参考上传媒体文件在媒体处理服务同区域(如华北-北京 四)上传媒体处理的源视频。
● 已参考获取云资源授权,完成媒体处理服务授权。
核心代码
1. 创建动图任务。
动图任务需要设置输入视频文件、输出动图路径、动图帧率、动图宽高等参数。
//设置输入视频地址和输出路径
ObsObjInfo input = new ObsObjInfo().withBucket("mpc-east-2").withLocation("cn- east-2").withObject("ok.mp4");
ObsObjInfo output = new ObsObjInfo().withBucket("mpc-east-2").withLocation("cn- east-2").withObject("output");
//创建动图请求
CreateAnimatedGraphicsTaskRequest req = new CreateAnimatedGraphicsTaskRequest() .withBody(new CreateAnimatedGraphicsTaskReq().withInput(input).withOutput(output) .withOutputParam(new AnimatedGraphicsOutputParam()
//设置动图格式
.withFormat(AnimatedGraphicsOutputParam.FormatEnum.GIF) //设置动图帧率
.withFrameRate(15) //设置起始时间,单位毫秒 .withStart(0)
//设置结束时间,单位毫秒,最大时间间隔60s .withEnd(3_000)));
// 发起请求
CreateAnimatedGraphicsTaskResponse rsp = initMpcClient().createAnimatedGraphicsTask(req);
// 打印结果
System.out.println("CreateAnimatedGraphicsTaskResponse=" + JsonUtils.toJSON(rsp));
完整代码
import com.huaweicloud.sdk.core.auth.BasicCredentials;
import com.huaweicloud.sdk.core.exception.ClientRequestException;
import com.huaweicloud.sdk.core.exception.ConnectionException;
import com.huaweicloud.sdk.core.exception.RequestTimeoutException;
import com.huaweicloud.sdk.core.http.HttpConfig;
import com.huaweicloud.sdk.core.utils.JsonUtils;
import com.huaweicloud.sdk.mpc.v1.MpcClient;
import com.huaweicloud.sdk.mpc.v1.model.AnimatedGraphicsOutputParam;
import com.huaweicloud.sdk.mpc.v1.model.CreateAnimatedGraphicsTaskReq;
import com.huaweicloud.sdk.mpc.v1.model.CreateAnimatedGraphicsTaskRequest;
import com.huaweicloud.sdk.mpc.v1.model.CreateAnimatedGraphicsTaskResponse;
import com.huaweicloud.sdk.mpc.v1.model.ObsObjInfo;
import com.obs.services.internal.ServiceException;
public class TestAnimation { /**
* 初始化 MpcClient * @return */
public static MpcClient initMpcClient() { HttpConfig httpConfig =
HttpConfig.getDefaultHttpConfig().withIgnoreSSLVerification(true).withTimeout(3);
//http代理设置,请根据实际情况设置
//httpConfig.withProxyHost("xxxxxx").withProxyPort(xxxxxx).withProxyUsername("xxxxxx").
// withProxyPassword("xxxxxx");
//根据实际填写ak,sk,华为云控制台账号名下“我的凭证”>访问密钥上创建和查看您的AK/SK String ak = "xxxxxx";
String sk = "xxxxxx";
//根据实际填写项目ID,华为云控制台账号名下“我的凭证”>API凭证下查看您的项目ID String projectId = "xxxxxx";
//根据实际填写所需endpoint,这里以华东2为例
String endpoint = "https://mpc.cn-east-2.myhuaweicloud.com";
BasicCredentials auth = new BasicCredentials().withAk(ak).withSk(sk).withProjectId(projectId);
return MpcClient.newBuilder() .withHttpConfig(httpConfig) .withCredential(auth) .withEndpoint(endpoint) .build();
} /**
* 创建动图任务 * @param args */
public static void main(String[] args) { //设置输入视频地址和输出路径
ObsObjInfo input = new ObsObjInfo().withBucket("mpc-east-2").withLocation("cn- east-2").withObject("ok.mp4");
ObsObjInfo output = new ObsObjInfo().withBucket("mpc-east-2").withLocation("cn- east-2").withObject("output");
//创建动图请求
CreateAnimatedGraphicsTaskRequest req = new CreateAnimatedGraphicsTaskRequest() .withBody(new CreateAnimatedGraphicsTaskReq().withInput(input).withOutput(output) .withOutputParam(new AnimatedGraphicsOutputParam()
//设置动图格式
.withFormat(AnimatedGraphicsOutputParam.FormatEnum.GIF) //设置动图帧率
.withFrameRate(15) //设置起始时间,单位毫秒 .withStart(0)
//设置结束时间,单位毫秒,最大时间间隔60s .withEnd(3_000)));
try {
CreateAnimatedGraphicsTaskResponse rsp = initMpcClient().createAnimatedGraphicsTask(req);
System.out.println("CreateAnimatedGraphicsTaskResponse=" + JsonUtils.toJSON(rsp));
} catch (ClientRequestException | ConnectionException | RequestTimeoutException | ServiceException e) { System.out.println(e);
} } }
2.5.2 查询动图任务
说明
● 查询动图任务,支持根据任务ID查询、任务状态、时间段、分页查询和复合查 询。
● 在查询到的结果集中,如果不提供页码数page和显示条数size并且数据大于10条 时,会默认显示10条数据并进行分页处理。
根据任务 ID 查询
//根据任务ID查询,最多支持10个任务ID ListAnimatedGraphicsTaskRequest req = new
ListAnimatedGraphicsTaskRequest().withTaskId(Collections.singletonList("3198527"));
// 发送查询动图任务请求给媒体处理服务
ListAnimatedGraphicsTaskResponse rsp = initMpcClient().listAnimatedGraphicsTask(req);
// 打印返回消息
System.out.println("rsp=" + JsonUtils.toJSON(rsp));
分页查询
// 分页查询
ListAnimatedGraphicsTaskRequest req = new ListAnimatedGraphicsTaskRequest().withPage(1).withSize(10);
// 发送查询动图任务请求给媒体处理服务
ListAnimatedGraphicsTaskResponse rsp = initMpcClient().listAnimatedGraphicsTask(req);
// 打印返回消息
System.out.println("rsp=" + JsonUtils.toJSON(rsp));
根据时间段查询
// 根据时间段查询
ListAnimatedGraphicsTaskRequest req = new
ListAnimatedGraphicsTaskRequest().withStartTime("20201220131400").withEndTime("20201221131400");
// 发送查询动图任务请求给媒体处理服务
ListAnimatedGraphicsTaskResponse rsp = initMpcClient().listAnimatedGraphicsTask(req);
// 打印返回消息
System.out.println("rsp=" + JsonUtils.toJSON(rsp));
根据任务状态查询
// 根据任务的状态查询
ListAnimatedGraphicsTaskRequest req = new
ListAnimatedGraphicsTaskRequest().withStatus(ListAnimatedGraphicsTaskRequest.StatusEnum.FAILED);
// 发送查询动图任务请求给媒体处理服务
ListAnimatedGraphicsTaskResponse rsp = initMpcClient().listAnimatedGraphicsTask(req);
// 打印返回消息
System.out.println("rsp=" + JsonUtils.toJSON(rsp));
复合查询
// 复合查询
ListAnimatedGraphicsTaskRequest req = new ListAnimatedGraphicsTaskRequest().withPage(0).withSize(10) .withStartTime("20201220131400").withEndTime("20201221131400")
.withStatus(ListAnimatedGraphicsTaskRequest.StatusEnum.FAILED);
// 发送查询动图任务请求给媒体处理服务
ListAnimatedGraphicsTaskResponse rsp = initMpcClient().listAnimatedGraphicsTask(req);
// 打印返回消息
System.out.println("rsp=" + JsonUtils.toJSON(rsp));
完整代码
package com.huawei.mpc;
import com.huaweicloud.sdk.core.auth.BasicCredentials;
import com.huaweicloud.sdk.core.exception.ClientRequestException;
import com.huaweicloud.sdk.core.exception.ConnectionException;
import com.huaweicloud.sdk.core.exception.RequestTimeoutException;
import com.huaweicloud.sdk.core.http.HttpConfig;
import com.huaweicloud.sdk.core.utils.JsonUtils;
import com.huaweicloud.sdk.mpc.v1.MpcClient;
import com.huaweicloud.sdk.mpc.v1.model.ListAnimatedGraphicsTaskRequest;
import com.huaweicloud.sdk.mpc.v1.model.ListAnimatedGraphicsTaskResponse;
import com.obs.services.internal.ServiceException;
import java.util.Collections;
public class TestListAnimation { /**
* 初始化 MpcClient * @return */
public static MpcClient initMpcClient() { HttpConfig httpConfig =
HttpConfig.getDefaultHttpConfig().withIgnoreSSLVerification(true).withTimeout(3);
//http代理设置,请根据实际情况设置
//httpConfig.withProxyHost("xxxxxx").withProxyPort(xxxxxx).withProxyUsername("xxxxxx").
// withProxyPassword("xxxxxx");
//根据实际填写ak,sk,华为云控制台账号名下“我的凭证”>访问密钥上创建和查看您的AK/SK String ak = "xxxxxx";
String sk = "xxxxxx";
//根据实际填写项目ID,华为云控制台账号名下“我的凭证”>API凭证下查看您的项目ID String projectId = "xxxxxx";
//根据实际填写所需endpoint,这里以华东2为例
String endpoint = "https://mpc.cn-east-2.myhuaweicloud.com";
BasicCredentials auth = new BasicCredentials().withAk(ak).withSk(sk).withProjectId(projectId);
return MpcClient.newBuilder() .withHttpConfig(httpConfig) .withCredential(auth) .withEndpoint(endpoint) .build();
} /**
* 查询动图任务 * @param args */
public static void main(String[] args) {
//按TaskId查询任务,TaskId是动图图请求响应中返回的任务ID ListAnimatedGraphicsTaskRequest req = new
ListAnimatedGraphicsTaskRequest().withTaskId(Collections.singletonList("3198527"));
try {
ListAnimatedGraphicsTaskResponse rsp = initMpcClient().listAnimatedGraphicsTask(req);
System.out.println("rsp=" + JsonUtils.toJSON(rsp));
} catch (ClientRequestException | ConnectionException | RequestTimeoutException | ServiceException e) { System.out.println(e);
} } }
2.5.3 取消动图任务
说明
● 取消任务需要用户提供所要取消任务的taskId。
● 待取消的taskId只能是正在任务队列中排队的任务。已开始或已完成的动图任务不 能删除。