Mengirimkan Konten YouTube Live melalui HLS

Dokumen ini menjelaskan cara menggunakan protokol HTTP Live Streaming (HLS) untuk melakukan streaming data live di YouTube dari encoder. Dokumen ini ditujukan untuk vendor encoder yang ingin menambahkan dukungan proses transfer HLS ke produk mereka. Proses transfer HLS adalah pilihan yang tepat untuk konten premium yang memerlukan kualitas tinggi dan resolusi tinggi dengan latensi yang relatif lebih tinggi. Untuk perbandingan singkat berbagai protokol penyerapan streaming yang didukung YouTube Live Streaming, lihat Perbandingan Protokol Penyerapan Streaming YouTube Live Streaming.

Untuk melakukan streaming data live menggunakan HLS, encoder harus mengirim serangkaian Playlist Media dan Segmen Media ke endpoint HLS YouTube menggunakan permintaan HTTP PUT atau POST. Dari perspektif encoder, endpoint HLS YouTube tampak sebagai server HTTP pasif.

Setiap Segmen Media mewakili konten multimedia aktual untuk sebagian kecil streaming yang berlangsung antara satu dan empat detik. Setiap Playlist Media menjelaskan cara menyusun kembali Segmen Media dalam urutan streaming yang benar.

Persyaratan Format Media

Proses transfer HLS YouTube memiliki persyaratan berikut untuk konten video dan audio:

  • Video dan audio harus di-mux 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 luminans tidak konstan. Lebih spesifiknya:
    • 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).
    • Warna primer harus Rec. 2020.
    • Koefisien matriks harus Rec. 2020 dengan luminans tidak konstan.
  • Nilai sampel rentang terbatas (atau rentang MPEG) dan rentang penuh (atau rentang JPEG) didukung. Penting untuk menetapkan rentang sesuai dengan rentang nilai sampel yang digunakan konten. Sebaiknya gunakan nilai sampel rentang terbatas.

Mendapatkan URL Proses Transfer HLS

Mendapatkan URL Proses Transfer HLS dari YouTube API

Untuk mendapatkan URL proses 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 proses transfer utama, dan kolom cdn.ingestionInfo.backupIngestionAddress menentukan URL proses transfer cadangan. Untuk mengetahui detail selengkapnya, lihat dokumentasi untuk resource liveStreams.

Mendapatkan URL Proses Transfer 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&copy=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&copy=0&file=

Untuk menambah keandalan, Anda dapat mengirim salinan kedua proses transfer yang berlebihan ke URL cadangan ini:

https://b.upload.youtube.com/http_upload_hls?cid=$STREAM_KEY&copy=1&file=

Perhatikan bahwa cadangan memiliki dua perbedaan dari URL utama: nama host dan parameter copy= telah berubah. Proses transfer cadangan harus mengirim nilai parameter copy= yang berbeda dari proses transfer utama untuk menghindari kerusakan streaming.

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 akhir, encoder harus menambahkan nama file Playlist Media atau Segmen Media ke akhir URL, sehingga menyelesaikan parameter file=.

Aturan berikut berlaku untuk nilai parameter file=:

  • Encoder dapat membuat nama file Playlist Media atau Segmen Media dari karakter alfanumerik, garis bawah, garis miring, tanda hubung, dan titik; tidak ada karakter lain yang didukung.
  • Encoder tidak boleh melakukan URL-encode pada 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

Playlist 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 melakukan transcoding konten streaming ke berbagai resolusi dan bitrate, encoder tidak perlu mengirim konten dengan bitrate yang berbeda ke YouTube. Oleh karena itu, YouTube hanya mendukung Playlist Media untuk proses transfer HLS, dan Playlist Master diabaikan. (Playlist Master menyediakan serangkaian Streaming Varian, yang masing-masing menjelaskan versi konten yang sama.)

Encoder harus:

  • mengirimkan tepat satu streaming yang dienkodekan dengan resolusi tertinggi yang ingin Anda tayangkan kepada pengguna (resolusi dan codec tunggal).
  • melakukan mux audio dan video.
  • menggunakan HTTPS dan koneksi persisten untuk semua permintaan.

Bagian berikut berisi persyaratan yang lebih spesifik untuk Playlist Media dan Segmen Media.

Playlist Media

Playlist Media berisi daftar Segmen Media yang dapat digabungkan untuk mewakili streaming multimedia yang berkelanjutan dan dapat didekodekan. Playlist Media memberi tahu server Segmen Media mana yang diharapkan dan cara mengurutkannya dengan benar dalam streaming yang disusun kembali.

