有奖捉虫:办公协同&微信生态&物联网文档专题 HOT

应用场景

适配多种终端设备

利用综合转码能力,适配 PC、TV 以及移动终端等多平台播放,带来更好的视觉体验。

支持多种网络环境

不同网络带宽的用户可通过智能融合媒体转码能力选择最佳码率,流畅播放。

视频快速审核

视频在生产、发布的各个环节都有送审、评审需求,在保证相同画质质量的前提下,可通过提高视频压缩率、调整视频码率等方式降低带宽消耗,压缩成本,提升效率。

提升短视频用户体验

支持 K 歌等场景下的画质增强,综合利用多种视频加清技术进行处理,提升画质,进一步提升歌曲点唱率。

架构原理

腾讯多媒体实验室自研的智慧融合媒体处理技术,支持对包括视频、音乐、文字、图片等融合媒体内容进行理解、分析、处理、编创。可满足广电、文旅、教育、电商、政企、泛互等各行业场景的融合媒体处理需求。
通过 Serverless 应用和腾讯多媒体实验室智慧融合媒体(Intelligent Convergence Media)深度整合,您可快速部署一个基于 COS + API + SCF + ICM 的开箱即用、灵活便捷的高效视频转码应用。通过 API 网关进行事件触发,将用户原始视频进行转码处理,转码完成后上传到用户对应的 COS 平台进行存储。具体流程如下图所示:

image-20210713201137578



应用优势

存储多样化 视频源文件支持 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 控制台,查询转码结果 。
说明
转码应用可能需要依赖云函数长时间运行能力,详情请参见 异步执行
融合媒体处理后台冷启动有一定时间,为避免请求超时,API 网关触发器的后端超时建议设置较大数值。

接口使用说明

接口请求路径

请求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[]
转码文件的输出配置,目前应用仅处理数组的第一项
参数详情如下:
Input
Output
VideoDescriptor
CosConfig
参数名
类型
必选
描述
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"
}
}
}

查询融合媒体转码任务状态接口

此接口可以通过创建融合媒体任务得到的任务 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
}
}