全部产品
Search
文档中心

ApsaraVideo Media Processing:Lakukan Pengemasan HLS

更新时间:Jul 06, 2025

Pengemasan HTTP Live Streaming (HLS) memungkinkan Anda menghasilkan daftar putar utama untuk beberapa aliran video dengan bitrate berbeda, aliran teks, dan aliran audio. Dengan cara ini, konten video dapat dikirim sebagai serangkaian file media kecil yang biasanya dalam format TS. Setiap file berisi video pendek, dan beberapa versi video pada bitrate serta resolusi berbeda dihasilkan. Hal ini memastikan pemutaran streaming media yang lancar sesuai kondisi jaringan pengguna. Untuk melakukan pengemasan HLS, Anda perlu membuat alur kerja pengemasan HLS. Kemudian, Anda dapat menentukan ID dari alur kerja pengemasan HLS saat memanggil operasi AddMedia untuk menggunakan alur kerja tersebut dalam memproses video.

Prosedur

  1. Buat alur kerja pengemasan HLS. Saat membuat alur kerja pengemasan HLS, perhatikan objek yang dijelaskan dalam tabel berikut. Untuk informasi lebih lanjut tentang operasi API yang digunakan untuk membuat alur kerja, lihat AddMediaWorkflow.

    Objek

    Deskripsi

    Topologi

    Proses bisnis yang didefinisikan dengan menggunakan grafik asiklik terarah (DAG).

    Aktivitas

    Node yang membentuk topologi. Saat Anda membuat alur kerja pengemasan HLS, perhatikan aktivitas yang dijelaskan dalam tabel berikut.

    Ketergantungan

    Tepi dalam topologi. Tepi tersebut menunjukkan ketergantungan antara aktivitas.

    Tabel 1: Aktivitas pengemasan HLS

    Aktivitas

    Deskripsi

    Ketergantungan

    PackageConfig

    Menentukan lokasi penyimpanan daftar putar utama output.

    • Node induk yang didukung: Start

    • Node anak yang didukung: SubtitleGroup, AudioGroup, dan Transcode hanya untuk aliran video

    SubtitleGroup

    Menentukan ID dan bahasa setiap grup teks.

    • Node induk yang didukung: PackageConfig

    • Node anak yang didukung: Transcode hanya untuk aliran teks

    AudioGroup

    Menentukan ID dan bahasa setiap grup audio.

    • Node induk yang didukung: PackageConfig

    • Node anak yang didukung: Transcode hanya untuk aliran audio

    Transcode

    Mengekstrak aliran video, audio, atau teks.

    • Node induk yang didukung: PackageConfig, SubtitleGroup, dan AudioGroup.

    • Node anak yang didukung: GenerateMasterPlayList

    GenerateMasterPlayList

    Menentukan aliran video multi-bitrate, aliran audio, dan aliran teks untuk menghasilkan daftar putar utama.

    • Node induk yang didukung: Transcode

    • Node anak yang didukung: Report

  2. Panggil operasi AddMedia untuk memicu alur kerja pengemasan HLS. Perhatikan hal berikut:

    • Anda harus menentukan ID alur kerja pengemasan HLS saat memanggil operasi AddMedia.

    • Untuk ekstraksi aliran teks, Anda dapat mengonfigurasi parameter OverrideParams untuk menimpa URL file teks yang ditentukan oleh parameter WebVTTSubtitleURL dalam aktivitas Transcode. Hanya file teks Web Video Text Tracks (WebVTT) yang didukung.

    • Atur parameter TriggerMode dari alur kerja ke NotInAuto.

Skenario

Dalam contoh ini, dua aliran video dan tiga aliran audio diekstraksi dari file sumber dalam format MXF. File sumber juga dapat berada dalam format MP4, FLV, M3U8, atau TS. Kemudian, dua aliran teks WebVTT diekstraksi, dan daftar putar utama dihasilkan untuk aliran video, aliran audio, dan aliran teks.

Tentukan lokasi dan nama output daftar putar utama

  • Tentukan bucket Object Storage Service (OSS) tempat file daftar putar utama akan disimpan.

  • Tentukan lokasi daftar putar utama.

  • Tentukan nama daftar putar utama.

    Contoh kode:

    {
    "Parameters" : {
    "Output" : "{\"Bucket\": \"processedmediafile\",\"Location\": \"oss-cn-hangzhou\",\"MasterPlayListName\": \"{MediaId}/{RunId}/hls/master.m3u8\"}"
    },
    "Type" : "PackageConfig"
    }
    • Output: lokasi dan nama output daftar putar utama. Untuk informasi lebih lanjut, lihat bagian "PackageConfig" dari topik Metode yang didukung untuk alur kerja media.

    • Type: jenis aktivitas. Dalam contoh ini, parameter ini diatur ke PackageConfig.

