本文档指导开发者通过阿里云IMS实现多语言音轨转码与打包,快速生成适配多终端播放的多语言音视频。
转码打包流程
打包文件结构示例
#EXTM3U
# 音频流定义(多语言)
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",NAME="中文",LANGUAGE="zh",DEFAULT=YES,URI="audio/chinese.m3u8"
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",NAME="English",LANGUAGE="en",DEFAULT=NO,URI="audio/english.m3u8"
# 视频流定义(多码率)
#EXT-X-STREAM-INF:BANDWIDTH=400000,RESOLUTION=360x640,AUDIO="audio",CODECS="hvc1,mp4a.40.5"
video/360p.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=900000,RESOLUTION=720x1280,AUDIO="audio",CODECS="hvc1,mp4a.40.5"
video/720p.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=2000000,RESOLUTION=1080x1920,AUDIO="audio",CODECS="hvc1,mp4a.40.5"
video/1080p.m3u8
前提条件
已开通智能媒体服务。请参见开通服务。
配置准备
IMS基础配置
转码模板配置
配置流程
需求示例
编码协议:H264/H265
视频分辨率:360P/540P/720P/1080P
音频:HE-AAC 64Kbps(默认配置)。
配置示例
以四种视频清晰度为例,按照下表创建转码模板,创建模板操作请参见创建转码模板。
如需进行窄带高清转码,请参照表格创建相应模板,随后提交工单,由阿里云在后台进行升级配置。
H264
转码模板 | 编码协议 | 封装格式 | 其他配置 |
视频-360P | H264 | m3u8(.ts) |
|
视频-540P | H264 | m3u8(.ts) |
|
视频-720P | H264 | m3u8(.ts) |
|
视频-1080P | H264 | m3u8(.ts) |
|
音频-64Kbps | HE-AAC | m3u8(.ts) |
说明 控制台当前无法创建该模板,建议通过API或提交工单,以寻求协助进行修改。 |
H265
优先选择:建议使用fmp4封装格式,这是APPLE的标准协议,且对Safari浏览器友好。
替代方案:*ts封装格式也可行,但不兼容Safari。
控制台限制:*fmp4封装格式在控制台中无法自助创建,建议先按m3u8(ts)封装格式进行创建,随后由阿里云在后台进行配置升级。
转码模板 | 编码协议 | 封装格式 | 其他配置 |
视频-360P | H265 | m3u8(.fmp4) |
|
视频-540P | H265 | m3u8(.fmp4) |
|
视频-720P | H265 | m3u8(.fmp4) |
|
视频-1080P | H265 | m3u8(.fmp4) |
|
音频-64Kbps | HE-AAC | m3u8(.fmp4) |
说明 控制台当前无法创建该模板,建议通过API或提交工单,以寻求协助进行修改。 |
多码率转码打包任务
发起多码率任务
调用SubmitMediaConvertJob接口,提交视频或音频文件的转码任务到智能媒体服务。
Config说明(HlsGroupConfig)
参数 | 类型 | 说明 |
Type | string | 指定数据流类型: 取值:
|
Bandwidth | string | 设置带宽(可选),默认使用码率(bps)。 当Type为 video 和 hybrid 时生效。 |
AudioGroup | string | 该路视频流引用的音频组。当Type为 video 生效。 |
SubtitleGroup | string | 该路视频流引用的字幕组。当Type为 video 和 hybrid 时生效。 |
Name | string | 该输出流在 hls manifest 中的 NAME 属性。当Type为 audio 或 subtitle 时,此项为必填。 |
Group | string | 该输出流在 HLS Manifest 中的 GROUP_ID 属性。该属性在 Type 为 audio 和 subtitle 时生效。 默认与 Type 的取值相同。 |
Language | string | 该输出流在 HLS manifest 中的 LANGUAGE 属性,当Type为 audio 和 subtitle 时生效,需遵循 RFC 5646 标准。 |
Default | boolean | 是否设为默认流。当Type为 audio 时生效。 |
AutoSelect | boolean | 是否自动选择流。当Type为 audio 时生效。 |
Forced | boolean | 是否强制显示。当Type为 audio 时生效。 |
场景1:转码并生成多码率打包文件
{
"Inputs": [
{
"Name": "video",
"InputFile": {
"Type": "OSS",
"Media": "https://<Bucket>.<外网Endpoint>/<视频1中文>"
}
},
{
"Name": "EnglishAudio",
"InputFile": {
"Type": "OSS",
"Media": "https://<Bucket>.<外网Endpoint>/<视频1英文>"
}
},
{
"Name": "JapaneseAudio",
"InputFile": {
"Type": "OSS",
"Media": "https://<Bucket>.<外网Endpoint>/<视频1日语>"
}
}
],
"OutputGroups": [
{
"GroupConfig": {
"Type": "Hls",
"OutputFileBase": {
"Type": "OSS",
"Media": "https://<Bucket>.<外网Endpoint>/<URI>/"
},
"ManifestName": "<m3u8filename>"
},
"Outputs": [
{
"Name": "360P",
"InputRef": "video",
"OutputFileName": "video/360p/360p",
"TemplateId": "视频-360P"
},
{
"Name": "540P",
"InputRef": "video",
"OutputFileName": "video/540p/540p",
"TemplateId": "视频-540P"
},
{
"Name": "720P",
"InputRef": "video",
"OutputFileName": "video/720p/720p",
"TemplateId": "视频-720P"
},
{
"Name": "1080P",
"InputRef": "video",
"OutputFileName": "video/1080p/1080p",
"TemplateId": "视频-1080P"
},
{
"OutputFileName": "audio/chinese/chinese",
"TemplateId": "音频-64Kbps",
"HlsGroupConfig": {
"Name": "Chinese",
"Type":"audio",
"Language": "zh",
"Autoselect": "TRUE",
"Default": "TRUE"
}
},
{
"InputRef": "EnglishAudio",
"OutputFileName": "audio/english/english",
"TemplateId": "音频-64Kbps",
"HlsGroupConfig": {
"Name": "English",
"Type":"audio",
"Language": "en",
"Autoselect": "TRUE"
}
},
{
"InputRef": "JapaneseAudio",
"OutputFileName": "audio/japanese/japanese",
"TemplateId": "音频-64Kbps",
"HlsGroupConfig": {
"Name": "Japanese",
"Type":"audio",
"Language": "ja",
"Autoselect": "TRUE"
}
}
]
}
]
}
场景2:在原 hls manifest 基础上增加音轨
配置步骤:
指定了名为“ExtraAudio”的输入。并在输出中引用该输入以转码为音频 HLS 流。
在 GroupConfig 中的 ManifestExtend 选项中设置 InputRef,以引用输入中的 "RefManifest" 文件,从而复用 manifest,实现基于原 manifest 增加额外音轨的目的。
{
"Inputs": [
{
"Name": "ExtraAudio",
"InputFile": {
"Type": "OSS",
"Media": "http://your-bucket.oss-region.aliyuncs.com/in/extra-audio.mp4"
}
},
{
"Name": "RefManifest",
"InputFile": {
"Type": "OSS",
"Media": "http://your-bucket.oss-region.aliyuncs.com/in/manifest.m3u8"
}
}
],
"OutputGroups": [
{
"GroupConfig": {
"Type": "Hls",
"OutputFileBase": {
"Type": "OSS",
"Media": "http://your-bucket.oss-region.aliyuncs.com/out/demo"
},
"ManifestName": "manifest",
"ManifestExtend": {
"InputRef": "RefManifest"
}
},
"Outputs": [
{
"Name": "ExtraAudioOut",
"InputRef": "ExtraAudio",
"OutputFileName": "extra-audio",
"TemplateId": "#音频模板Id",
"hlsGroupConfig": {
"Type": "audio",
"Name":"Chinese",
"Language": "zh-cn"
}
}
]
}
]
}
场景3:在原 hls manifest 基础上音轨替换
在场景2的基础上,在 ManifestExtend 中增加 “Excludes” 选项,以排除原始 manifest 中的一些流。
{
"Inputs": [
{
"Name": "ExtraAudio",
"InputFile": {
"Type": "OSS",
"Media": "http://your-bucket.oss-region.aliyuncs.com/in/extra-audio.mp4"
}
},
{
"Name": "RefManifest",
"InputFile": {
"Type": "OSS",
"Media": "http://your-bucket.oss-region.aliyuncs.com/in/manifest.m3u8"
}
}
],
"OutputGroups": [
{
"GroupConfig": {
"Type": "Hls",
"OutputFileBase": {
"Type": "OSS",
"Media": "http://your-bucket.oss-region.aliyuncs.com/out/demo"
},
"ManifestName": "manifest",
"ManifestExtend": {
"InputRef": "RefManifest",
"Excludes": [
{
"Rule": "tag",
"Tags": {"Language": "zh-CN"}
}]
}
},
"Outputs": [
{
"Name": "ExtraAudioOut",
"InputRef": "ExtraAudio",
"OutputFileName": "extra-audio",
"TemplateId": "#音频模板Id",
"hlsGroupConfig": {
"Type": "audio",
"Name":"Chinese",
"Language": "zh-cn"
}
}
]
}
]
}
查询任务结果
调用GetMediaConvertJob接口获取转码任务详情。
回调事件通知
事件类型:EventType:MediaConvertComplete
配置方式:控制台尚未开发该事件的选择功能,用户可通过SetEventCallback接口进行配置。
关键字段说明
参数名称 | 类型 | 必选 | 描述 | |
Name | String | 是 | 主任务名称。 | |
JobId | String | 是 | 任务id。 | |
Status | String | 是 | 任务结果中,"Success"表示成功。如果在子任务中有任一任务成功,则整体结果视为成功。 | |
TriggerSource | String | 否 | 触发来源,API指的是API的提交操作。 | |
FinishTime | String | 否 | 完成时间,格式应与EventTime相同。 | |
UserData | string | 否 | 用户在提交转码任务时需进行指定。 |
示例
{
"FinishTime": "2025-05-09T08:03:21Z",
"JobId": "your-job-id",
"Status": "Success",
"TriggerSource": "IceWorkflow",
"UserData": "{\"ImsSrc\":\"Workflow\",\"TaskId\":\"e89a955d88ca47f0b9b79c562e5c622f\"}"
}
播放多码率打包视频
使用阿里云播放器,以实现多码率打包视频的播放。
视频翻译+多码率打包流程
输入准备:输入源文件。
翻译处理:将源文件翻译为目标语言(如英语、日语),生成对应的音频或视频文件。
视频转码打包流程:调用
SubmitMediaConvertJob
接口,合并多语言内容并转码为支持多码率的标准化视频。