Saat klien meminta file M3U8, fitur ini secara otomatis menambahkan parameter otentikasi dari permintaan ke URI kunci dalam tag #EXT-X-KEY. Hal ini mengamankan akses ke kunci enkripsi Anda tanpa mengubah server origin dan mencegah pemutaran video oleh pihak yang tidak berwenang.
Kasus Penggunaan
Dalam alur kerja enkripsi HLS standar, tag #EXT-X-KEY menentukan URI untuk mengambil kunci dekripsi. Jika URI tersebut merupakan alamat publik tetap yang tidak dilindungi, siapa pun yang mendapatkan file M3U8 dapat mengunduh kunci dan mendekripsi konten video, sehingga enkripsi menjadi tidak efektif.
Untuk mengatasi masalah ini, fitur ini melampirkan token otentikasi dinamis yang dapat diverifikasi pada setiap permintaan kunci. Fitur ini ideal untuk skenario yang memerlukan kontrol akses terhadap kunci enkripsi HLS, seperti:
Video berbayar dan pendidikan daring: Untuk mencegah pengguna membagikan URL M3U8 kepada pengguna non-pembayar, Anda dapat menghasilkan parameter otentikasi unik untuk setiap pengguna yang telah login. Hal ini memastikan hanya pengguna yang berwenang yang dapat mengambil kunci dekripsi dalam periode validitasnya.
Perlindungan hak cipta siaran langsung: Untuk acara olahraga besar atau siaran langsung, Anda dapat menggabungkan parameter otentikasi yang dihasilkan secara dinamis dengan otentikasi URL CDN. Ini memungkinkan kontrol akses detail halus terhadap siaran langsung dan secara efektif mencegah hotlinking.
Cara Kerja
Klien mengirim permintaan ke server aplikasi Anda. Berdasarkan logika bisnis Anda, seperti login pengguna, server aplikasi menghasilkan parameter otentikasi dengan periode validitas dan signature (misalnya,
token=xxxx) dan mengembalikannya ke klien.Klien menambahkan parameter otentikasi ini ke akhir URL permintaan file M3U8 dan mengirim permintaan M3U8 ke titik kehadiran (PoP) CDN.
Sebelum mengembalikan file M3U8, PoP CDN mengurai kontennya, menemukan tag
#EXT-X-KEY, dan menambahkan parameter otentikasi dari URL permintaan klien ke atributURItag tersebut.Klien menerima file M3U8 yang telah ditulis ulang dari CDN dan mengirim permintaan ke server kunci menggunakan URI kunci baru yang kini mencakup parameter otentikasi.
Server kunci menerima permintaan kunci, mengekstrak parameter otentikasi dari URL, dan memvalidasinya. Jika validasi berhasil, server mengembalikan kunci dekripsi. Jika tidak, permintaan ditolak.
Setelah mendapatkan kunci, klien mendekripsi aliran video TS dan memulai pemutaran.
Fitur ini tidak mengenkripsi konten video. Sebelum menggunakan fitur ini, pastikan segmen video (file TS) di server origin Anda telah dienkripsi sesuai standar HLS, seperti AES-128. File M3U8 asli juga harus berisi tag #EXT-X-KEY yang benar. Untuk informasi lebih lanjut tentang enkripsi video, lihat Cara menghasilkan dan mengenkripsi file M3U8.
Server aplikasi dan server kunci dijelaskan di sini untuk membantu Anda memahami fitur enkripsi dan penulisan ulang M3U8. Fitur ini tidak mengimplementasikan server aplikasi atau server kunci. Anda harus mengimplementasikan fungsionalitasnya sendiri untuk menyelesaikan proses otentikasi kunci HLS.
Tag
#EXT-X-KEYmenentukan apakah konten dienkripsi. Untuk informasi lebih lanjut tentang tag file M3U8, lihat Apa saja isi file M3U8 HLS.
Prosedur
-
Login ke CDN console.
-
Di panel navigasi kiri, klik Domain Names.
-
Pada halaman Domain Names, temukan nama domain target dan klik Manage di kolom Actions.
-
Di panel navigasi domain, klik Video.
Di bagian M3U8 Encryption and Rewrite, aktifkan sakelar M3U8 Encryption and Rewrite.
CatatanSetelah Anda mengaktifkan M3U8 Encryption and Rewrite, nama parameter default-nya adalah
MtsHlsUriToken.Opsi: Untuk mengubah nama parameter agar sesuai dengan klien Anda, lakukan langkah-langkah berikut:
Klik Modify di samping Custom Parameter Name.
Di kotak dialog Custom Parameter Name, atur Parameter Name.
Jika Anda tidak menentukan nilai, nama parameter akan menggunakan default
MtsHlsUriToken.CatatanNama parameter bersifat case-sensitive. Pastikan nama parameter yang Anda atur persis sama dengan nama parameter dalam permintaan klien. Misalnya, jika permintaan klien mencakup parameter
MtsHlsUriTokendan Anda mengatur nama parameter kustom di CDN console menjadimtshlsuritoken, konfigurasi tidak akan berlaku.Klik OK untuk menyelesaikan konfigurasi.
Contoh
Akses file M3U8 yang dipercepat CDN di browser Anda dan tambahkan MtsHlsUriToken=tokenxxxxx di akhir permintaan. Contoh: http://<CDN-accelerated domain name>/video.m3u8?MtsHlsUriToken=tokenxxxxx
Di panel Network developer tools browser Anda, permintaan untuk file M3U8 mencakup parameter kustom, tetapi permintaan kunci berikutnya tidak.
Di CDN console, aktifkan M3U8 Encryption and Rewrite. Jika diperlukan, Anda dapat mengatur nama parameter kustom (demonstrasi ini menggunakan parameter default
MtsHlsUriToken). Di CDN console, aktifkan fitur M3U8 encryption and rewrite, dan atur Custom Parameter Name menjadiMtsHlsUriToken.Ulangi Langkah 1. Akses file M3U8 yang dipercepat CDN di browser dan tambahkan MtsHlsUriToken=tokenxxxxx di akhir permintaan.
Di panel Network developer tools browser Anda, Anda dapat melihat bahwa permintaan untuk alamat kunci kini mencakup parameter kustom.
URL permintaan untuk file kunci
encryption_key.keymencakup parameterMtsHlsUriToken=tokenxxxxx, dan respons memiliki kode status 206 serta Content-Length 16 byte.
FAQ
Apa itu protokol HLS?
HTTP Live Streaming (HLS) adalah protokol transport media streaming berbasis HTTP yang dikembangkan oleh Apple. Protokol ini bekerja melalui HTTP, memungkinkan klien mengunduh file secara berurutan dari server. Protokol ini mensyaratkan bahwa video harus dalam format kontainer Transport Stream (TS). Selain file video TS, HLS menggunakan file teks dengan ekstensi M3U8 untuk mengontrol pemutaran. File M3U8 ini merupakan daftar putar yang berisi daftar segmen media. HLS bekerja dengan membagi aliran video menjadi segmen-segmen TS kecil. Untuk memulai pemutaran, klien pertama-tama mengunduh daftar putar M3U8, lalu mengunduh setiap segmen media secara berurutan menggunakan URL yang ada di daftar putar tersebut.
Apa saja isi file M3U8 HLS?
Tag dasar file M3U8:
#EXTM3U: Header file M3U8. Harus menjadi baris pertama daftar putar.EXT-X-MEDIA-SEQUENCE: Nomor urut segmen TS pertama dalam daftar putar. Nilainya biasanya 0. Dalam streaming langsung, nomor urut ini mengidentifikasi titik awal segmen siaran langsung. Contohnya,#EXT-X-MEDIA-SEQUENCE:0.#EXT-X-TARGETDURATION: Durasi maksimum segmen media. Contohnya,#EXT-X-TARGETDURATION:10menunjukkan bahwa durasi maksimum setiap segmen adalah 10 detik.#EXT-X-ALLOW-CACHE: Menunjukkan apakah klien boleh menyimpan cache segmen media. Nilainya bisa berupa#EXT-X-ALLOW-CACHE:YESatau#EXT-X-ALLOW-CACHE:NO. Nilai default-nya adalah YES.#EXT-X-ENDLIST: Menandakan akhir daftar putar.#EXTINF: Informasi tambahan tentang segmen media, seperti durasi dan bandwidth-nya. Formatnya biasanya#EXTINF:<duration>,[<title>]. Nilai sebelum koma adalah durasi segmen media saat ini. Durasi segmen harus kurang dari atau sama dengan nilai tag#EXT-X-TARGETDURATION.#EXT-X-VERSION: Nomor versi daftar putar M3U8.#EXT-X-DISCONTINUITY: Tag ini menandakan adanya jeda antara segmen media sebelumnya dan segmen berikutnya.#EXT-X-PLAYLIST-TYPE: Menunjukkan jenis aliran.#EXT-X-KEY: Menentukan cara mendekripsi segmen media yang dienkripsi. Contohnya:#EXT-X-KEY:METHOD=AES-128,URI="https://example.com/video.key?token=xxx". Contoh ini menunjukkan bahwa algoritma enkripsinya adalah AES-128. Kunci diperoleh dengan mengirim permintaan kehttps://example.com/video.key?token=xxx. Setelah kunci diperoleh, kunci tersebut disimpan secara lokal dan digunakan untuk mendekripsi file video TS berikutnya.
Cara menghasilkan dan mengenkripsi file M3U8?
Hasilkan kunci enkripsi.
Kunci ini biasanya berupa string acak 16 byte untuk enkripsi AES-128. Anda dapat menggunakan OpenSSL untuk menghasilkan file kunci yang berisi 16 byte acak dengan menjalankan perintah berikut:
openssl rand 16 > encryption_key.keySiapkan file
key_info.txtuntuk enkripsi. Alat enkripsi akan mengenkripsi file video HLS berdasarkan file ini.https://example.com/encryption_key.key /path/to/local/encryption_key.keyBaris pertama adalah URL kunci enkripsi yang Anda hasilkan di Langkah 1. Kami menyarankan Anda menempatkan file tersebut di server origin OSS yang dipercepat CDN dan menggunakan nama domain yang dipercepat CDN untuk mengakses file tersebut.
Baris kedua adalah jalur mutlak file kunci lokal.
Gunakan alat
FFmpeguntuk menghasilkan dan mengenkripsi file video HLS.ffmpeg -i input_video.mp4 -c:v copy -c:a copy -hls_time 10 -hls_key_info_file key_info.txt -hls_list_size 0 output_playlist.m3u8-i input_video.mp4: Menentukan file video yang akan dikonversi, seperti video dalam formatMP4.-c:v copy: Menyalin aliran video secara langsung tanpa re-encoding.-c:a copy: Menyalin aliran audio secara langsung tanpa re-encoding.-hls_time 10: Mengatur durasi setiap fileTSmenjadi 10 detik. Anda dapat mengubah pengaturan ini sesuai dengan durasi video asli.-hls_key_info_file key_info.txt: Menentukan file yang berisi informasi kunci enkripsi.-hls_list_size 0: Mengatur jumlah indeks fileTSyang dipertahankan dalam fileM3U8. Nilai0berarti semua indeks file.tsdipertahankan.output_playlist.m3u8: Nama file daftar putar HLS keluaran (yaitu nama fileM3U8).
Simpan file
TSdan fileM3U8yang telah dienkripsi ke server, seperti server origin OSS yang dipercepat CDN. Kemudian, gunakan nama domain yang dipercepat CDN di browser untuk mengakses fileM3U8guna mengaktifkan pemutaran video terenkripsi yang menggunakan protokolHLS.