生成播放列表

最近更新时间:2025-06-30 10:53:22

我的收藏

功能描述

边转边播功能,可以根据用户请求实时生成转码后的内容,并将生成的文件转存至对象存储 COS,在下次访问视频无需再进行转码。与异步转码任务相比,边转边播的处理耗时极短,可以在分发视频的同时完成转码,实现边播放边转码的效果。边转边播支持两种使用方式:通过 URL 参数使用通过播放列表使用。本文将介绍如何通过播放列表使用边转边播。
说明:
边转边播生成的内容为基于 HLS 的视频,HLS 是一种基于 HTTP 的流媒体协议,通过 m3u8 播放列表文件和 ts 视频分片两部分内容,实现 “边下载边播放”,适合需要兼容多设备的视频播放场景。
通过播放列表使用边转边播主要分三步,架构示意图如下所示:
第一步:生成 m3u8播放列表,本文详细介绍了如何生成 m3u8播放列表;
第二步:通过 获取播放列表下载权限接口,为播放列表进行签名授权并生成带鉴权信息的播放列表;
第三步:使用 HLS 播放器进行视频的播放,播放视频时会实时对视频进行转码,可以直接将第二步的链接粘贴到支持 HLS 的播放器中播放。

图1 通过播放列表使用边转边播的架构示意图



授权说明

通过子账号提交文件解压任务时,需要在 授权策略 的 action 中添加 ci:CreateMediaJobs,数据万象支持的所有操作接口请参见 action
同时,还需要授予 cam:PassRole 权限用于传递角色,便于异步处理接口能够通过 CAM 的“角色”进行 COS 的资源读写操作。

服务开通

使用该功能需 将存储桶绑定数据万象
使用该功能需提前通过 控制台接口 开通媒体处理服务。

使用限制

使用该接口时,需开启白名单,可 提交工单 联系我们开启。
不支持处理 COS 上的归档存储类型和深度归档存储类型的视频,如果需要处理此类型视频,请先 恢复归档文件

费用说明

生成播放列表不会产生实际的转码及费用,只有在进行播放时,才会实时转码并进行计费。边转边播与普通音视频转码的计费方式和价格相同,按实际转码时长进行计费,输出的视频分辨率不同对应的价格也不同,详情请参见媒体处理费用

请求

请求示例

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
说明:
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>192</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
Watermark
Request.Operation
水印模板参数,同创建水印模板接口中的 Request.Watermark,最多传2个
Container
WatermarkTemplateId
Request.Operation
水印模板 ID,可以传多个水印模板 ID,最多传2个。
String数组
说明:
对于水印参数,可以使用 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, 2560], 如果只设置 Width,Height 按照视频原始比例计算,必须为8的倍数,默认原视频宽
String
Height
Request.Operation.Transcode.Video
视频高,单位px ,范围[256, 2560], 如果只设置 Width 按照视频原始比例计算,必须为8的倍数,默认原视频宽
String
Bitrate
Request.Operation.Transcode.Video
视频输出码率,单位Kbps,范围[128, 10000],auto 表示自适应码率,默认原视频码率
String
Fps
Request.Operation.Transcode.Video
帧率,单位fps ,范围(0, 60],默认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
码率-质量控制因子
值范围:(15, 38]
如果设置了 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>192</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>

如果遇到产品相关问题,您可咨询 在线客服寻求帮助。

返回顶部