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. HLS penyerapan adalah pilihan tepat untuk konten premium yang membutuhkan dan resolusi tinggi pada latensi yang relatif lebih tinggi. Untuk rangkuman perbandingan berbagai protokol proses transfer yang digunakan YouTube Live Dukungan streaming. Baca Perbandingan Protokol Proses Transfer Live Streaming YouTube.

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

Setiap Segmen Media mewakili konten multimedia aktual untuk bagian singkat durasi streaming antara satu dan 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 video dan audio konten:

  • Video dan audio harus di-multipleing 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 mendukung audio satu trek.

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 spesifiknya:
    • Format kroma 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.
  • Sampel jarak terbatas (atau rentang MPEG) dan rentang penuh (atau rentang JPEG) nilai didukung. Penting bahwa rentang tersebut diatur sesuai dengan rentang nilai sampel yang digunakan konten. Nilai sampel rentang terbatas adalah direkomendasikan.

Mendapatkan URL Proses Transfer HLS

Mendapatkan URL Proses Transfer HLS dari YouTube API

Untuk mendapatkan URL proses transfer lengkap, encoder dapat menggunakan situs YouTube Live Streaming API untuk menyisipkan liveStream dengan referensi berikut properti:

"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 detail lebih lanjut, lihat dokumentasi untuk referensi liveStreams.

Mendapatkan URL Proses Transfer HLS dari YouTube Creator Studio

Di antarmuka web YouTube Creator Studio, setelah kreator mengklik "Buat Streaming", YouTube menampilkan "Kunci Streaming" yang terdiri atas alfanumerik karakter dan tanda hubung. Kunci rahasia ini mengidentifikasi pembuat dan sumber melakukan streaming ke YouTube.

Anda dapat membuat URL HLS dari kunci streaming ini, seperti berikut:

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

... dengan $STREAM_KEY sebagai 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 redundan dari penyerapan ke URL cadangan ini:

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

Perhatikan bahwa cadangan memiliki dua perbedaan dengan URL utama, yaitu nama host dan parameter copy= telah berubah. Penyerapan cadangan harus mengirimkan nilai parameter copy= yang berbeda dari penyerapan utama untuk menghindari merusak aliran.

Menyelesaikan URL Proses Transfer HLS

URL yang diperoleh menggunakan salah satu metode tersebut adalah template yang tidak lengkap; setiap ujung dengan parameter kueri file= kosong. Untuk membentuk URL final, encoder harus tambahkan nama file {i>Playlist <i}Media atau Segmen Media di 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 mengenkode nama file ke URL.
  • Encoder dapat menyertakan komponen jalur relatif atau absolut dalam nama file, meskipun tidak diperlukan. Jika encoder menyertakan komponen jalur dalam nama file Segmen Media, nama tersebut harus merujuk ke jalur yang sama dalam entri playlist yang terkait.

Persyaratan Protokol HLS

Playlist Media dan Segmen Media yang dikirim oleh encoder harus sesuai dengan HTTP Live Streaming 2nd Edition Spesifikasi.

Spesifikasi HLS menentukan dua jenis playlist: Playlist Media dan Master Daftar putar. Karena YouTube men-transcoding konten yang di-streaming ke berbagai resolusi dan kecepatan bit, encoder tidak perlu mengirimkan konten dengan di YouTube. Akibatnya, YouTube hanya mendukung Playlist Media untuk proses transfer HLS, dan Playlist Master akan diabaikan. (Playlist Master menyediakan serangkaian Varian Streaming, yang masing-masing mendeskripsikan versi berbeda dari konten yang sama.)

Encoder harus:

  • mengirim hanya satu streaming yang dienkode dengan resolusi tertinggi yang diinginkan ditayangkan kepada pengguna (resolusi dan codec tunggal).
  • audio dan video mux.
  • 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 disambungkan ke merepresentasikan streaming multimedia yang berkelanjutan dan dapat didekodekan. {i>Playlist <i}Media memberi tahu server Segmen Media yang diharapkan dan cara mengurutkannya dengan benar {i>stream<i} yang telah 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 bertambah 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 luar biasa. J segmen beredar jika server belum menerimanya atau mengonfirmasi menerimanya.

    Selain segmen yang belum terselesaikan, sertakan juga beberapa segmen yang diakui di setiap Daftar Putar Media. Praktik ini memperkecil kemungkinan yang dilewati jika Playlist Media hilang di sisi server. Sebagai misalnya, Anda dapat memasukkan hingga dua segmen yang telah diakui dan maksimum lima segmen luar biasa di setiap Playlist Media.

    Perhatikan bahwa server mengonfirmasi penerimaan Segmen Media dengan menampilkan Respons 200 (OK) atau 202 (Accepted) pada upload segmen tersebut. J Respons 202 menunjukkan bahwa server menerima segmen sebelum {i>playlist<i} yang mengidentifikasi segmen tersebut.

  • Mengirim Playlist Media yang diperbarui untuk setiap Segmen Media sehingga server dapat memulihkan dengan cepat jika Daftar {i>Media<i} hilang.

  • Karena server mengonfirmasi penerimaan Segmen Media, Anda dapat menambah Nilai tag EXT-X-MEDIA-SEQUENCE untuk mencegah Playlist Media terlalu panjang. Misalnya, jika server telah mengakui penerimaan sembilan Segmen Media pertama, Daftar Putar Media berikutnya mungkin mencantumkan yang kedelapan, Segmen Media kesembilan, dan Kesepuluh.

  • Tag EXT-X-KEY dan EXT-X-SESSION-KEY tidak didukung.

