全部產品
Search
文件中心

Intelligent Media Services:多音軌轉碼打包最佳實務

更新時間:Nov 14, 2025

本文檔指導開發人員通過阿里雲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基礎配置

  • 儲存配置:將OSS Bucket綁定至IMS服務,詳情請參見配置儲存地址

  • 回調配置:配置HTTP回調或MNS回調以接收任務狀態通知,關於回調方式和回調事件的基本資料請參見回調事件概述

轉碼模板配置

配置流程

需求樣本

編碼協議:H264/H265

視頻解析度:360P/540P/720P/1080P

音頻:HE-AAC 64Kbps(預設配置)。

配置樣本

以四種視頻清晰度為例,按照下表建立轉碼模板,建立模板操作請參見建立轉碼模板

說明

如需進行窄帶高清轉碼,請參照表格建立相應模板,隨後提交工單,由阿里雲在後台進行升級配置。

H264

轉碼模板

編碼協議

封裝格式

其他配置

視頻-360P

H264

m3u8(.ts)

  • 解析度(長邊固定,短邊自適應): 640*

  • 禁用音頻

  • 切片時間長度:5S

  • 其他按實際需求配置

視頻-540P

H264

m3u8(.ts)

  • 解析度(長邊固定,短邊自適應): 960*

  • 禁用音頻

  • 切片時間長度:5S

  • 其他按實際需求配置

視頻-720P

H264

m3u8(.ts)

  • 解析度(長邊固定,短邊自適應): 1280*

  • 禁用音頻

  • 切片時間長度:5S

  • 其他按實際需求配置

視頻-1080P

H264

m3u8(.ts)

  • 解析度(長邊固定,短邊自適應): 1920*

  • 禁用音頻

  • 切片時間長度:5S

  • 其他按實際需求配置

音頻-64Kbps

HE-AAC

m3u8(.ts)

  • 禁用視頻

  • 切片時間長度:5S

說明

控制台當前無法建立該模板,建議通過API或提交工單,以尋求協助進行修改。

H265

說明
  • 優先選擇:建議使用fmp4封裝格式,這是APPLE的標準協議,且對Safari瀏覽器友好。

  • 替代方案:*ts封裝格式也可行,但不相容Safari。

  • 控制台限制:*fmp4封裝格式在控制台中無法自助建立,建議先按m3u8(ts)封裝格式進行建立,隨後由阿里雲在後台進行配置升級。

轉碼模板

編碼協議

封裝格式

其他配置

視頻-360P

H265

m3u8(.fmp4)

  • 解析度(長邊固定,短邊自適應): 640*

  • 禁用音頻

  • 切片時間長度:5S

  • 其他按實際需求配置

視頻-540P

H265

m3u8(.fmp4)

  • 解析度(長邊固定,短邊自適應): 960*

  • 禁用音頻

  • 切片時間長度:5S

  • 其他按實際需求配置

視頻-720P

H265

m3u8(.fmp4)

  • 解析度(長邊固定,短邊自適應): 1280*

  • 禁用音頻

  • 切片時間長度:5S

  • 其他按實際需求配置

視頻-1080P

H265

m3u8(.fmp4)

  • 解析度(長邊固定,短邊自適應): 1920*

  • 禁用音頻

  • 切片時間長度:5S

  • 其他按實際需求配置

音頻-64Kbps

HE-AAC

m3u8(.fmp4)

  • 禁用視頻

  • 切片時間長度:5S

說明

控制台當前無法建立該模板,建議通過API或提交工單,以尋求協助進行修改。

多碼率轉碼打包任務

發起多碼率任務

調用SubmitMediaConvertJob介面,提交視頻或音頻檔案的轉碼任務到智能媒體服務。

Config說明(HlsGroupConfig)

參數

類型

說明

Type

string

指定資料流類型:

取值:

  • video:視頻流,處理時將僅保留與視頻相關的設定。

  • audio:音頻流,處理時將僅保留與音頻相關的設定。

  • hybrid:混合流,處理時將保留與音頻和視頻相關的設定。

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 基礎上增加音軌

配置步驟:

  1. 指定了名為“ExtraAudio”的輸入。並在輸出中引用該輸入以轉碼為音頻 HLS 流。

  2. 在 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欄位尋找被篩選項。

取值:

  • Audio。

  • Subtitle。

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\"}"
}

播放多碼率打包視頻

使用阿里雲播放器,以實現多碼率打包視頻的播放。

視頻翻譯+多碼率打包流程

  1. 輸入準備:輸入源檔案。

  2. 翻譯處理:將源檔案翻譯為目標語言(如英語、日語),產生對應的音頻或視頻檔案。

  3. 視頻轉碼打包流程:調用 SubmitMediaConvertJob 介面,合并多語言內容並轉碼為支援多碼率的標準化視頻。