Tentukan grup audio

Tentukan ID grup audio. Kedua aliran audio termasuk dalam grup audio yang sama. Contoh kode:

{
"Parameters" : {
"GroupId" : "audios"
},
"Type" : "AudioGroup"
}
  • GroupId: ID grup audio. Dalam contoh ini, parameter ini diatur ke audios.

  • Type: jenis aktivitas. Dalam contoh ini, parameter ini diatur ke AudioGroup.

Ekstrak aliran audio

  • Untuk mengekstrak aliran audio dari file sumber MXF, Anda harus menghapus aliran video.

  • Konfigurasi aliran audio output:

    • Codec: AAC

    • Sample rate: 48.000 Hz

    • Format: Stereo

    Contoh kode:

    
    {
    "Name" : "audio-extract-1",
    "Parameters" : {
    "Outputs" : "[{\"TemplateId\":\"S00000001-100020\",\"AudioStreamMap\":\"0:a:0\",\"Video\":{\"Remove\":\"true\"}}]",
    "ExtXMedia" : "{\"URI\": \"sd/audio-en.m3u8\",\"Name\": \"audio-en\",\"Language\": \"en-US\"}"
    }
    • TemplateId: ID template yang akan digunakan untuk mengekstrak aliran audio. Dalam contoh ini, template dengan ID S00000001-100020 digunakan. Template ini mengekstrak file audio dalam format M3U8. Bitrate audio adalah 80 Kbit/s. Untuk informasi lebih lanjut, lihat Detail template preset.

    • AudioStreamMap: nomor urut aliran audio. Untuk informasi lebih lanjut, lihat bagian "Output" dari topik Detail parameter.

    • Remove: menentukan apakah akan menghapus aliran video dari output. Untuk informasi lebih lanjut, lihat Detail parameter.

    • ExtXMedia: informasi tentang daftar putar media. Parameter URI menentukan nama daftar putar media. Untuk informasi lebih lanjut, lihat bagian "ExtXMedia" dari topik Detail parameter.

    • Type: jenis aktivitas. Dalam contoh ini, parameter ini diatur ke Transcode.

Ekstrak aliran video

Untuk mengekstrak aliran video dari file sumber MXF, Anda harus menghapus aliran audio. Contoh kode:

{
"Name" : "video-extract",
"Parameters" : {
"Outputs" : "[{\"TemplateId\":\"1fe5393bdb7b2b883f0a0fc91e81****\",\"Audio\":{\"Remove\":\"true\"}}]",
"MultiBitrateVideoStream" : "{\"URI\": \"sd/video1.m3u8\"}"
},
"Type" : "Transcode"
}
  • Dalam contoh ini, template transkoding kustom dengan ID 1fe5393bdb7b2b883f0a0fc91e81**** digunakan. Anda dapat melakukan langkah-langkah berikut untuk membuat template transkoding kustom: Masuk ke Konsol ApsaraVideo Media Processing (MPS). Di panel navigasi kiri, pilih Template Management > Transcoding Template. Pada halaman Template Encoding, klik Buat Template pada tab Template Kustom untuk membuat template transkoding kustom. Konfigurasikan parameter transkoding berdasarkan konfigurasi video berikut:

    • Codec: H.264

    • Resolusi: 384 × 216

    • Profil: Main

    • Bitrate: 240 Kbit/s

    • FPS: 25

    • Format piksel: YUV420P Ukuran GOP maks: 1 Panjang segmen: 4 detik

    • Format output: M3U8

  • Remove: menentukan apakah akan menghapus aliran audio dari output. Untuk informasi lebih lanjut, lihat Detail parameter.

  • MultiBitrateVIdeoStream: informasi tentang daftar putar media. Parameter URI menentukan nama daftar putar media.Detail parameter

  • Type: jenis aktivitas. Dalam contoh ini, parameter ini diatur ke Transcode.

Tentukan grup teks

Tentukan ID grup teks. Kedua aliran teks termasuk dalam grup teks yang sama. Contoh kode:

{
"Parameters" : {
"GroupId" : "subtitles"
},
"Type" : "SubtitleGroup"
}
  • GroupId: ID grup teks. Dalam contoh ini, parameter ini diatur ke subtitles.

  • Type: jenis aktivitas. Dalam contoh ini, parameter ini diatur ke SubtitleGroup.

Ekstrak aliran teks

Unggah file teks WebVTT ke OSS. Contoh kode:


{
"Name" : "subtitle-extract-1",
"Parameters" : {
"WebVTTSubtitleURL" : "http://example-bucket-****.oss-cn-hangzhou.aliyun-inc.com/ShawshankRedemption****.vtt",
"ExtXMedia" : "{\"URI\": \"zh/subtitle1-cn.m3u8\",\"Name\": \"subtitle-cn\",\"Language\": \"cn\"}"
},
"Type" : "Transcode"
}
  • WebVTTSubtitleURL: URL file teks. Anda dapat mengonfigurasi parameter OverrideParams saat memanggil operasi AddMedia untuk menimpa URL file teks. Untuk informasi lebih lanjut, lihat parameter OverrideParams dalam bagian "Parameter permintaan" dari topik AddMedia.

  • ExtXMedia: informasi tentang daftar putar media. Parameter URI menentukan nama daftar putar media. Untuk informasi lebih lanjut, lihat bagian "ExtXMedia" dari topik Detail parameter.

  • Type: jenis aktivitas. Dalam contoh ini, parameter ini diatur ke Transcode.

Hasilkan daftar putar utama

Hasilkan daftar putar utama berdasarkan aliran audio, video, dan teks yang diekstraksi. Contoh kode:

{
"Parameters" : {
"MasterPlayList" : "{\"MultiBitrateVideoStreams\": [{\"RefActivityName\": \"video-extract\",\"ExtXStreamInfo\": {\"BandWidth\": \"1110000\",\"Audio\": \"audios\",\"Subtitles\": \"subtitles\"}}]}"
},
"Type" : "GenerateMasterPlayList"
}
  • MasterPlayList: informasi tentang daftar putar utama. Untuk informasi lebih lanjut, lihat bagian "MasterPlayList" dari topik Detail parameter.

  • MultiBitrateVideoStreams: aliran video multi-bitrate. Untuk informasi lebih lanjut, lihat bagian "MasterPlayList" dari topik Detail parameter.

  • RefActivityName: nama aktivitas yang mengekstrak aliran video.

  • ExtXStreamInfo: atribut aliran video multi-bitrate. Parameter Audio menentukan grup audio, dan parameter Subtitles menentukan grup teks. Untuk informasi lebih lanjut, lihat bagian "ExtXStreamInfo" dari topik Detail parameter.

  • Type: jenis aktivitas. Dalam contoh ini, parameter ini diatur ke GenerateMasterPlayList.

Contoh kode topologi lengkap:

{
"Activities" : {
"package-node" : {
"Name" : "package-node",
"Parameters" : {
"Output" : "{\"Bucket\": \"processedmediafile\",\"Location\": \"oss-cn-hangzhou\",\"MasterPlayListName\": \"{MediaId}/{RunId}/hls/master.m3u8\"}"
},
"Type" : "PackageConfig"
},
"audioGroupNode" : {
"Name" : "audioGroupNode",
"Parameters" : {
"GroupId" : "audios"
},
"Type" : "AudioGroup"
},
"subtitleGroupNode" : {
"Name" : "subtitleGroupNode",
"Parameters" : {
"GroupId" : "subtitles"
},
"Type" : "SubtitleGroup"
},
"video-extract-1" : {
"Name" : "video-extract-1",
"Parameters" : {
"Outputs" : "[{\"TemplateId\":\"1fe5393bdb7b2b883f0a0fc91e81344a\",\"Audio\":{\"Remove\":\"true\"}}]",
"MultiBitrateVideoStream" : "{\"URI\": \"sd/video1.m3u8\"}"
},
"Type" : "Transcode"
},
"video-extract-2" : {
"Name" : "video-extract-1",
"Parameters" : {
"Outputs" : "[{\"TemplateId\":\"1fe5393bdb7b2b883f0a0fc91e81344b\",\"Audio\":{\"Remove\":\"true\"}}]",
"MultiBitrateVideoStream" : "{\"URI\": \"sd/video2.m3u8\"}"
},
"Type" : "Transcode"
},
"audio-extract-1" : {
"Name" : "audio-extract-1",
"Parameters" : {
"Outputs" : "[{\"TemplateId\":\"S00000001-100020\",\"AudioStreamMap\":\"0:a:0\"}]",
"ExtXMedia" : "{\"URI\": \"sd/audio-en-1.m3u8\",\"Name\": \"audio-en\",\"Language\": \"en-US\"}"
},
"Type" : "Transcode"
},
"audio-extract-2" : {
"Name" : "audio-extract-2",
"Parameters" : {
"Outputs" : "[{\"TemplateId\":\"S00000001-100020\",\"AudioStreamMap\":\"0:a:1\"}]",
"ExtXMedia" : "{\"URI\": \"sd/audio-cn.m3u8\",\"Name\": \"audio-cn\",\"Language\": \"cn\"}"
},
"Type" : "Transcode"
},
"audio-extract-3" : {
"Name" : "audio-extract-3",
"Parameters" : {
"Outputs" : "[{\"TemplateId\":\"S00000001-100020\",\"AudioStreamMap\":\"0:a:2\"}]",
"ExtXMedia" : "{\"URI\": \"sd/audio-de.m3u8\",\"Name\": \"audio-de\",\"Language\": \"de\"}"
},
"Type" : "Transcode"
},
"subtitle-extract-1" : {
"Name" : "subtitle-extract-1",
"Parameters" : {
"WebVTTSubtitleURL" : "http://example-bucket-****.oss-test.aliyun-inc.com/1****.vtt",
"ExtXMedia" : "{\"URI\": \"zh/subtitle1-cn.m3u8\",\"Name\": \"subtitle-cn\",\"Language\": \"cn\"}"
},
"Type" : "Transcode"
},
"subtitle-extract-2" : {
"Name" : "subtitle-extract-2",
"Parameters" : {
"WebVTTSubtitleURL" : "http://example-bucket-****.oss-cn-hangzhou.aliyun-inc.com/ShawshankRedemption****.vtt",
"ExtXMedia" : "{\"URI\": \"zh/subtitle1-en.m3u8\",\"Name\": \"subtitle-en\",\"Language\": \"en-US\"}"
},
"Type" : "Transcode"
},
"masterPlayListGenerate" : {
"Name" : "masterPlayListGenerate",
"Parameters" : {
"MasterPlayList" : "{\"MultiBitrateVideoStreams\": [{\"RefActivityName\": \"video-extract-1\",\"ExtXStreamInfo\": {\"BandWidth\": \"1110000\",\"Audio\": \"audios\",\"Subtitles\": \"subtitles\"}}, {\"RefActivityName\": \"video-extract-2\",\"ExtXStreamInfo\": {\"BandWidth\": \"5000000\",\"Audio\": \"audios\",\"Subtitles\":\"subtitles\"}}]}"
},
"Type" : "GenerateMasterPlayList"
},
"activityEnd" : {
"Name" : "activityEnd",
"Parameters" : {
"PublishType" : "Manual"
},
"Type" : "Report"
},
"activityStart" : {
"Name" : "activityStart",
"Parameters" : {
"PipelineId" : "900ededca77641ecbecd4f44cc3a2965",
"Role" : "AliyunMTSDefaultRole",
"InputFile" : "{\"Bucket\":\"videouploaded\",\"Location\":\"oss-cn-hangzhou\",\"ObjectPrefix\":\"uploaded/\"}"
},
"Type" : "Start"
}
},
"Dependencies" : {
"video-extract-1" : [ "masterPlayListGenerate" ],
"video-extract-2" : [ "masterPlayListGenerate" ],
"audio-extract-1" : [ "masterPlayListGenerate" ],
"audio-extract-2" : [ "masterPlayListGenerate" ],
"audio-extract-3" : [ "masterPlayListGenerate" ],
"subtitle-extract-1" : [ "masterPlayListGenerate" ],
"subtitle-extract-2" : [ "masterPlayListGenerate" ],
"package-node" : [ "video-extract-1", "video-extract-2","subtitleGroupNode", "audioGroupNode" ],
"audioGroupNode" : [ "audio-extract-1", "audio-extract-2","audio-extract-3"],
"subtitleGroupNode" : [ "subtitle-extract-1", "subtitle-extract-2" ],
"masterPlayListGenerate" : [ "activityEnd" ],
"activityEnd" : [ ],
"activityStart" : [ "package-node" ]
}
}

Contoh kode