Contoh

Daftar berikut menunjukkan contoh file yang diharapkan oleh encoder kirim:

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 menampilkan Playlist Media yang dikirim di tengah video live feed Anda. 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 menunjukkan persyaratan untuk Segmen Media:

  • Nama file
    • Nama file Segmen Media di URL harus memiliki nama file .ts dan harus cocok dengan nama file dalam playlist.
    • Nama file Segmen Media harus unik di setiap 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 yang pertama Paket Transport Stream di Segment 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 trek tunggal yang didukung.
    • Segmen Media direkomendasikan untuk 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 mengharapkan proses transfer HLS digunakan untuk konten premium yang memerlukan berkualitas dan resolusi tinggi. Proses transfer HLS biasanya memiliki latensi yang lebih tinggi daripada RTMP- dan penyerapan berbasis WebRTC karena proses transfer HLS berbasis segmen.

Sebaiknya Segmen Media berdurasi satu hingga empat detik karena Segmen Media yang lebih kecil dapat menghasilkan latensi yang lebih rendah, meskipun dengan biaya tingkat buffer berulang dan efisiensi encoding yang lebih rendah. Seperti disebutkan di bagian sebelumnya, Segmen Media tidak boleh lebih dari 5 detik.

Rasio Bit

Pusat Bantuan YouTube Tengah memberikan pedoman untuk setelan kecepatan bit.

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

Persyaratan Lainnya

  • Encoder harus menyetel header User-Agent dalam permintaan HTTP menggunakan atribut berikut ini, 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 berlaku untuk semua Penyerapan HLS.
  • Teks tertutup 608/708 tersemat berfungsi dengan proses transfer HLS yang menggunakan H264 codec video, tetapi tidak dengan proses transfer yang menggunakan codec video HEVC. Untuk selengkapnya detailnya, lihat Persyaratan Teks Otomatis di Pusat Bantuan YouTube.

Kode respons HTTP

Bagian berikut menjelaskan kode respons yang ditampilkan YouTube dalam respons terhadap Segmen Media dan Playlist Media yang ditayangkan menggunakan HLS.

200 (Oke)

Sebagai respons terhadap permintaan PUT atau POST, respons HTTP 200 (OK) menunjukkan server YouTube menerima operasi yang diharapkan dan menanganinya memulai proyek.

Sebagai respons terhadap permintaan DELETE, respons HTTP 200 (OK) menunjukkan bahwa server YouTube menerima dan mengabaikan permintaan tersebut. Server YouTube melakukan tidak mengharuskan klien untuk MENGHAPUS sumber daya apa pun dalam aliran, dan mengabaikan Permintaan DELETE. Untuk alasan performa, YouTube merekomendasikan klien jangan mengirim DELETE.

202 (Accepted)

Respons HTTP 202 (Diterima) menunjukkan bahwa server YouTube menerima Segmen Media sebelum menerima Playlist Media yang berisi Segmen Media tersebut. Ini menunjukkan kepada klien bahwa ia harus mengirim {i> Playlist<i} Media yang berisi Segmen Media tersebut sesegera mungkin untuk mencegah penundaan dalam pemrosesan segmen data. Perlu diperhatikan bahwa hal ini tidak akan menjadi masalah jika encoder mengirimkan Playlist Media untuk setiap Segmen Media.

400 (Permintaan Buruk)

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 agar dapat melanjutkan.

405 (Metode Tidak Diizinkan)

Respons HTTP 405 (Metode Tidak Diizinkan) menunjukkan bahwa permintaan bukan permintaan POST, PUT, atau DELETE.

500 (Error Server Internal)

Respons HTTP 500 (Galat Server Internal) menunjukkan bahwa server tidak dapat memproses permintaan. Untuk kesalahan ini, sebaiknya Anda mencoba lagi permintaan dengan eksponensial backoff.