生成播放列表

最近更新时间:2024-11-15 21:50:14

我的收藏

功能描述

生成边转边播的播放列表能够分析视频文件产出 m3u8 文件。生成播放列表后即时播放,并根据播放进度实施按需转码,相比离线转码能极大减少了转码等待时间并大幅度降低了转码和存储开销。

授权说明

通过子账号使用时,需要授予ci:CreateMediaJobs权限,详情请参见 数据万象 action
子账号使用异步处理接口时,需要授予 cam:passrole 权限,异步处理接口会通过 CAM 的“角色”进行 COS 的资源读写操作,PassRole 权限用于传递角色, 具体请查看 访问管理-写操作-PassRole 接口

服务开通

使用该功能需提前开通数据万象,并绑定存储桶。详情请参见 绑定存储桶
使用该功能需提前通过控制台或接口开通媒体处理服务 。详情请参见 开通媒体处理服务

使用限制

使用该接口时,需开启白名单,可 提交工单 联系我们开启。

请求

请求示例

POST /jobs HTTP/1.1
Host: <BucketName-APPID>.ci.<Region>.myqcloud.com
Date: <GMT Date>
Authorization: <Auth String>
Content-Length: <length>
Content-Type: application/xml

<body>
说明:
Authorization: Auth String(详情请参见 请求签名 文档)。
通过子账号使用时,需要授予相关的权限,详情请参见 授权粒度详情 文档。

请求头

此接口仅使用公共请求头部,详情请参见 公共请求头部 文档。

请求体

该请求操作的实现需要有如下请求体。
<Request>
<Tag>GeneratePlayList</Tag>
<Input>
<Object>input/demo.mp4</Object>
</Input>
<Operation>
<Transcode>
<Container>
<Format>hls</Format>
<ClipConfig>
<Duration>5</Duration>
</ClipConfig>
</Container>
<Video>
<Codec>H.264</Codec>
<Width>1080</Width>
<Height>1920</Height>
<Bitrate>25</Bitrate>
</Video>
</Transcode>
<Output>
<Region>ap-chongqing</Region>
<Bucket>test-123456789</Bucket>
<Object>output/out.${ext}</Object>
</Output>
<UserData>This is my data.</UserData>
<JobLevel>0</JobLevel>
</Operation>
<CallBack>http://callback.demo.com</CallBack>
<CallBackFormat>JSON</CallBackFormat>
</Request>
具体的数据描述如下:
节点名称(关键字)
父节点
描述
类型
是否必选
Request
保存请求的容器
Container
Container 类型 Request 的具体数据描述如下:
节点名称(关键字)
父节点
描述
类型
是否必选
Tag
Request
创建任务的Tag:GeneratePlayList
String
Input
Request
待操作的文件信息
Container
Operation
Request
操作规则
Container
CallBack
Request
任务回调地址,优先级高于队列的回调地址。设置为 no 时,表示队列的回调地址不产生回调
String
CallBackFormat
Request
任务回调格式,JSON 或 XML,默认 XML,优先级高于队列的回调格式
String
QueueType
Request
任务所在的队列类型,限制为 SpeedTranscoding, 表示为开启倍速转码
String
CallBackType
Request
任务回调类型,Url 或 TDMQ,默认 Url,优先级高于队列的回调类型
String
CallBackMqConfig
Request
任务回调TDMQ配置,当 CallBackType 为 TDMQ 时必填。详情见 CallBackMqConfig
Container
Container 类型 Input 的具体数据描述如下:
节点名称(关键字)
父节点
描述
类型
是否必选
Object
Request.Input
文件路径
String
Container 类型 Operation 的具体数据描述如下:
节点名称(关键字)
父节点
描述
类型
是否必选
Transcode
Request.Operation
转码模板参数
Container
Output
Request.Operation
结果输出配置
Container
UserData
Request.Operation
透传用户信息, 可打印的 ASCII 码, 长度不超过1024
String
JobLevel
Request.Operation
任务优先级,级别限制:0 、1 、2 。级别越大任务优先级越高,默认为0
String
说明:
对于转码参数,优先使用优先使用 TemplateId,无 TemplateId 时使用 Transcode;对于水印参数,可以使用 WatermarkTemplateId 或 Watermark 设置,WatermarkTemplateId 优先级更高。
Container 类型
Transcode
的具体数据描述如下:
节点名称(关键字)
父节点
描述
类型
必选
Container
Request.Operation.Transcode
容器封装格式
Container
Video
Request.Operation.Transcode
视频信息
Container
TransConfig
Request.Operation.Transcode
转码配置
Container
Container 类型 Container 的具体数据描述如下:
节点名称(关键字)
父节点
描述
类型
是否必选
Format
Request.Operation.Transcode.Container
封装格式,取值范围 hls,默认 hls
String
ClipConfig
Request.Operation.Transcode.Container
分片配置
Container
Container 类型 ClipConfig 的具体数据描述如下:
节点名称(关键字)
父节点
描述
类型
是否必选
Duration
Request.Operation.Transcode.Container.ClipConfig
分片时长,单位秒,默认 5s,取值范围 [3, 8]
String
Container 类型 Video 的具体数据描述如下:
节点名称(关键字)
父节点
描述
类型
是否必选
Codec
Request.Operation.Transcode.Video
编码格式,默认 H.264 ,目前仅支持 H.264
String
Width
Request.Operation.Transcode.Video
视频宽,单位 px ,范围 [256, 4096], 如果只设置 Width,Height 按照视频原始比例计算,必须为 8 的倍数,默认原视频宽
String
Height
Request.Operation.Transcode.Video
视频高,单位 px ,范围 [256, 4096], 如果只设置 Width 按照视频原始比例计算,必须为 8 的倍数,默认原视频宽
String
Bitrate
Request.Operation.Transcode.Video
视频输出码率,单位 Kbps,范围 [100, 10000],auto 表示自适应码率,默认原视频码率
String
Fps
Request.Operation.Transcode.Video
帧率,单位 fps ,范围 (0, 30],默认 30
String
Gop
Request.Operation.Transcode.Video
关键帧间最大帧数,范围 [1, 100000],默认 2
String
Maxrate
Request.Operation.Transcode.Video
视频码率峰值,单位 Kbps ,范围 [10, 50000]
String
Crf
Request.Operation.Transcode.Video
码率-质量控制因子
值范围:(0, 51]
如果设置了 Crf,则 Bitrate 的设置失效
当 Bitrate 为空时,默认为 25
String
Container 类型 TransConfig 的具体数据描述如下:
节点名称(关键字)
父节点
描述
类型
是否必选
InitialClipNum
Request.Operation.Transcode.TransConfig
初始转码分片个数,默认 0
String
CosTag
Request.Operation.Transcode.TransConfig
输出m3u8文件对象的标签集合,最多可设置10个标签(例如,Key1=Value1&Key2=Value2)。 标签集合中的 Key 和 Value 必须先进行 URL 编码。
String
HlsEncrypt
Request.TransConfig
hls 加密配置
Container
Container 类型 HlsEncrypt 的具体数据描述如下:
节点名称(关键字)
父节点
描述
类型
是否必选
限制
IsHlsEncrypt
Request.TransConfig.HlsEncrypt
是否开启 HLS 加密,取值 true/false,默认 false
String
当 Container.Format 为 hls 时支持加密
Container 类型
Output
的具体数据描述如下:
节点名称(关键字)
父节点
描述
类型
是否必选
Region
Request.Operation.Output
存储桶的地域
String
Bucket
Request.Operation.Output
存储结果的存储桶
String
Object
Request.Operation.Output
输出结果的文件名
String
Request.Operation.Output.Object 支持的通配符如下:
通配符
含义
${ext}
封装格式
${jobid}
任务Id

