应用场景
适配多种终端设备
利用综合转码能力,适配 PC、TV 以及移动终端等多平台播放,带来更好的视觉体验。
支持多种网络环境
不同网络带宽的用户可通过智能融合媒体转码能力选择最佳码率,流畅播放。
视频快速审核
视频在生产、发布的各个环节都有送审、评审需求,在保证相同画质质量的前提下,可通过提高视频压缩率、调整视频码率等方式降低带宽消耗,压缩成本,提升效率。
提升短视频用户体验
支持 K 歌等场景下的画质增强,综合利用多种视频加清技术进行处理,提升画质,进一步提升歌曲点唱率。
架构原理
腾讯多媒体实验室自研的智慧融合媒体处理技术,支持对包括视频、音乐、文字、图片等融合媒体内容进行理解、分析、处理、编创。可满足广电、文旅、教育、电商、政企、泛互等各行业场景的融合媒体处理需求。
通过 Serverless 应用和腾讯多媒体实验室智慧融合媒体(Intelligent Convergence Media)深度整合,您可快速部署一个基于 COS + API + SCF + ICM 的开箱即用、灵活便捷的高效视频转码应用。通过 API 网关进行事件触发,将用户原始视频进行转码处理,转码完成后上传到用户对应的 COS 平台进行存储。具体流程如下图所示:
应用优势
存储多样化
视频源文件支持 URL 和 COS 两种类型,满足客户源视频存在于不同位置的存储需求,避免资源冗余和浪费。
开箱即用
提供转码应用,开箱即用,无需用户进行代码开发,零运维,弹性伸缩、按需付费。
算力可配置
可根据视频大小,选择不同规格的函数计算资源,可显示支持多核、大内存、高 IO 等定制化需求。
高压缩率
依托腾讯多媒体融合编解码引擎,可使同等画质下视频压缩率较传统压缩率平均提升50%。
应用资源
转码应用部署后,将为您创建以下资源:
云函数 :读取 COS 文件,使用腾讯多媒体融合编解码引擎转码后流式输出回 COS 中,并将转码过程的实时日志输出到 CLS。
API 网关:通过 API 网关触发器进行事件触发。
CLS 日志 :存储转码过程的实时日志。CLS 日志可能会产生一定计费,详情请参见 CLS 计费规则。
前提条件
1. 配置部署账号权限。参考 账号和权限配置。
2. 配置 运行角色 权限。
操作步骤
创建依赖资源
创建融合媒体转码应用
1. 登录 Serverless 控制台,选择左侧导航栏中的 Serverless 应用。
2. 在 “Serverless 应用” 页面,单击新建应用。
3. 在新建应用页面,根据页面相关信息提示进行配置。如下图所示:
创建方式:选择应用市场。
模糊搜索:输入“转码”进行搜索,选择快速部署一个融合媒体转码应用。
单击模板中的查看详情,即可在弹出的“模板详情”窗口中查看相关信息,支持下载操作。
4. 单击下一步,根据页面相关信息提示进行配置。如下图所示:
应用名:例如,“transcode-app”。
地域:例如:“成都”。
私有网络:按需选择。
文件系统:按需选择。
密钥 Secretld:按需选择。
密钥 SecreKey:按需选择。
链接地址:按需选择。
链接密码:按需选择。
数据库索引:按需选择。
5. 单击完成即可完成应用创建、函数创建以及 API 网关触发器创建。
如需根据业务场景修改函数配置,您可以在 Serverless 应用 > 应用名称 > 资源列表 中进行修改。如下图所示:
6. 在“函数详情”页面中选择日志查询,可以查看到打印出的转码日志信息。如下图所示:
7. 进入 COS 控制台,查询转码结果 。
接口使用说明
接口请求路径
1. 登录 Serverless 控制台,选择左侧导航栏中的Serverless 应用。
2. 在 Serverless 应用列表页,单击应用名称。
3. 在应用详情页,获取触发器访问入口。如下图所示:
POST
Content-Type: application/json
创建融合媒体转码任务接口
通过此接口可以发起转码任务,在接口参数中指定视频输入源、输出配置以及CFS等参数。
请求参数说明
参数名 | 类型 | 必选 | 描述 |
Action | String | 是 | 本产品固定 CreateTransCodeJob |
CreateTransCodeJobRequest | Object | 是 | 包含 Inputs、Outputs |
Inputs | Input[] | 是 | 转码文件的获取来源,目前应用仅处理数组的第一项 |
Outputs | Output[] | 是 | 转码文件的输出配置,目前应用仅处理数组的第一项 |
参数详情如下:
参数名 | 类型 | 必选 | 描述 |
Url | String | 否 | 待转码视频的 Url 地址,支持视频格式(mp4,avi,mkv,mov) |
Source | Object | 是 | 视频转码配置,用于转码 |
说明
Url 和 Source 必填一个,同时都有,优先使用 Url 。
Source 说明:
参数名 | 类型 | 必选 | 描述 |
Path | String | 否 | COS 路径,支持视频格式(mp4,avi,mkv,mov),例如 /video/1.mp4 |
CosConfig | CosConfig | 是 | COS 存储配置,用于存储转码后的文件 |
参数名 | 类型 | 必选 | 描述 |
Destination | String | 否 | COS 路径(不含文件名),例如/video |
VideoDescriptor | VideoDescriptor | 是 | 视频转码配置,用于转码 |
CosConfig | CosConfig | 是 | COS 存储配置,用于存储转码后的文件 |
参数名 | 类型 | 必选 | 描述 |
OutputName | String | 是 | 输出文件名,后缀代表封装格式(mp4,avi,mkv,mov),例如 test.mp4 |
Codec | String | 是 | 输出编码格式(H264,H265,VP9) |
Width | Int | 否 | 输出视频宽,正整数,取值范围[0,7680],默认0(输入视频宽度),必须为偶数 |
Height | Int | 否 | 输出视频高,正整数,取值范围[0,7680],默认0(输入视频高度),必须为偶数 |
MaxBitrate | Int | 否 | 输出视频最大码率,范围[10,200000],单位Kbps,默认输入视频码率 |
OutputAudioVideoSync | String | 是 | 是否进行音频和视频帧率同步,取值范围为 on off |
参数名 | 类型 | 必选 | 描述 |
Bucket | String | 是 | COS 桶名称,例如 test-12345678 |
Region | String | 是 | COS 所在的地域,例如 ap-guangzhou |
说明:
转码函数运行时需要读取 COS 资源进行转码,并将转码后的资源写回 COS。CosConfig 将使用模板创建时填入的 SecretId 和 SecretKey 信息,需要给已提供的SecretId 和 SecretKey配置一个授权 COS 全读写的运行角色。更多参考 函数运行角色。
转码输出桶与应用建议配置在同一区域,因为跨区域配置转码应用稳定性及效率都会降低,并且会产生跨区流量费用。
返回参数说明
参数名 | 类型 | 描述 |
CreateTransCodeJobRequest | Object | 异步调用固定返回格式,指示请求是否成功 |
job | Object | - |
id | String | 任务 id,可以通过任务查询接口查询任务当前状态 |
status | String | 任务状态。PENDING 队列中;RUNNING 运行中;TERMINATED 已终止;SUCCESS 成功;FAIL 失败 |
请求示例
{"Action": "CreateTransCodeJob","CreateTransCodeJobRequest": {"Inputs": [{"Url": "https://tencent"}],"Outputs": [{"CosConfig": {"Bucket": "media","Region": "ap-guangzhou"},"Destination": "/transcode","VideoDescriptor": {"OutputName": "output.mp4","Codec": "H264" ,"Width":640,"Height" :360,"MaxBitrate": 1024,"OutputAudioVideoSync": "off"}}]}}
{"Action": "CreateTransCodeJob","CreateTransCodeJobRequest": {"Inputs": [{"Source": {"Path":"/enhance.mp4","CosConfig":{"Bucket": "media","Region": "ap-guangzhou"}}}],"Outputs": [{"CosConfig": {"Bucket": "media","Region": "ap-guangzhou"},"Destination": "/transcode","VideoDescriptor": {"OutputName": "output.mp4","Codec": "H264" ,"Width":640,"Height" :360,"MaxBitrate": 1024,"OutputAudioVideoSync": "off"}}]}}
响应示例
{"CreateJobResponse": {"job": {"id": "ecjsxdesrprc9f8235","state": "PENDING"}}}
查询融合媒体转码任务状态接口
此接口可以通过创建融合媒体任务得到的任务 id 来查询任务状态。
请求参数说明
参数名 | 类型 | 必选 | 描述 |
Action | String | 是 | 本产品固定 DescribeJob |
DescribeJobRequest | Object | 是 | 包含 id |
DescribeJobRequest | Input[] | 是 | 转码文件的获取来源,目前应用仅处理数组的第一项 |
id | String | 是 | 创建融合媒体任务得到的任务 id |
响应说明
参数名 | 类型 | 必选 | 描述 |
RequestId | String | 是 | 请求唯一 RequestId |
DescribeJobResponse | Object | 是 | 包含job 对象 |
job | Object | 是 | 任务状态结构体 |
id | String | 是 | 任务 id |
state | String | 是 | 任务状态。PENDING 队列中;RUNNING 运行中;TERMINATED 已终止;SUCCESS 成功;FAIL 失败 |
ApplyParam | String | 是 | 已经提交的任务参数 |
applyTime | String | 是 | 提交时间 |
startTime | String | 是 | 开始时间 |
endTime | String | 是 | 任务结束时间 |
EngineRequestId | String | 是 | 引擎 RequestId,可以查询实际的引擎运行情况 |
ErrorMessage | String | 是 | 若引擎运行失败,可以看到根据错误信息判断错误来源 |
请求示例
{"Action": "DescribeJob","DescribeJobRequest": {"id": "ecjsxdesrprc9f8235"}}
响应示例
{"RequestId": "f0mn4teo68pjvn4eujawwcpz52vsiplf","DescribeJobResponse": {"job": {"id": "g2ads4bgms1wwqv244","state": "SUCCESS","ApplyParam": "{}","applyTime": "1630929363223","startTime": "1630932002511","endTime": "1630965618361","EngineRequestId": "f8344d37-10c1-4a33-95eb-920337dacb8a"}}}
取消融合媒体转码任务状态接口
此接口可以通过创建融合媒体任务得到的任务 id 来取消转码任务,只有 PENDING 状态任务可取消。
请求参数说明
参数名 | 类型 | 必选 | 描述 |
Action | String | 是 | 本产品固定 CancelJob |
CancelJobRequest | Object | 是 | 包含 id |
id | String | 是 | 创建融合媒体任务得到的任务 id |
响应参数说明
参数名 | 类型 | 必选 | 描述 |
RequestId | String | 是 | 请求唯一 id |
Result | Object | 是 | 包含 IsSuccess |
IsSuccess | Boolean | 是 | 取消任务是否成功,取值范围为 true false |
请求示例
{"Action": "CancelJob","CancelJobRequest": {"id": "9rv9zx15idweviq2"}}
响应示例
{"RequestId": "yqsrrgh6t1097k6cqd8cpnw5y26xkone","Result": {"IsSuccess": true}}
中止融合媒体转码任务状态接口
此接口可以通过创建融合媒体任务得到的任务 id 来中止转码任务,只有 RUNNING 状态任务可中止,此操作为尝试中止,最终是否中止以结果为准。
请求参数说明
参数名 | 类型 | 必选 | 描述 |
Action | String | 是 | 本产品固定 TerminateJob |
TerminateJobRequest | Object | 是 | 包含 id |
id | String | 是 | 创建融合媒体任务得到的任务 id |
响应参数说明
参数名 | 类型 | 必选 | 描述 |
RequestId | String | 是 | 请求唯一 id |
Result | Object | 是 | 包含 IsSuccess |
IsSuccess | Boolean | 是 | 中止任务是否成功,取值范围为 true false |
请求示例
{"Action": "TerminateJob","TerminateJobRequest": {"id": "m2y3isjca9ew9w54"}}
响应示例
{"RequestId": "yqsrrgh6t1097k6cqd8cpnw5y26xkone","Result": {"IsSuccess": true}}