Dokumen ini membimbing pengembang dalam menggunakan Alibaba Cloud Intelligent Media Services (IMS) untuk mentranskode dan mengemas konten dengan banyak caption. Ini memungkinkan Anda menghasilkan file audio dan video multi-caption secara cepat untuk diputar di berbagai perangkat.
Alur transkoding dan pengemasan
Contoh Struktur File yang Dikemas
#EXTM3U
# Definisi aliran audio (multi-bahasa)
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",NAME="Chinese-Audio",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"
# Definisi aliran video (multi-bitrate)
#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
# Definisi aliran subtitle (multi-bahasa)
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subtitle",NAME="Chinese-Subtitle",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"Prasyarat
Anda telah mengaktifkan Intelligent Media Services. Untuk informasi lebih lanjut, lihat Aktifkan Layanan.
Persiapan
Konfigurasi dasar IMS
Konfigurasi Penyimpanan: Lampirkan Bucket OSS ke layanan IMS. Untuk informasi lebih lanjut, lihat Konfigurasikan Alamat Penyimpanan.
Konfigurasi Callback: Konfigurasikan callback HTTP atau MNS untuk menerima notifikasi status tugas. Untuk informasi lebih lanjut tentang metode callback dan event, lihat Ikhtisar Event Callback.
Konfigurasi template transkoding
Alur konfigurasi
Contoh persyaratan
Protokol Encoding: H264/H265
Resolusi Video: 360p/540p/720p/1080p
Audio: HE-AAC 64 Kbps (konfigurasi default)
Caption: M3U8 (VTT)
Contoh konfigurasi
Untuk contoh ini, buat template transkoding untuk empat definisi video berdasarkan tabel berikut. Untuk membuat template, lihat Buat Template Transkoding.
Untuk melakukan transkoding Narrowband HD, buat template yang sesuai berdasarkan tabel lalu ajukan tiket. Alibaba Cloud akan melakukan konfigurasi peningkatan pada backend.
H264
Template transkoding | Protokol encoding | Format kontainer | Konfigurasi lainnya |
Video-360p | H264 | m3u8 (.ts) |
|
Video-540p | H264 | m3u8 (.ts) |
|
Video-720p | H264 | m3u8 (.ts) |
|
Video-1080p | H264 | m3u8 (.ts) |
|
H265
Opsi Utama: Gunakan format kontainer fmp4. Ini adalah protokol standar Apple dan kompatibel dengan browser Safari.
Alternatif: Format kontainer ts juga dapat digunakan tetapi tidak kompatibel dengan Safari.
Keterbatasan Konsol: Anda tidak dapat membuat format kontainer fmp4 di Konsol. Buat template dengan format kontainer m3u8 (.ts) terlebih dahulu. Lalu, Alibaba Cloud akan meningkatkan konfigurasi di backend.
Template transkoding | Protokol encoding | Format kontainer | Konfigurasi lainnya |
Video-360p | H265 | m3u8 (.fmp4) |
|
Video-540p | H265 | m3u8 (.fmp4) |
|
Video-720p | H265 | m3u8 (.fmp4) |
|
Video-1080p | H265 | m3u8 (.fmp4) |
|
Tugas transkoding dan pengemasan multi-bitrate
Ajukan tugas multi-bitrate
Panggil operasi SubmitMediaConvertJob untuk mengirimkan tugas transkoding untuk file video atau audio ke IMS.
Gunakan OverrideParams untuk mengatur aliran subtitle
Informasi caption tidak dapat disesuaikan dalam template transkoding. Anda harus menyetelnya secara eksplisit menggunakan OverrideParams saat Anda mengirimkan tugas.
Parameter | Tipe | Deskripsi |
Subtitles | Array of Subtitle | Pengaturan aliran subtitle. |
Subtitle
Parameter | Tipe | Deskripsi |
Codec | String | Format encoding dari aliran subtitle. HTTP Live Streaming (HLS) hanya mendukung format VTT. |
Deskripsi konfigurasi (HlsGroupConfig)
Parameter | Tipe | Deskripsi |
Type | string | Menentukan jenis aliran data. Nilai valid:
|
Bandwidth | string | Mengatur bandwidth. Parameter ini opsional. Secara default, bitrate dalam bps digunakan. Parameter ini berlaku ketika Type diatur ke video atau hybrid. |
AudioGroup | string | Grup audio yang direferensikan oleh titik akhir ingest video ini. Parameter ini berlaku ketika Type diatur ke video. |
SubtitleGroup | string | Grup subtitle yang direferensikan oleh titik akhir ingest video ini. Parameter ini berlaku ketika Type diatur ke video atau hybrid. |
Name | string | Properti NAME dari aliran keluaran ini dalam manifes HLS. Parameter ini wajib ketika Type diatur ke audio atau subtitle. |
Group | string | Properti GROUP_ID dari aliran keluaran ini dalam manifes HLS. Parameter ini berlaku ketika Type diatur ke audio atau subtitle. Secara default, nilainya sama dengan nilai Type. |
Language | string | Properti LANGUAGE dari aliran keluaran ini dalam manifes HLS. Parameter ini berlaku ketika Type diatur ke audio atau subtitle. Nilainya harus sesuai dengan RFC 5646. |
Default | boolean | Menentukan apakah akan menetapkan aliran sebagai aliran default. Parameter ini berlaku ketika Type diatur ke audio. |
AutoSelect | boolean | Menentukan apakah akan memilih aliran secara otomatis. Parameter ini berlaku ketika Type diatur ke audio. |
Forced | boolean | Menentukan apakah akan memaksa tampilan aliran. Parameter ini berlaku ketika Type diatur ke audio. |
Skenario 1: Transkode dan hasilkan file pengemasan multi-bitrate
{
"Config": {
"Inputs": [
{
"Name": "video",
"InputFile": {
"Type": "OSS",
"Url": "https://<Bucket>.<OSS Public Endpoint>/<Video1_Chinese>"
}
},
{
"Name": "EnglishAudio",
"InputFile": {
"Type": "OSS",
"Url": "https://<Bucket>.<OSS Public Endpoint>/<Audio1_English>"
}
},
{
"Name": "ChineseSubtitle",
"InputFile": {
"Type": "OSS",
"Url": "https://<Bucket>.<OSS Public Endpoint>/<Caption1_Chinese>"
}
},
{
"Name": "EnglishSubtitle",
"InputFile": {
"Type": "OSS",
"Url": "https://<Bucket>.<OSS Public Endpoint>/<Caption1_English>"
}
}
],
"OutputGroups": [
{
"Name": "Hls",
"GroupConfig": {
"Type": "Hls",
"OutputFileBase": {
"Type": "OSS",
"Url": "https://<Bucket>.<Public Endpoint>/<URI>/"
},
"ManifestName": "<m3u8filename>"
},
"Outputs": [
{
"Name": "720P",
"OutputFileName": "video/720p/720p",
"TemplateId": "Video-720p",
"HlsGroupConfig": {
"Type": "Video"
}
},
{
"Name": "360P",
"OutputFileName": "video/360p/360p",
"TemplateId": "Video-360p",
"HlsGroupConfig": {
"Type": "Video"
}
},
{
"OutputFileName": "audio/chinese/chinese",
"TemplateId": "Audio-64Kbps",
"HlsGroupConfig": {
"Type": "Audio",
"Name": "ChineseAudio",
"Language": "zh",
"Autoselect": "TRUE",
"Default": "TRUE"
}
},
{
"InputRef": "ChineseSubtitle",
"OutputFileName": "subtitle/chinese/chinese",
"TemplateId": "Any template ID in the packaging job",
"OverrideParams": {
"Subtitles": [
{
"Codec": "vtt"
}
]
},
"HlsGroupConfig": {
"Type": "Subtitle",
"Name": "ChineseSubtitle",
"Language": "zh",
"Autoselect": "TRUE",
"Default": "TRUE"
}
},
{
"InputRef": "EnglishAudio",
"OutputFileName": "audio/english/english",
"TemplateId": "Audio-64Kbps",
"HlsGroupConfig": {
"Type": "Audio",
"Name": "EnglishAudio",
"Language": "en",
"Autoselect": "TRUE",
"Default": "FALSE"
}
},
{
"InputRef": "EnglishSubtitle",
"OutputFileName": "subtitle/english/english",
"TemplateId": "Any template ID in the packaging job",
"OverrideParams": {
"Subtitles": [
{
"Codec": "vtt"
}
]
},
"HlsGroupConfig": {
"Type": "Subtitle",
"Name": "EnglishSubtitle",
"Language": "en",
"Autoselect": "TRUE",
"Default": "FALSE"
}
}
]
}
]
}
}Periksa hasil tugas
Panggil operasi GetMediaConvertJob untuk mengambil detail tugas transkoding.
Notifikasi event callback
Jenis Event: MediaConvertComplete
Metode Konfigurasi: Anda tidak dapat memilih event ini di Konsol. Anda harus mengonfigurasinya dengan memanggil operasi SetEventCallback.
Deskripsi bidang utama
Nama Parameter | Tipe | Wajib | Deskripsi | |
Name | String | Ya | Nama tugas utama. | |
JobId | String | Ya | ID tugas. | |
Status | String | Ya | Hasil tugas. "Success" menunjukkan bahwa tugas berhasil. Jika ada sub-tugas yang berhasil, hasil keseluruhan dianggap berhasil. | |
TriggerSource | String | Tidak | Sumber pemicu. API menunjukkan bahwa tugas dikirim dengan memanggil operasi API. | |
FinishTime | String | Tidak | Waktu ketika tugas selesai. Formatnya harus sama dengan EventTime. | |
UserData | string | Tidak | Data kustom yang diteruskan saat tugas dikirim. | |
Contoh
{
"FinishTime": "2025-05-09T08:03:21Z",
"JobId": "your-job-id",
"Status": "Success",
"TriggerSource": "IceWorkflow",
"UserData": "{\"ImsSrc\":\"Workflow\",\"TaskId\":\"e89a955d88ca47f0b9b79c562e5c622f\"}"
}