响应

响应头

此接口仅返回公共响应头部,详情请参见 公共响应头部 文档。

响应体

该响应体返回为 application/xml 数据,包含完整节点数据的内容展示如下:
<Response>
<JobsDetail>
<Code>Success</Code>
<Message/>
<JobId>j8d121820f5e411ec926ef19d53ba9c6f</JobId>
<State>Submitted</State>
<Progress>0</Progress>
<CreationTime>2022-06-27T15:23:10+0800</CreationTime>
<StartTime>-</StartTime>
<EndTime>-</EndTime>
<QueueId>p2242ab62c7c94486915508540933a2c6</QueueId>
<Tag>GenratePlayList</Tag>
<Input>
<BucketId>test-123456789</BucketId>
<Object>input/demo.mp4</Object>
<Region>ap-chongqing</Region>
</Input>
<Operation>
<Transcode>
<Container>
<Format>hls</Format>
<ClipConfig>
<Duration>5</Duration>
</ClipConfig>
</Container>
<Video>
<Codec>H.264</Codec>
<Width>1080</Width>
<Height>1920</Height>
<Bitrate>25</Bitrate>
</Video>
</Transocde
<Output>
<Region>ap-chongqing</Region>
<Bucket>test-123456789</Bucket>
<Object>output/out.${ext}</Object>
</Output>
<UserData>This is my data.</UserData>
<JobLevel>0</JobLevel>
</Operation>
</JobsDetail>
</Response>
具体的数据内容如下:
节点名称(关键字)
父节点
描述
类型
Response
保存结果的容器
Container
Container 节点 Response 的内容:
节点名称(关键字)
父节点
描述
类型
JobsDetail
Response
任务的详细信息
Container
Container 节点 JobsDetail 的内容:
节点名称(关键字)
父节点
描述
类型
Code
Response.JobsDetail
错误码,只有 State 为 Failed 时有意义
String
Message
Response.JobsDetail
错误描述,只有 State 为 Failed 时有意义
String
JobId
Response.JobsDetail
新创建任务的 ID
String
State
Response.JobsDetail
任务的状态,为 Submitted、Running、Success、Failed、Pause、Cancel 其中一个
String
Progress
Response.JobsDetail
任务进度百分比,只有在 State为 Submitted、Running、Success、Pause 时有意义,范围为[0, 100]
String
CreationTime
Response.JobsDetail
任务的创建时间
String
StartTime
Response.JobsDetail
任务的开始时间
String
EndTime
Response.JobsDetail
任务的结束时间
String
QueueId
Response.JobsDetail
任务所属的队列 ID
String
Tag
Response.JobsDetail
新创建任务的 Tag:Transcode
String
Input
Response.JobsDetail
该任务的输入资源地址
Container
Operation
Response.JobsDetail
该任务的规则
Container
Container 节点 Input 的内容:
节点名称(关键字)
父节点
描述
类型
BucketId
Response.JobsDetail.Input
存储结果的存储桶
String
Object
Response.JobsDetail.Input
输出结果的文件名
String
Region
Response.JobsDetail.Input
存储桶的地域
String
Container 节点 Operation 的内容:
节点名称(关键字)
父节点
描述
类型
Transcode
Response.JobsDetail.Operation
同请求中的 Request.Operation.Transcode
Container
Output
Response.JobsDetail.Operation
同请求中的 Request.Operation.Output
Container
UserData
Response.JobsDetail.Operation
透传用户信息
String
JobLevel
Response.JobsDetail.Operation
任务优先级
String
TemplateName
Response.JobsDetail.Operation
任务的模板名称, 当 TemplateId 存在时返回
String
MediaInfo
Response.JobsDetail.Operation
输出文件的媒体信息,任务未完成时不返回
Container
MediaResult
Response.JobsDetail.Operation
输出文件的基本信息,任务未完成时不返回
Container
Container 节点 MediaInfo 的内容:同 GenerateMediaInfo 接口中的 Response.MediaInfo 节点。
Container 节点 MediaResult 的内容:详情见 MediaResult

