云服务器内容精选

  • 使用限制 在使用 媒体处理 服务前,您需要了解本服务的使用限制信息。 表1 使用限制说明 限制项 说明 音视频存储 媒体处理服务无存储功能,需要将待转码的视频文件上传至OBS桶中,才能进行转码。 媒体处理服务和存储音视频文件的OBS桶必须在同一区域。示例:媒体处理服务和存储音视频文件的OBS桶都在“华北-北京四”区域。 视频编码格式 支持转码的视频编码格式:H.264、H.265、MPEG-2、MPEG-4、MJPEG、VP6/7/8/9、WMV1/2/3、ProRes 422等。若源文件的编码格式不在如上列出的格式中,则会出现转码失败。 音频编码格式 支持转码的音频编码格式:AAC、 AC3、EAC3、HE-AAC、MP2、MP3、PCM(s161e,s16be,s241e,s24be,dvd)、WMA等。若源文件的编码格式不在如上列出格式中,则会出现转码失败。 视频转封装格式 支持转封装的输入格式有:MP3、MP4、FLV、TS。 支持转封装的输出格式有:HLS、MP4。 API流控限制 目前转码的流控限制规则如下: 单租户接口流控:100次/分钟。 接口总体流控:1000次/分钟。
  • 核心代码 设置查询参数。 根据水印模板ID查询。 1 ListWatermarkTemplateRequest req = new ListWatermarkTemplateRequest().withTemplateId(Collections.singletonList(215728)); 根据页数查询。 12 根据page和size进行分页查询ListWatermarkTemplateRequest req = new ListWatermarkTemplateRequest().withPage(1).withSize(10); 发送查询请求,并显示返回消息。 1234 // 发送查询水印模板请求给媒体处理服务ListWatermarkTemplateResponse rsp = initMpcClient().listWatermarkTemplate(req);// 打印返回消息System.out.println("rsp=" + JsonUtils.toJSON(rsp));
  • 核心代码 设置转码模板的参数。 1 2 3 4 5 6 7 8 910111213141516171819202122232425262728293031323334353637 //创建转码模板请求CreateTransTemplateRequest req = new CreateTransTemplateRequest() .withBody(new TransTemplate().withTemplateName("test_123") //设置视频参数 .withVideo(new Video() // 视频编码格式,1表示H264,2表示H265 .withCodec(1) // 设置视频码率,单位:kbit/s .withBitrate(6000) // 编码档次,建议设为3 .withProfile(3) .withLevel(15) // 编码质量, 值越大质量越高,耗时越长 .withPreset(3) .withRefFramesCount(4) .withMaxIframesInterval(5) .withBframesCount(4) .withHeight(1080) .withWidth(1920)) //设置音频参数 .withAudio(new Audio() //设置音频编码格式,1:AAC,2:HEAAC1,3:HEAAC2,4:MP3 .withCodec(1) //采样率,1:AUDIO_SAMPLE_AUTO,2:22050Hz,3:32000Hz,4:44100Hz,5:48000Hz,6:96000Hz .withSampleRate(4) //音频码率,单位:kbit/s .withBitrate(128) //声道数 .withChannels(2)) //设置公共参数 .withCommon(new Common() .withDashInterval(5) .withHlsInterval(5) //高清低码开关 .withPvc(false) //封装类型,1:HLS,2:DASH,3:HLS+DASH,4:MP4,5:MP3,6:ADTS .withPackType(1))); 发送新建转码模板请求,并显示返回消息。 1234 //发送创建转码模板请求CreateTransTemplateResponse rsp = initMpcClient().createTransTemplate(req);//打印返回消息System.out.println("CreateTransTemplateResponse=" + JsonUtils.toJSON(rsp));
  • 代码示例 调用前请根据实际情况替换如下变量:"SDK_AK"、"SDK_SK"、{your endpoint string}以及{your project id}。 1 2 3 4 5 6 7 8 91011121314151617181920212223242526272829303132333435363738394041424344454647484950 package mainimport ( "fmt" "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic" "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/config" "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/httphandler" mpc "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/mpc/v1" "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/mpc/v1/model" "net/http")func RequestHandler(request http.Request) { fmt.Println(request)}func ResponseHandler(response http.Response) { fmt.Println(response)}ak := os.Getenv("SDK_AK")sk := os.Getenv("SDK_SK")projectId := os.Getenv("{your project id}")func main() { client := mpc.NewMpcClient( mpc.MpcClientBuilder(). WithEndpoint("{your endpoint}"). WithCredential( basic.NewCredentialsBuilder(). WithAk(ak). WithSk(sk). WithProjectId(projectId). Build()). WithHttpConfig(config.DefaultHttpConfig(). WithIgnoreSSLVerification(true). WithHttpHandler(httphandler. NewHttpHandler(). AddRequestHandler(RequestHandler). AddResponseHandler(ResponseHandler))). Build()) request := &model.ListTranscodingTaskRequest{ TaskId:&[]int64{1900293}, } response, err := client.ListTranscodingTask(request) if err == nil { fmt.Println("%+v\n",response) } else { fmt.Println(err) }}
  • 安装SDK 媒体转码Go SDK支持go 1.14及以上版本。执行go version检查当前Go的版本信息。 使用go get安装Go SDK,执行如下命令安装Go SDK库以及相关依赖库,具体的SDK版本号请参见SDK开发中心。 1234 # 安装Go库go get github.com/huaweicloud/huaweicloud-sdk-go-v3# 安装依赖go get github.com/json-iterator/go
  • 开始使用 导入依赖模块。 123456789 import ( "fmt" "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic" "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/config" "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/httphandler" "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/mpc/v1" "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/mpc/v1/model" "net/http") 配置客户端属性。 默认配置 12 # Use default configurationhttpConfig := config.DefaultHttpConfig() 代理配置(可选)。 123456789 username := os.Getenv("USER_NAME")password := os.Getenv("USER_PASSWARD")// 根据需要配置网络代理httpConfig.WithProxy(config.NewProxy(). WithSchema("http"). WithHost("proxy.huaweicloud.com"). WithPort(80). WithUsername(username). WithPassword(password)) SSL配置(可选) 12 // 根据需要配置是否跳过SSL证书校验httpConfig.WithIgnoreSSLVerification(true); 初始化认证信息。 支持两种方式认证,您可以根据实际情况进行选择。 使用永久AK/SK 首先需要获取永久AK和SK,以及projectId,您可以参考开发前准备获取。 12345678 ak := os.Getenv("SDK_AK")sk := os.Getenv("SDK_SK")projectId := os.Getenv("PROJECT_ID")auth := basic.NewCredentialsBuilder(). WithAk(ak). WithSk(sk). WithProjectId(projectId). Build() 使用临时AK/SK 首先需要获得临时AK、SK和SecurityToken,您可以通过token获取或者通过委托授权获取。 1 2 3 4 5 6 7 8 910 ak := os.Getenv("SDK_AK")sk := os.Getenv("SDK_SK")projectId := os.Getenv("PROJECT_ID")securityToken := os.Getenv("SECURITY_TOKEN")auth := basic.NewCredentialsBuilder(). WithAk(ak). WithSk(sk). WithProjectId(projectId). WithSecurityToken(securityToken). Build() 相关参数说明如下所示: ak:账号Access Key。 sk:账号Secret Access Key 。 projectId:云服务所在项目ID ,根据你想操作的项目所属区域选择对应的项目ID。 securityToken:采用临时AK/SK认证场景下的安全票据。 初始化客户端。 12345678 # 初始化MPC的客户端client := mpc.NewMpcClient( mpcMpcClientBuilder(). WithEndpoint(endpoint). // endpoint值如 "https://mpc.region01.myhuaweicloud.com" WithCredential(auth). WithHttpConfig(config.DefaultHttpConfig()). Build()) endpoint:MPC应用区域和各服务的终端节点,具体请参见地区和终端节点。 发送请求并查看响应。 1 2 3 4 5 6 7 8 910 // 初始化请求,以调用接口查询转码模板为例request := &model.ListTranscodingTaskRequest{ TaskId:&[]int64{1900293},}response, err := client.ListTranscodingTask(request)if err == nil { fmt.Printf("%+v\n",response)} else { fmt.Println(err)} 异常处理。 表1 异常处理 一级分类 一级分类说明 ServiceResponseError service response error url.Error connect endpoint error 1234567 # 异常处理response, err := client.ListTranscodingTask(request)if err == nil { fmt.Println(response)} else { fmt.Println(err)} 原始Http侦听器。 在某些场景下可能对业务发出的Http请求进行Debug,需要看到原始的Http请求和返回信息,SDK提供侦听器功能来获取原始的为加密的Http请求和返回信息。 原始信息打印仅在debug阶段使用,请不要在生产系统中将原始的Http头和Body信息打印到日志,这些信息并未加密且其中包含敏感数据;当Body体为二进制内容,即Content-Type标识为二进制时 body为"***",详细内容不输出。 1 2 3 4 5 6 7 8 91011121314151617181920212223242526 func RequestHandler(request http.Request) { fmt.Println(request)}func ResponseHandler(response http.Response) { fmt.Println(response)}ak := os.Getenv("SDK_AK")sk := os.Getenv("SDK_SK")projectId := os.Getenv("{your project id}")client := mpc.NewMpcClient( mpc.MpcClientBuilder(). WithEndpoint("{your endpoint}"). WithCredential( basic.NewCredentialsBuilder(). WithAk(ak). WithSk(sk). WithProjectId(projectId). Build()). WithHttpConfig(config.DefaultHttpConfig(). WithIgnoreSSLVerification(true). WithHttpHandler(httphandler. NewHttpHandler(). AddRequestHandler(RequestHandler). AddResponseHandler(ResponseHandler))).Build())
  • 代码示例 - 初始化MpcClient Endpoint调用前请您根据实际情况填写,并替换如下变量:"SDK_AK"、"SDK_SK"、{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 = System.getenv("SDK_AK"); String sk = System.getenv("SDK_SK"); String projectId = System.getenv("PROJECT_ID"); endpoint = "https://mpc.region01.myhuaweicloud.com"; auth = new BasicCredentials().withAk(ak).withSk(sk).withProjectId(projectId); mpcClient = MpcClient.newBuilder() .withHttpConfig(httpConfig) .withCredential(auth) .withEndpoint(endpoint) .build(); return mpcClient; }}
  • 核心代码 123 DeleteAnimatedGraphicsTaskRequest req = new DeleteAnimatedGraphicsTaskRequest().withTaskId("3198527");DeleteAnimatedGraphicsTaskResponse rsp = initMpcClient().deleteAnimatedGraphicsTask(req);System.out.println("rsp=" + JsonUtils.toJSON(rsp));
  • 核心代码 创建转封装任务。 1 2 3 4 5 6 7 8 9101112131415 //设置转封装输入视频地址和输出路径ObsObjInfo input = new ObsObjInfo().withBucket("mpc-east-2").withLocation("region01").withObject("ok.flv");ObsObjInfo output = new ObsObjInfo().withBucket("mpc-east-2").withLocation("region01").withObject("output");//创建转封装请求CreateRemuxTaskRequest req = new CreateRemuxTaskRequest() .withBody(new CreateRemuxTaskReq().withInput(input).withOutput(output) // 设置转封装参数 .withOutputParam(new RemuxOutputParam() //设置转封装格式 .withFormat("HLS") //转成hls切片间隔 .withSegmentDuration(5)));//发送转封装请求CreateRemuxTaskResponse rsp = initMpcClient().createRemuxTask(req);System.out.println(rsp.toString())
  • 核心代码 创建截图任务请求。 新建截图任务请求包括输入文件、输出文件的路径。具体参数请参考新建截图任务接口。 1 2 3 4 5 6 7 8 91011121314151617 //设置截图输入视频地址ObsObjInfo input = new ObsObjInfo().withBucket("mpc-east-2").withLocation("region01").withObject("ok.mp4");//设置截图输出路径ObsObjInfo output = new ObsObjInfo().withBucket("mpc-east-2").withLocation("region01").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。 发送创建截图任务请求并显示返回消息。 12 CreateThumbnailsTaskResponse rsp = initMpcClient().createThumbnailsTask(req);System.out.println("CreateThumbnailsTaskResponse=" + JsonUtils.toJSON(rsp));
  • 核心代码 创建动图任务。 动图任务需要设置输入视频文件、输出动图路径、动图帧率、动图宽高等参数。 1 2 3 4 5 6 7 8 91011121314151617181920 //设置输入视频地址和输出路径ObsObjInfo input = new ObsObjInfo().withBucket("mpc-east-2").withLocation("region01").withObject("ok.mp4");ObsObjInfo output = new ObsObjInfo().withBucket("mpc-east-2").withLocation("region01").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));
  • 根据任务ID查询 123456 //根据任务ID查询,最多支持10个任务IDListEncryptTaskRequest req = new ListEncryptTaskRequest().withTaskId(Collections.singletonList("3223179"));// 向MPC发送查询独立加密任务的请求ListEncryptTaskResponse rsp = initMpcClient().listEncryptTask(req); // 打印返回消息 System.out.println(rsp.toString());
  • 根据任务状态查询 123456 // 根据任务的状态查询ListEncryptTaskRequest req = new ListEncryptTaskRequest().withStatus(ListEncryptTaskRequest.StatusEnum.FAILED);// 向MPC发送查询独立加密任务的请求ListEncryptTaskResponse rsp = initMpcClient().listEncryptTask(req); // 打印返回消息 System.out.println(rsp.toString());
  • 分页查询 123456 // 分页查询ListEncryptTaskRequest req = new ListEncryptTaskRequest().withPage(1).withSize(4);// 向MPC发送查询独立加密任务的请求ListEncryptTaskResponse rsp = initMpcClient().listEncryptTask(req); // 打印返回消息 System.out.println(rsp.toString());
  • 根据时间段查询 123456 // 根据时间段查询ListEncryptTaskRequest req = new ListEncryptTaskRequest().withStartTime("20201220131400").withEndTime("20201221131400");// 向MPC发送查询独立加密任务的请求ListEncryptTaskResponse rsp = initMpcClient().listEncryptTask(req); // 打印返回消息 System.out.println(rsp.toString());