Mengirimkan Konten YouTube Live melalui HLS

Dokumen ini menjelaskan cara menggunakan protokol HTTP Live Streaming (HLS) untuk men-streaming data live di YouTube dari encoder. Dokumen ini ditujukan untuk vendor encoder yang ingin menambahkan dukungan penyerapan HLS ke produk mereka. Proses transfer 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 proses transfer yang didukung YouTube Live Streaming, lihat Perbandingan Protokol Proses Transfer 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 terlihat seperti server HTTP pasif.

Setiap Segmen Media mewakili konten multimedia yang sebenarnya untuk bagian singkat streaming yang berlangsung antara satu hingga empat detik. Setiap Playlist Media menjelaskan cara menyusun ulang 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 10-bit dan HLG dengan luminans tidak konstan. Lebih tepatnya:
    • Format kromatik harus YUV 4:2:0 10-bit.
    • Fungsi transfer harus berupa PQ (juga dikenal sebagai SMPTE ST 2084) atau HLG (juga dikenal sebagai ARIB STD-B67).
    • Warna primer 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 dengan 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 transfer utama, dan kolom cdn.ingestionInfo.backupIngestionAddress menentukan URL transfer cadangan. Untuk 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 keandalan tambahan, Anda dapat mengirimkan salinan kedua proses transfer yang redundan 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 parameter value copy= yang berbeda dari proses transfer utama untuk menghindari kerusakan streaming.

Menyelesaikan URL Proses Transfer HLS

URL yang diperoleh menggunakan salah satu metode tersebut adalah template yang tidak lengkap; setiap URL berakhir dengan parameter kueri file= kosong. Untuk membentuk URL final, encoder harus menambahkan nama file Playlist Media atau Segmen Media ke akhir URL, sehingga melengkapi 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 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

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 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 akan diabaikan. (Playlist Master menyediakan serangkaian Streaming Variant, yang masing-masing menjelaskan versi konten yang sama.)

Encoder harus:

  • kirim tepat satu streaming 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 Playlist Media dan Segmen Media.

Playlist Media

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

Persyaratan

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

  • Playlist Media pertama yang dikirim untuk streaming harus dimulai dari 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 diputar. Segmen masih tertunda jika server belum menerimanya atau mengonfirmasi penerimaan segmen tersebut.

    Selain segmen yang belum selesai, sertakan juga beberapa segmen yang diakui di setiap Playlist Media. Praktik ini mengurangi kemungkinan segmen dilewatkan jika Playlist Media hilang di sisi server. Misalnya, Anda dapat menyertakan hingga dua segmen yang diakui dan hingga lima segmen yang belum diakui di setiap Playlist Media.

    Perhatikan bahwa server mengonfirmasi penerimaan Segmen Media dengan menampilkan respons 200 (OK) atau 202 (Accepted) pada upload segmen tersebut. Respons 202 menunjukkan bahwa server menerima segmen sebelum playlist 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 menambahkan 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 mungkin 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 akan dikirim 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 contoh berasal dari tengah aliran data, tag EXT-X-MEDIA-SEQUENCE memiliki nilai yang 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 mulai ulang encoder dan mulai ulang streaming.
  • Format
    • Segmen Media harus dalam format M2TS dan harus melakukan inisialisasi mandiri.
    • 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.
    • Segmen Media direkomendasikan untuk memiliki durasi antara satu hingga empat detik, seperti yang dibahas di bagian berikut. Segmen Media tidak boleh memiliki durasi 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. 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 satu hingga empat detik karena memiliki 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 kecepatan 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 bagian 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. Ini berfungsi untuk semua proses transfer HLS.
  • Subtitel tertutup 608/708 tersemat 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 berhasil menanganinya.

Sebagai respons terhadap permintaan DELETE, respons HTTP 200 (OK) menunjukkan bahwa server YouTube menerima dan mengabaikan permintaan tersebut. Server YouTube tidak memerlukan klien untuk MENGHAPUS resource apa pun dalam streaming, dan mengabaikan permintaan HAPUS. Untuk alasan performa, YouTube merekomendasikan klien agar tidak mengirim DELETE.

202 (Accepted)

Respons HTTP 202 (Disetujui) 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 keterlambatan 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 (Permintaan Buruk) menunjukkan 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 sudah tidak berlaku. Klien harus memperbarui parameter cid untuk melanjutkan.

405 (Metode Tidak Diizinkan)

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.