错误码

该请求操作无特殊错误信息,常见的错误信息请参见 错误码 文档。

实际案例:使用转码处理参数

请求

POST /jobs HTTP/1.1
Authorization:q-sign-algorithm=sha1&q-ak=************************************&q-sign-time=1497530202;1497610202&q-key-time=1497530202;1497610202&q-header-list=&q-url-param-list=&q-signature=****************************************
Host: test-1234567890.ci.ap-chongqing.myqcloud.com
Content-Length: 166
Content-Type: application/xml

<Request>
<Tag>GeneratePlayList</Tag>
<Input>
<Object>input/demo.mp4</Object>
</Input>
<Operation>
<Transcode>
<Container>
<Format>hls</Format>
</Container>
<Video>
<Codec>H.264</Codec>
<Bitrate>1000</Bitrate>
<Width>1280</Width>
<Fps>30</Fps>
</Video>
</Transcode>
<Output>
<Region>ap-chongqing</Region>
<Bucket>test-123456789</Bucket>
<Object>output/out.${ext}</Object>
</Output>
<UserData>This is my data.</UserData>
<JobLevel>0</JobLevel>
</Operation>
<CallBack>http://callback.demo.com</CallBack>
<CallBackFormat>JSON</CallBackFormat>
</Request>

响应

HTTP/1.1 200 OK
Content-Type: application/xml
Content-Length: 230
Connection: keep-alive
Date: Mon, 28 Jun 2022 15:23:12 GMT
Server: tencent-ci
x-ci-request-id: NTk0MjdmODlfMjQ4OGY3XzYzYzhf****

<Response>
<JobsDetail>
<Code>Success</Code>
<Message/>
<JobId>j8d121820f5e411ec926ef19d53ba9c6f</JobId>
<State>Submitted</State>
<Progress>0</Progress>
<CreationTime>2022-06-27T15:23:10+0800</CreationTime>
<StartTime>-</StartTime>
<EndTime>-</EndTime>
<QueueId>p2242ab62c7c94486915508540933a2c6</QueueId>
<Tag>Transcode</Tag>
<Input>
<BucketId>test-123456789</BucketId>
<Object>input/demo.mp4</Object>
<Region>ap-chongqing</Region>
</Input>
<Operation>
<Transcode>
<Container>
<Format>hls</Format>
</Container>
<Video>
<Codec>H.264</Codec>
<Bitrate>1000</Bitrate>
<Width>1280</Width>
<Fps>30</Fps>
</Video>
</Transcode>
<Output>
<Region>ap-chongqing</Region>
<Bucket>test-123456789</Bucket>
<Object>output/out.${ext}</Object>
</Output>
<UserData>This is my data.</UserData>
<JobLevel>0</JobLevel>
</Operation>
</JobsDetail>
</Response>