本文檔指導開發人員通過阿里雲IMS實現多字幕轉碼與打包,快速產生適配多終端播放的多字幕音視頻。
轉碼打包流程
打包檔案結構樣本
#EXTM3U
# 音頻流定義(多語言)
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",NAME="中文-音頻",DEFAULT=YES,AUTOSELECT=YES,FORCED=NO,LANGUAGE="zh",URI="audio/chinese/chinese.m3u8"
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",NAME="English-Audio",DEFAULT=NO,AUTOSELECT=YES,FORCED=NO,LANGUAGE="en",URI="audio/english/english.m3u8"
# 視頻流定義(多碼率)
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=900000,CODECS="avc1.640020",RESOLUTION=720x1280,AUDIO="audio",SUBTITLES="subtitle"
video/720p/720p.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=400000,CODECS="avc1.640020",RESOLUTION=360x640,AUDIO="audio",SUBTITLES="subtitle"
video/360p/360p.m3u8
# 字幕流定義(多語言)
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subtitle",NAME="中文-字幕",DEFAULT=YES,AUTOSELECT=YES,FORCED=NO,LANGUAGE="zh",URI="subtitle/chinese/chinese.m3u8"
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subtitle",NAME="English-Subtitle",DEFAULT=NO,AUTOSELECT=YES,FORCED=NO,LANGUAGE="en",URI="subtitle/english/english.m3u8"前提條件
已開通智能媒體服務。請參見開通服務。
配置準備
IMS基礎配置
轉碼模板配置
配置流程
需求樣本
編碼協議:H264/H265
視頻解析度:360P/540P/720P/1080P
音頻:HE-AAC 64Kbps(預設配置)。
字幕:M3U8(VTT)。
配置樣本
以四種視頻清晰度為例,按照下表建立轉碼模板,建立模板操作請參見建立轉碼模板。
如需進行窄帶高清轉碼,請參照表格建立相應模板,隨後提交工單,由阿里雲在後台進行升級配置。
H264
轉碼模板 | 編碼協議 | 封裝格式 | 其他配置 |
視頻-360P | H264 | m3u8(.ts) |
|
視頻-540P | H264 | m3u8(.ts) |
|
視頻-720P | H264 | m3u8(.ts) |
|
視頻-1080P | H264 | m3u8(.ts) |
|
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) |
|
多碼率轉碼打包任務
發起多碼率任務
調用SubmitMediaConvertJob介面,提交視頻或音頻檔案的轉碼任務到智能媒體服務。
使用 OverrideParams 設定字幕流
當前無法在轉碼模板中自訂設定字幕資訊,需要在提交任務時使用OverrideParams顯示設定字幕資訊。
參數 | 類型 | 說明 |
Subtitles | Array of Subtitle | 字幕流設定。 |
Subtitle
參數 | 類型 | 說明 |
Codec | String | 字幕流編碼格式。HLS只支援vtt格式。 |
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:轉碼並產生多碼率打包檔案
{
"Config": {
"Inputs": [
{
"Name": "video",
"InputFile": {
"Type": "OSS",
"Url": "https://<Bucket>.<OSS外網Endpoint>/<視頻1中文>"
}
},
{
"Name": "EnglishAudio",
"InputFile": {
"Type": "OSS",
"Url": "https://<Bucket>.<OSS外網Endpoint>/<音頻頻1英文>"
}
},
{
"Name": "ChineseSubtitle",
"InputFile": {
"Type": "OSS",
"Url": "https://<Bucket>.<OSS外網Endpoint>/<字幕1中文>"
}
},
{
"Name": "EnglishSubtitle",
"InputFile": {
"Type": "OSS",
"Url": "https://<Bucket>.<OSS外網Endpoint>/<字幕1英文>"
}
}
],
"OutputGroups": [
{
"Name": "Hls",
"GroupConfig": {
"Type": "Hls",
"OutputFileBase": {
"Type": "OSS",
"Url": "https://<Bucket>.<外網Endpoint>/<URI>/"
},
"ManifestName": "<m3u8filename>"
},
"Outputs": [
{
"Name": "720P",
"OutputFileName": "video/720p/720p",
"TemplateId": "視頻-720P",
"HlsGroupConfig": {
"Type": "Video"
}
},
{
"Name": "360P",
"OutputFileName": "video/360p/360p",
"TemplateId": "視頻-360P",
"HlsGroupConfig": {
"Type": "Video"
}
},
{
"OutputFileName": "audio/chinese/chinese",
"TemplateId": "音頻-64Kbps",
"HlsGroupConfig": {
"Type": "Audio",
"Name": "ChineseAudio",
"Language": "zh",
"Autoselect": "TRUE",
"Default": "TRUE"
}
},
{
"InputRef": "ChineseSubtitle",
"OutputFileName": "subtitle/chinese/chinese",
"TemplateId": "打包任務中任意模板ID",
"OverrideParams": {
"Subtitles": [
{
"Codec": "vtt"
}
]
},
"HlsGroupConfig": {
"Type": "Subtitle",
"Name": "ChineseSubtitle",
"Language": "zh",
"Autoselect": "TRUE",
"Default": "TRUE"
}
},
{
"InputRef": "EnglishAudio",
"OutputFileName": "audio/english/english",
"TemplateId": "音頻-64Kbps",
"HlsGroupConfig": {
"Type": "Audio",
"Name": "EnglishAudio",
"Language": "en",
"Autoselect": "TRUE",
"Default": "FALSE"
}
},
{
"InputRef": "EnglishSubtitle",
"OutputFileName": "subtitle/english/english",
"TemplateId": "打包任務中任意模板ID",
"OverrideParams": {
"Subtitles": [
{
"Codec": "vtt"
}
]
},
"HlsGroupConfig": {
"Type": "Subtitle",
"Name": "EnglishSubtitle",
"Language": "en",
"Autoselect": "TRUE",
"Default": "FALSE"
}
}
]
}
]
}
}查詢任務結果
調用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\"}"
}