Dokumen ini menjelaskan cara menggunakan protokol HTTP Live Streaming (HLS) untuk melakukan streaming data live di YouTube dari encoder. Dokumen ini ditujukan bagi vendor encoder yang ingin menambahkan dukungan penyerapan HLS ke produk mereka. Penyerapan HLS adalah pilihan yang baik untuk konten premium yang memerlukan kualitas tinggi dan resolusi tinggi dengan latensi yang relatif lebih tinggi. Untuk perbandingan singkat berbagai protokol penyerapan yang didukung YouTube Live Streaming, lihat Perbandingan Protokol Penyerapan YouTube Live Streaming.
Untuk melakukan streaming data live menggunakan HLS, encoder harus mengirimkan serangkaian Playlist Media dan Segmen Media ke endpoint HLS YouTube menggunakan permintaan HTTP PUT
atau POST
. Dari perspektif encoder, endpoint HLS YouTube
tampaknya merupakan server HTTP pasif.
Setiap Segmen Media merepresentasikan konten multimedia sebenarnya untuk sebagian kecil streaming yang berdurasi antara satu dan empat detik. Setiap Playlist Media menjelaskan cara menyusun kembali Segmen Media dalam urutan streaming yang benar.
Persyaratan Format Media
Penyerapan HLS YouTube memiliki persyaratan berikut untuk konten video dan audio:
- Video dan audio harus dimultipleks dalam format M2TS.
- Codec video yang didukung adalah H.264 dan HEVC.
- Kecepatan frame hingga 60 fps didukung.
- Hanya GOP tertutup yang didukung.
- Codec audio yang didukung adalah AAC, dan hanya audio satu trek yang didukung.
Lihat persyaratan yang lebih mendetail di bagian Segmen Media.
HDR
Video Rentang Dinamis Tinggi (HDR) didukung menggunakan codec HEVC dan memiliki persyaratan tambahan berikut:
- Standar warna yang didukung adalah PQ dan HLG 10-bit dengan luminance tidak konstan.
Lebih tepatnya:
- Format chroma harus YUV 4:2:0 10-bit.
- Fungsi transfer harus PQ (juga dikenal sebagai SMPTE ST 2084) atau HLG (juga dikenal sebagai ARIB STD-B67).
- Color primaries harus Rec. 2020.
- Koefisien matriks harus berupa Rec. 2020 dengan luminans tidak konstan.
- Nilai sampel rentang terbatas (atau rentang MPEG) dan rentang penuh (atau rentang JPEG) didukung. Rentang harus ditetapkan sesuai dengan rentang nilai sampel yang digunakan konten. Sebaiknya gunakan nilai sampel rentang terbatas.
Mendapatkan URL Penyerapan HLS
Mendapatkan URL Penyerapan HLS dari YouTube API
Untuk mendapatkan URL transfer lengkap, encoder dapat menggunakan YouTube Live Streaming API untuk menyisipkan resource liveStream dengan properti berikut:
"cdn": {
"ingestionType": "hls",
"frameRate": "variable",
"resolution": "variable"
}
Dalam respons API, kolom cdn.ingestionInfo.ingestionAddress
menentukan
URL penyerapan utama, dan kolom cdn.ingestionInfo.backupIngestionAddress
menentukan URL penyerapan cadangan. Untuk mengetahui detail selengkapnya, lihat dokumentasi untuk
resource liveStreams
.
Mendapatkan URL Penyerapan HLS dari YouTube Creator Studio
Di antarmuka web YouTube Creator Studio, setelah kreator mengklik "Buat Streaming", YouTube akan menampilkan "Kunci Streaming" yang terdiri dari karakter alfanumerik dan tanda hubung. Kunci rahasia ini mengidentifikasi kreator dan streaming ke YouTube.
Anda dapat membuat URL HLS dari kunci streaming ini, sebagai berikut:
https://a.upload.youtube.com/http_upload_hls?cid=$STREAM_KEY©=0&file=
... dengan $STREAM_KEY
adalah Kunci Streaming yang ditampilkan di
antarmuka web.
Misalnya:
https://a.upload.youtube.com/http_upload_hls?cid=abcd-efgh-ijkl-mnop-qrst©=0&file=
Untuk keandalan tambahan, Anda dapat mengirimkan salinan kedua yang redundan dari penyerapan ke URL cadangan ini:
https://b.upload.youtube.com/http_upload_hls?cid=$STREAM_KEY©=1&file=
Perhatikan bahwa cadangan memiliki dua perbedaan dari URL utama: nama host dan parameter copy=
telah berubah. Penyerapan cadangan harus mengirimkan
nilai parameter copy=
yang berbeda dari penyerapan utama untuk menghindari
kerusakan aliran.
Menyelesaikan URL Proses Transfer HLS
URL yang diperoleh menggunakan salah satu metode adalah template yang tidak lengkap; setiap URL diakhiri dengan parameter kueri file=
kosong. Untuk membentuk URL final, encoder harus menambahkan nama file Daftar Media atau Segmen Media ke akhir URL, sehingga menyelesaikan parameter file=
.
Aturan berikut berlaku untuk nilai parameter file=
:
- Encoder dapat membuat nama file Segmen Media atau Playlist Media dari karakter alfanumerik, garis bawah, garis miring, tanda hubung, dan titik; karakter lain tidak didukung.
- Encoder tidak boleh mengenkode URL nama file.
- Encoder dapat menyertakan komponen jalur relatif atau absolut dalam nama file, meskipun hal ini tidak pernah diperlukan. Jika encoder menyertakan komponen jalur dalam nama file Segmen Media, encoder harus mereferensikan jalur yang sama dalam entri playlist yang sesuai.
Persyaratan Protokol HLS
Daftar Media dan Segmen Media yang dikirim oleh encoder harus sesuai dengan Spesifikasi HTTP Live Streaming Edisi ke-2.
Spesifikasi HLS menentukan dua jenis playlist: Playlist Media dan Playlist Master. Karena YouTube mentranskode konten yang di-streaming ke resolusi dan bitrate yang berbeda, encoder tidak perlu mengirim konten dengan bitrate yang berbeda ke YouTube. Akibatnya, YouTube hanya mendukung Playlist Media untuk penyerapan HLS, dan Playlist Master diabaikan. (Playlist Utama menyediakan serangkaian Aliran Varian, yang masing-masing menjelaskan versi konten yang sama.)
Encoder harus:
- mengirimkan tepat satu aliran yang dienkode dengan resolusi tertinggi yang ingin Anda sajikan kepada pengguna (resolusi dan codec tunggal).
- menggabungkan audio dan video.
- menggunakan HTTPS dan koneksi persisten untuk semua permintaan.
Bagian berikut berisi persyaratan yang lebih spesifik untuk Daftar Putar Media dan Segmen Media.
Playlist Media
Playlist Media berisi daftar Segmen Media yang dapat digabungkan untuk merepresentasikan aliran multimedia yang berkelanjutan dan dapat didekode. Daftar Putar Media memberi tahu server Segmen Media mana yang diharapkan dan cara mengurutkannya dengan benar dalam aliran yang disusun ulang.
Persyaratan
Nama file Playlist Media harus diakhiri dengan
.m3u8
atau.m3u
.Playlist Media pertama yang dikirim untuk streaming harus dimulai pada nomor urut
0
dan nomor urut harus meningkat secara monoton.Tag
EXT-X-MEDIA-SEQUENCE
harus mengidentifikasi nomor urut Segmen Media pertama yang tercantum dalam playlist.Playlist Media tidak boleh berisi lebih dari lima segmen yang belum selesai. Segmen belum diproses jika server belum menerimanya atau mengonfirmasi penerimaannya.
Selain segmen yang belum diselesaikan, sertakan juga beberapa segmen yang telah dikonfirmasi di setiap Playlist Media. Praktik ini mengurangi kemungkinan segmen dilewati jika Playlist Media hilang di sisi server. Misalnya, Anda dapat menyertakan hingga dua segmen yang telah dikonfirmasi dan hingga lima segmen yang belum dikonfirmasi dalam setiap Playlist Media.
Perhatikan bahwa server mengonfirmasi penerimaan Segmen Media dengan menampilkan respons
200
(OK
) atau202
(Accepted
) saat mengupload segmen tersebut. Respons202
menunjukkan bahwa server menerima segmen sebelum playlist mengidentifikasi segmen tersebut.Kirim Playlist Media yang diperbarui untuk setiap Segmen Media agar server dapat pulih dengan cepat jika Playlist Media hilang.
Saat server mengonfirmasi penerimaan Segmen Media, Anda dapat menaikkan nilai tag
EXT-X-MEDIA-SEQUENCE
untuk mencegah Playlist Media menjadi terlalu panjang. Misalnya, jika server telah mengonfirmasi penerimaan sembilan Segmen Media pertama, Daftar Putar Media berikutnya dapat mencantumkan Segmen Media kedelapan, kesembilan, dan kesepuluh.Tag
EXT-X-KEY
danEXT-X-SESSION-KEY
tidak didukung.
Contoh
Daftar berikut menunjukkan contoh file yang diharapkan dikirim oleh encoder:
Media Playlist file with seqnum #0
Media Segment file #0
Media Playlist file with seqnum #0-#1
Media Segment file #1
Media Playlist file with seqnum #0-#2
Media Segment file #2
Media Playlist file with seqnum #1-#3
Media Segment file #3
...
Contoh berikut menunjukkan Playlist Media yang dikirim di tengah streaming video live. Karena contohnya berasal dari tengah stream, tag
EXT-X-MEDIA-SEQUENCE
memiliki nilai bukan nol.
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:4
#EXT-X-MEDIA-SEQUENCE:2680
#EXTINF:3.975,
fileSequence2680.ts
#EXTINF:3.941,
fileSequence2681.ts
#EXTINF:3.975,
fileSequence2682.ts
Segmen Media
Daftar berikut mengidentifikasi persyaratan untuk Segmen Media:
- Nama file
- Nama file Segmen Media di URL harus memiliki ekstensi nama file
.ts
dan harus cocok dengan nama file di playlist. - Nama file Segmen Media harus unik di seluruh proses mulai ulang encoder dan mulai ulang streaming.
- Nama file Segmen Media di URL harus memiliki ekstensi nama file
- Format
- Segmen Media harus dalam format M2TS dan harus dapat diinisialisasi sendiri.
- Setiap Segmen M2TS harus berisi satu Program MPEG-2.
- Segmen M2TS harus berisi PAT dan PMT, dan dua paket Transport Stream pertama dalam Segmen harus berupa PAT dan PMT.
- Konten
- Video dan audio harus dimultipleks.
- Codec video yang didukung adalah H.264 dan HEVC.
- HDR dengan HEVC didukung (lihat persyaratan HDR).
- Kecepatan frame hingga 60 fps didukung.
- Hanya GOP tertutup yang didukung.
- Codec audio yang didukung adalah AAC, dan hanya audio satu trek yang didukung.
- Segmen Media direkomendasikan memiliki durasi antara satu dan empat detik, seperti yang dibahas di bagian berikut. Segmen Media tidak boleh berdurasi lebih dari 5 detik.
- Segmen media hanya boleh dienkripsi di lapisan TLS/SSL dengan HTTPS. Mekanisme enkripsi lainnya tidak didukung.
Durasi Segmen Media
Kami berharap penyerapan HLS digunakan untuk konten premium yang memerlukan kualitas tinggi dan resolusi tinggi. Penyerapan HLS biasanya memiliki latensi yang lebih tinggi daripada penyerapan berbasis RTMP dan WebRTC karena penyerapan HLS berbasis segmen.
Sebaiknya gunakan durasi Segmen Media satu hingga empat detik karena Segmen Media yang lebih kecil dapat menghasilkan latensi yang lebih rendah, meskipun dengan biaya rasio buffering ulang yang lebih tinggi dan efisiensi encoding yang lebih rendah. Seperti yang disebutkan di bagian sebelumnya, Segmen Media tidak boleh lebih dari 5 detik.
Rasio Bit
Pusat Bantuan YouTube memberikan panduan untuk setelan bitrate.
Perhatikan bahwa HEVC umumnya menghasilkan kompresi data 25% hingga 50% lebih banyak pada kualitas video yang sama dibandingkan dengan H.264. Oleh karena itu, nilai bitrate di ujung bawah rentang yang disarankan dapat digunakan dengan HEVC untuk menghemat bandwidth, yang sangat berguna untuk konten 4K.
Persyaratan Lainnya
Encoder harus menyetel header
User-Agent
dalam permintaan HTTP menggunakan sintaksis berikut, yang mencakup nama produsen, nama model, dan versi:User-Agent: <manufacturer> / <model> / <version>
Teks tertutup
Penyerapan HLS mendukung dua opsi untuk mengirim teks tertutup:
- Kirim teks tertutup menggunakan permintaan POST HTTP terpisah. Hal ini berfungsi untuk semua penyerapan HLS.
- Subtitel tertutup 608/708 tersemat berfungsi dengan penyerapan HLS yang menggunakan codec video H264, tetapi tidak berfungsi dengan penyerapan yang menggunakan codec video HEVC. Untuk mengetahui detail selengkapnya, lihat Persyaratan Teks Otomatis di Pusat Bantuan YouTube.
Kode respons HTTP
Bagian berikut menjelaskan kode respons yang ditampilkan YouTube sebagai respons terhadap Segmen Media dan Daftar Putar Media yang dikirimkan menggunakan HLS.
- 200 (OK)
Sebagai respons terhadap permintaan PUT atau POST, respons HTTP 200 (OK) menunjukkan bahwa server YouTube menerima operasi yang diharapkan dan menanganinya dengan berhasil.
Sebagai respons terhadap permintaan DELETE, respons HTTP 200 (OK) menunjukkan bahwa server YouTube menerima dan mengabaikan permintaan tersebut. Server YouTube tidak mewajibkan klien untuk MENGHAPUS resource apa pun dalam streaming, dan server mengabaikan permintaan DELETE. Untuk alasan performa, YouTube merekomendasikan agar klien tidak mengirimkan DELETE.
- 202 (Accepted)
Respons HTTP 202 (Diterima) menunjukkan bahwa server YouTube menerima Segmen Media sebelum menerima Playlist Media yang berisi Segmen Media tersebut. Hal ini menunjukkan kepada klien bahwa klien harus mengirimkan Playlist Media yang berisi Segmen Media tersebut sesegera mungkin untuk mencegah penundaan dalam pemrosesan segmen tersebut. Perhatikan bahwa hal ini tidak akan menjadi masalah jika encoder mengirimkan Playlist Media yang diperbarui untuk setiap Segmen Media.
- 400 (Bad Request)
Respons HTTP 400 (Permintaan Buruk) menunjukkan bahwa salah satu masalah berikut terjadi:
- Bentuk URL salah
- Playlist tidak dapat diuraikan atau berisi tag yang tidak didukung
- 401 (Tidak Sah)
Respons HTTP 401 (Tidak Sah) menunjukkan bahwa parameter cid di URL dasar untuk endpoint HLS YouTube rusak atau telah berakhir. Klien harus memperbarui parameter
cid
untuk melanjutkan.- 405 (Method Not Allowed)
Respons HTTP 405 (Method Not Allowed) menunjukkan bahwa permintaan tersebut bukan permintaan POST, PUT, atau DELETE.
- 500 (Error Server Internal)
Respons HTTP 500 (Internal Server Error) menunjukkan bahwa server tidak dapat memproses permintaan. Untuk error ini, sebaiknya coba lagi permintaan dengan backoff eksponensial.