本文檔指導開發人員通過阿里雲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中的一些流。
參數 | 類型 | 說明 |
Name | string | 按流的Name欄位尋找被篩選項。 |
Type | string | 按流的Type欄位尋找被篩選項。 取值:
|
Language | string | 按流的Language欄位尋找被篩選項,遵循RFC5646標準。 |
{
"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": [{
"Language": "en",
"Type": "Audio"
}]
}
},
"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介面,合并多語言內容並轉碼為支援多碼率的標準化視頻。