Persyaratan

  • Nama file Playlist Media harus diakhiri dengan .m3u8 atau .m3u.

  • Playlist Media pertama yang dikirim untuk streaming harus dimulai dengan nomor urutan 0 dan nomor urutan harus meningkat secara monoton.

  • Tag EXT-X-MEDIA-SEQUENCE harus mengidentifikasi nomor urutan Segmen Media pertama yang tercantum dalam playlist.

  • Playlist Media tidak boleh berisi lebih dari lima segmen yang belum selesai. Segmen belum selesai jika server belum menerimanya atau mengonfirmasi penerimaannya.

    Selain segmen yang belum selesai, sertakan juga beberapa segmen yang dikonfirmasi di setiap Playlist Media. Praktik ini membuat segmen lebih kecil kemungkinannya untuk dilewati jika Playlist Media hilang di sisi server. Misalnya, Anda dapat menyertakan hingga dua segmen yang dikonfirmasi dan hingga lima segmen yang belum selesai di setiap Playlist Media.

    Perhatikan bahwa server mengonfirmasi penerimaan Segmen Media dengan menampilkan respons 200 (OK) atau 202 (Accepted) saat upload segmen tersebut. Respons 202 menunjukkan bahwa server menerima segmen sebelum playlist yang mengidentifikasi segmen tersebut.

  • Kirim Playlist Media yang diperbarui untuk setiap Segmen Media sehingga server dapat pulih dengan cepat jika Playlist Media hilang.

  • Saat server mengonfirmasi penerimaan Segmen Media, Anda dapat meningkatkan nilai tag EXT-X-MEDIA-SEQUENCE untuk mencegah Playlist Media menjadi terlalu panjang. Misalnya, jika server telah mengonfirmasi penerimaan sembilan Segmen Media pertama, Playlist Media berikutnya dapat mencantumkan Segmen Media kedelapan, kesembilan, dan kesepuluh.

  • Tag EXT-X-KEY dan EXT-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 streaming, 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 dalam playlist.
    • Nama file Segmen Media harus unik di seluruh reboot encoder dan streaming dimulai ulang.
  • Format
    • Segmen Media harus dalam format M2TS dan harus melakukan inisialisasi 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 di-mux.
    • 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.
    • Sebaiknya Segmen Media memiliki durasi antara satu dan empat detik, seperti yang dibahas di bagian berikut. Durasi Segmen Media tidak boleh 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 proses transfer HLS digunakan untuk konten premium yang memerlukan kualitas tinggi dan resolusi tinggi. Proses transfer HLS biasanya memiliki latensi yang lebih tinggi daripada proses transfer berbasis RTMP dan WebRTC karena proses transfer HLS berbasis segmen.

Sebaiknya gunakan durasi Segmen Media antara satu hingga empat detik karena memiliki Segmen Media yang lebih kecil dapat menghasilkan latensi yang lebih rendah, meskipun dengan biaya tingkat rebuffer 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 rasio bit.

Perhatikan bahwa HEVC umumnya menghasilkan kompresi data 25% hingga 50% lebih banyak dengan kualitas video yang sama dibandingkan dengan H.264. Dengan demikian, nilai kecepatan bit di ujung bawah rentang yang disarankan dapat digunakan dengan HEVC untuk menghemat bandwidth, yang sangat berguna untuk konten 4K.

Persyaratan Lainnya

  • Encoder harus menetapkan header User-Agent dalam permintaan HTTP menggunakan sintaksis berikut, yang mencakup nama produsen, nama model, dan versi:

    User-Agent: <manufacturer> / <model> / <version>
    

Teks tertutup

Proses transfer HLS mendukung dua opsi untuk mengirim teks tertutup:

  • Kirim teks tertutup menggunakan permintaan POST HTTP terpisah. Opsi ini berfungsi untuk semua proses transfer HLS.
  • Teks tertutup 608/708 yang disematkan berfungsi dengan proses transfer HLS yang menggunakan codec video H264 , tetapi tidak berfungsi dengan proses transfer 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 Playlist Media yang dikirim 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 mengharuskan klien untuk MENGHAPUS resource apa pun dalam streaming, dan server tersebut mengabaikan permintaan DELETE. Untuk alasan performa, YouTube merekomendasikan agar klien tidak mengirim DELETE.

202 (Accepted)

Respons HTTP 202 (Accepted) menunjukkan bahwa server YouTube menerima Segmen Media sebelum menerima Playlist Media yang berisi Segmen Media tersebut. Hal ini menunjukkan kepada klien bahwa klien harus mengirim Playlist Media yang berisi Segmen Media tersebut sesegera mungkin untuk mencegah penundaan dalam memproses segmen tersebut. Perhatikan bahwa hal ini tidak akan menjadi masalah jika encoder mengirim Playlist Media yang diperbarui untuk setiap Segmen Media.

400 (Bad Request)

Respons HTTP 400 (Bad Request) menunjukkan bahwa salah satu masalah berikut terjadi:

  • Bentuk URL salah
  • Playlist tidak dapat diuraikan atau berisi tag yang tidak didukung
401 (Unauthorized)

Respons HTTP 401 (Unauthorized) menunjukkan bahwa parameter cid di URL dasar untuk endpoint HLS YouTube rusak atau telah berakhir masa berlakunya. 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 (Internal Server Error)

Respons HTTP 500 (Internal Server Error) menunjukkan bahwa server tidak dapat memproses permintaan. Untuk error ini, sebaiknya coba lagi permintaan dengan backoff eksponensial.