三、支持多种网络环境
不同网络带宽的用户可通过智能融合媒体转码能力选择最佳码率,流畅播放。
四、视频快速审核
视频在生产、发布的各个环节都有送审、评审需求,在保证相同画质质量的前提下,可通过提高视频压缩率、调整视频码率等方式降低带宽消耗,压缩成本,提升效率。
五、提升短视频用户体验
支持 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. 配置 运行角色 权限。
十一、创建依赖资源
创建的过程中,需要依赖以下相关组件,请提前创建。具体创建流程请参见 VPC 创建、CFS 创建、COS 创建、Redis 创建、SecretId/SecretKey 创建。
十二、创建融合媒体转码应用
1. 登录 Serverless 控制台,选择左侧导航栏中的 Serverless 应用。
2. 在 “Serverless 应用” 页面,单击新建应用。
3. 在新建应用页面,根据页面相关信息提示进行配置。如下:
·创建方式:选择应用市场。
·模糊搜索:输入“转码”进行搜索,选择快速部署一个融合媒体转码应用。
单击模板中的查看详情,即可在弹出的“模板详情”窗口中查看相关信息,支持下载操作。
4. 单击下一步,根据页面相关信息提示进行配置。如下:
·应用名:例如,“transcode-app”。
·地域:例如:“成都”。
·私有网络:按需选择。
·文件系统:按需选择。
·密钥 Secretld:按需选择。
·密钥 SecreKey:按需选择。
·链接地址:按需选择。
·链接密码:按需选择。
·数据库索引:按需选择。
5. 单击完成即可完成应用创建、函数创建以及 API 网关触发器创建。
如需根据业务场景修改函数配置,你可以在 Serverless 应用 > 应用名称 > 资源列表 中进行修改。如下:
6. 在“函数详情”页面中选择日志查询,可以查看到打印出的转码日志信息。如下:
7. 进入 COS 控制台,查询转码结果 。
十四、接口请求路径
请求URL请求方式接口鉴权方式1. 登录 Serverless 控制台,选择左侧导航栏中的Serverless 应用。2. 在 Serverless 应用列表页,单击应用名称。3. 在应用详情页,获取触发器访问入口。如下:
POST
Content-Type: application/json融合转码服务接口由云函数实现,采用了 API 网关触发器方式对外提供服务,鉴权采用应用认证方式(ApiAppKey 和 ApiAppSecret),详情请参见 应用鉴权。
十五、创建融合媒体转码任务接口
通过此接口可以发起转码任务,在接口参数中指定视频输入源、输出配置以及CFS等参数。
十六、请求参数说明
| 参数名 | 类型 | 必选 | 描述 |
| Action | String | 是 | 本产品固定 CreateTransCodeJob |
| CreateTransCodeJobRequest | Object | 是 | 包含 Inputs、Outputs |
| Inputs | Input[] | 是 | 转码文件的获取来源,目前应用仅处理数组的第一项 |
| Outputs | Output[] | 是 | 转码文件的输出配置,目前应用仅处理数组的第一项 |
参数详情如下:
InputOutputVideoDescriptorCosConfig
| 参数名 | 类型 | 必选 | 描述 |
| 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 失败 |
十八、请求示例
输入源为 Url输入源为 COS{ "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" } }}
20、查询融合媒体转码任务状态接口
此接口可以通过创建融合媒体任务得到的任务 id 来查询任务状态。
21、请求参数说明
| 参数名 | 类型 | 必选 | 描述 |
| Action | String | 是 | 本产品固定 DescribeJob |
| DescribeJobRequest | Object | 是 | 包含 id |
| DescribeJobRequest | Input[] | 是 | 转码文件的获取来源,目前应用仅处理数组的第一项 |
| id | String | 是 | 创建融合媒体任务得到的任务 id |
22、响应说明
| 参数名 | 类型 | 必选 | 描述 |
| 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 | 是 | 若引擎运行失败,可以看到根据错误信息判断错误来源 |
23、请求示例
{ "Action": "DescribeJob", "DescribeJobRequest": { "id": "ecjsxdesrprc9f8235" }}
24、响应示例
{ "RequestId": "f0mn4teo68pjvn4eujawwcpz52vsiplf", "DescribeJobResponse": { "job": { "id": "g2ads4bgms1wwqv244", "state": "SUCCESS", "ApplyParam": "{}", "applyTime": "1630929363223", "startTime": "1630932002511", "endTime": "1630965618361", "EngineRequestId": "f8344d37-10c1-4a33-95eb-920337dacb8a" } }}
25、取消融合媒体转码任务状态接口
此接口可以通过创建融合媒体任务得到的任务 id 来取消转码任务,只有 PENDING 状态任务可取消。
26、请求参数说明
| 参数名 | 类型 | 必选 | 描述 |
| Action | String | 是 | 本产品固定 CancelJob |
| CancelJobRequest | Object | 是 | 包含 id |
| id | String | 是 | 创建融合媒体任务得到的任务 id |
27、响应参数说明
| 参数名 | 类型 | 必选 | 描述 |
| RequestId | String | 是 | 请求唯一 id |
| Result | Object | 是 | 包含 IsSuccess |
| IsSuccess | Boolean | 是 | 取消任务是否成功,取值范围为 true false |
28、请求示例
{ "Action": "CancelJob", "CancelJobRequest": { "id": "9rv9zx15idweviq2" }}
29、响应示例
{ "RequestId": "yqsrrgh6t1097k6cqd8cpnw5y26xkone", "Result": { "IsSuccess": true }}
30、中止融合媒体转码任务状态接口
此接口可以通过创建融合媒体任务得到的任务 id 来中止转码任务,只有 RUNNING 状态任务可中止,此操作为尝试中止,最终是否中止以结果为准。
31、请求参数说明
| 参数名 | 类型 | 必选 | 描述 |
| Action | String | 是 | 本产品固定 TerminateJob |
| TerminateJobRequest | Object | 是 | 包含 id |
| id | String | 是 | 创建融合媒体任务得到的任务 id |
32、响应参数说明
| 参数名 | 类型 | 必选 | 描述 |
| RequestId | String | 是 | 请求唯一 id |
| Result | Object | 是 | 包含 IsSuccess |
| IsSuccess | Boolean | 是 | 中止任务是否成功,取值范围为 true false |
33、请求示例
{ "Action": "TerminateJob", "TerminateJobRequest": { "id": "m2y3isjca9ew9w54" }}
34、响应示例
{ "RequestId": "yqsrrgh6t1097k6cqd8cpnw5y26xkone", "Result": { "IsSuccess": true }}