HLS ile Canlı YouTube İçeriği Aktarma

Bu dokümanda, bir kodlayıcıdan YouTube'da canlı veri akışı yapmak için HTTP Canlı Yayın (HLS) protokolünün nasıl kullanılacağı açıklanmaktadır. Bu doküman, ürünlerine HLS besleme desteği eklemek isteyen kodlayıcı tedarikçileri için hazırlanmıştır. HLS beslemesi, nispeten daha yüksek gecikme süresiyle yüksek kalite ve yüksek çözünürlük gerektiren premium içerikler için iyi bir seçimdir. YouTube Canlı Yayın'ın desteklediği farklı besleme protokollerinin kısa bir karşılaştırması için YouTube Canlı Yayın Besleme Protokolü Karşılaştırması başlıklı makaleyi inceleyin.

HLS kullanarak canlı veri akışı yapmak için kodlayıcının, HTTP PUT veya POST isteklerini kullanarak YouTube'un HLS uç noktasına bir dizi medya oynatma listesi ve medya segmenti göndermesi gerekir. YouTube HLS uç noktası, kodlayıcı açısından pasif bir HTTP sunucusu gibi görünür.

Her medya segmenti, yayının bir ila dört saniye süren kısa bir kısmındaki gerçek multimedya içeriğini temsil eder. Her medya oynatma listesi, medya segmentlerinin doğru akış sırasına göre nasıl yeniden birleştirileceğini açıklar.

Medya Biçimi Koşulları

YouTube HLS beslemesi, video ve ses içeriği için aşağıdaki koşulları karşılamalıdır:

  • Video ve ses, M2TS biçiminde birleştirilmelidir.
  • Desteklenen video codec'leri H.264 ve HEVC'dir.
  • 60 fps'ye kadar kare hızları desteklenir.
  • Yalnızca kapalı GOP desteklenir.
  • Desteklenen ses codec'i AAC'dir ve yalnızca tek parça ses desteklenir.

Daha ayrıntılı gereksinimler için Medya Segmentleri bölümüne bakın.

HDR

Yüksek Dinamik Aralık (HDR) video, HEVC codec'i kullanılarak desteklenir ve aşağıdaki ek koşullara sahiptir:

  • Desteklenen renk standartları, sabit olmayan parlaklık içeren 10 bit PQ ve HLG'dir. Daha açık şekilde belirtmek gerekirse:
    • Renk biçimi YUV 4:2:0 10 bit olmalıdır.
    • Aktarım işlevi PQ (SMPTE ST 2084 olarak da bilinir) veya HLG (ARIB STD-B67 olarak da bilinir) olmalıdır.
    • Renk primerleri Rec. 2020 olmalıdır.
    • Matris katsayıları, Rec. 2020 sabit olmayan parlaklık olmalıdır.
  • Hem sınırlı aralık (veya MPEG aralığı) hem de tam aralık (veya JPEG aralığı) örnek değerleri desteklenir. Aralığın, içeriğin kullandığı örnek değer aralığına göre ayarlanması önemlidir. Sınırlı aralıktaki örnek değerler önerilir.

HLS Besleme URL'si alma

YouTube API'sinden HLS Besleme URL'si alma

Kodlayıcılar, besleme URL'sinin tamamını almak için YouTube Canlı Yayın API'sini kullanarak aşağıdaki özelliklere sahip bir canlı yayın kaynağı ekleyebilir:

"cdn": {
  "ingestionType": "hls",
  "frameRate": "variable",
  "resolution": "variable"
}

API yanıtında cdn.ingestionInfo.ingestionAddress alanı birincil besleme URL'sini, cdn.ingestionInfo.backupIngestionAddress alanı ise yedek besleme URL'sini belirtir. Daha fazla bilgi için liveStreams kaynağının dokümanlarını inceleyin.

YouTube Studio'dan HLS besleme URL'si alma

İçerik üretici, YouTube Creator Studio web arayüzünde "Yayın oluştur"u tıkladığında YouTube, alfanümerik karakterler ve kısa çizgilerden oluşan bir "yayın anahtarı" gösterir. Bu gizli anahtar hem içerik üreticiyi hem de YouTube'a aktarılan yayını tanımlar.

Bu yayın anahtarından aşağıdaki gibi bir HLS URL'si oluşturabilirsiniz:

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

Burada $STREAM_KEY, web arayüzünde gösterilen yayın anahtarıdır. Örneğin: https://a.upload.youtube.com/http_upload_hls?cid=abcd-efgh-ijkl-mnop-qrst&copy=0&file=

Daha fazla güvenilirlik için beslemenin yedek ikinci bir kopyasını bu yedek URL'ye iletebilirsiniz:

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

Yedeklemenin birincil URL'den iki farkı olduğunu unutmayın: Hem ana makine adı hem de copy= parametresi değişti. Yedek besleme, yayının bozulmasını önlemek için birincil beslemeden farklı bir copy= parametre değeri göndermelidir.

HLS Besleme URL'sini tamamlama

Bu iki yöntem kullanılarak elde edilen URL'ler eksik şablonlardır ve her biri boş bir file= sorgu parametresiyle sona erer. Nihai URL'yi oluşturmak için kodlayıcının, bir medya oynatma listesinin veya medya segmentinin dosya adını URL'nin sonuna eklemesi gerekir. Böylece file= parametresi tamamlanır.

file= parametresinin değeri için aşağıdaki kurallar geçerlidir:

  • Kodlayıcı, alfanümerik karakterler, alt çizgi, eğik çizgi, kısa çizgi ve noktalardan bir medya oynatma listesi veya medya segmenti dosyası adı oluşturabilir. Başka karakterler desteklenmez.
  • Kodlayıcı, dosya adını URL olarak kodlamamalıdır.
  • Kodlayıcı, dosya adlarına göreli veya mutlak yol bileşenleri ekleyebilir ancak bu hiçbir zaman gerekli değildir. Kodlayıcı, bir medya segmenti dosya adında yol bileşeni içeriyorsa ilgili oynatma listesi girişinde aynı yola referans vermelidir.

HLS Protokolü Koşulları

Kodlayıcı tarafından gönderilen medya oynatma listeleri ve medya segmentleri, HTTP Canlı Yayın 2. Sürüm Spesifikasyonu'na uygun olmalıdır.

HLS spesifikasyonu iki tür oynatma listesi tanımlar: Medya Oynatma Listesi ve Ana Oynatma Listesi. YouTube, aktarılan içeriği farklı çözünürlüklere ve bit hızlarına kodladığından kodlayıcının YouTube'a farklı bit hızlarına sahip içerik göndermesi gerekmez. Bu nedenle YouTube, HLS beslemesi için yalnızca medya oynatma listelerini destekler ve ana oynatma listeleri yoksayılır. (Ana oynatma listesi, her biri aynı içeriğin farklı bir sürümünü tanımlayan bir dizi varyant yayını sağlar.)

Kodlayıcı:

  • Kullanıcılara sunmak istediğiniz en yüksek çözünürlükte tam olarak bir kodlanmış akış gönderin (tek çözünürlük ve codec).
  • Ses ve videoyu birleştirebilirsiniz.
  • Tüm istekler için HTTPS ve kalıcı bağlantı kullanın.

Aşağıdaki bölümlerde, medya oynatma listeleri ve medya segmentleri için daha spesifik şartlar yer almaktadır.

Medya oynatma listeleri

Medya oynatma listesi, kesintisiz ve kodlanabilir bir multimedya akışı temsil etmek için birleştirilebilecek medya segmentlerinin listesini içerir. Medya oynatma listesi, sunucuya hangi medya segmentlerinin bekleneceğini ve yeniden birleştirilen akışta bunların nasıl düzgün bir şekilde sıralanacağını bildirir.

Şartlar

  • Medya oynatma listesi dosya adı .m3u8 veya .m3u ile bitmelidir.

  • Bir akış için gönderilen ilk medya oynatma listesi 0 sıra numarasından başlamalı ve sıra numarası tekdüze şekilde artmalıdır.

  • EXT-X-MEDIA-SEQUENCE etiketi, oynatma listesinde listelenen ilk medya segmentinin sıra numarasını tanımlamalıdır.

  • Medya oynatma listelerinde en fazla beş beklemede segment bulunmalıdır. Sunucu segmenti almamışsa veya aldığını onaylamamışsa segment beklemededir.

    Her medya oynatma listesine, öne çıkan segmentlere ek olarak birkaç tanınır segment de ekleyin. Bu uygulama, sunucu tarafında bir medya oynatma listesi kaybolursa bir segmentin atlanma olasılığını azaltır. Örneğin, her medya oynatma listesine en fazla iki tanınır segment ve en fazla beş seçkin segment ekleyebilirsiniz.

    Sunucunun, bir medya segmentinin yüklenmesiyle ilgili 200 (OK) veya 202 (Accepted) yanıtı döndürerek segmentin alındığını onayladığını unutmayın. 202 yanıtı, sunucunun segmenti, bu segmenti tanımlayan bir oynatma listesinden önce aldığını gösterir.

  • Bir medya oynatma listesi kaybolduğunda sunucunun hızlı bir şekilde kurtarabilmesi için her medya segmenti için güncellenmiş bir medya oynatma listesi gönderin.

  • Sunucu, medya segmentlerinin alındığını onayladığında medya oynatma listesinin çok uzun olmasını önlemek için EXT-X-MEDIA-SEQUENCE etiket değerini artırabilirsiniz. Örneğin, sunucu ilk dokuz medya segmentinin alındığını zaten onayladıysa bir sonraki medya oynatma listesinde sekizinci, dokuzuncu ve onuncu medya segmentleri listelenir.

  • EXT-X-KEY ve EXT-X-SESSION-KEY etiketleri desteklenmez.

Örnekler

Aşağıdaki listede, kodlayıcının göndermesi beklenen dosyalara örnek verilmiştir:

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
...

Aşağıdaki örnekte, canlı video yayınının ortasında gönderilen bir medya oynatma listesi gösterilmektedir. Örnek bir yayının ortasından alındığı için EXT-X-MEDIA-SEQUENCE etiketi sıfır olmayan bir değere sahiptir.

#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

Medya Segmentleri

Aşağıdaki listede medya segmentleriyle ilgili koşullar belirtilmiştir:

  • Dosya adları
    • URL'deki medya segmenti dosya adları .ts dosya adı uzantısına sahip olmalı ve oynatma listesindeki dosya adlarıyla eşleşmelidir.
    • Medya segmenti dosya adları, kodlayıcı yeniden başlatma ve akış yeniden başlatma işlemlerinde benzersiz olmalıdır.
  • Biçim
    • Medya segmentleri M2TS biçiminde olmalı ve kendi kendini başlatmalıdır.
    • Her M2TS segmenti tek bir MPEG-2 programı içermelidir.
    • M2TS segmenti bir PAT ve PMT içermelidir. Segmentteki ilk iki aktarım akışı paketi bir PAT ve PMT olmalıdır.
  • İçerik
    • Video ve ses birlikte karıştırılmalıdır.
    • Desteklenen video codec'leri H.264 ve HEVC'dir.
    • HEVC ile HDR desteklenir (HDR şartları bölümüne bakın).
    • 60 fps'ye kadar kare hızları desteklenir.
    • Yalnızca kapalı GOP desteklenir.
    • Desteklenen ses codec'i AAC'dir ve yalnızca tek parça ses desteklenir.
    • Aşağıdaki bölümde açıklandığı gibi, medya segmentlerinin bir ila dört saniye arasında bir süreye sahip olması önerilir. Medya segmentlerinin süresi 5 saniyeden uzun olmamalıdır.
    • Medya segmentleri yalnızca TLS/SSL katmanında HTTPS ile şifrelenmelidir. Diğer şifreleme mekanizmaları desteklenmez.

Medya segmenti süresi

HLS beslemenin, yüksek kalite ve yüksek çözünürlük gerektiren premium içerikler için kullanılmasını bekliyoruz. HLS beslemesi segment tabanlı olduğundan genellikle RTMP ve WebRTC tabanlı beslemelere kıyasla daha yüksek gecikmeye sahiptir.

Daha küçük medya segmentleri kullanmak, daha yüksek yeniden arabelleğe alma oranı ve daha düşük kodlama verimliliği pahasına olsa da daha düşük gecikmeye neden olabileceğinden bir ila dört saniyelik bir medya segmenti süresi öneririz. Önceki bölümde belirtildiği gibi, medya segmentleri 5 saniyeden uzun olmamalıdır.

Bit hızları

Bit hızı ayarlarıyla ilgili kurallara YouTube Yardım Merkezi'nden ulaşabilirsiniz.

HEVC'nin, aynı video kalitesinde H.264'e kıyasla genellikle% 25 ila% 50 daha fazla veri sıkıştırması sağladığını unutmayın. Bu nedenle, önerilen aralıkların alt ucundaki bit hızı değerleri, bant genişliğinden tasarruf etmek için HEVC ile kullanılabilir. Bu, özellikle 4K içerikler için kullanışlıdır.

Diğer Gereksinimler

  • Kodlayıcılar, HTTP isteğinde User-Agent üst bilgisini üreticinin adını, model adını ve sürümünü içeren aşağıdaki söz dizimi kullanarak ayarlamalıdır:

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

Altyazılar

HLS beslemesi, altyazı göndermek için iki seçenek destekler:

  • Ayrı HTTP POST istekleri kullanarak altyazı gönderin. Bu, tüm HLS beslemeleri için geçerlidir.
  • Yerleşik 608/708 altyazılar, H264 video codec'ini kullanan HLS beslemeleriyle çalışır ancak HEVC video codec'ini kullanan beslemelerle çalışmaz. Daha fazla bilgi için YouTube Yardım Merkezi'ndeki Canlı Altyazı Şartları başlıklı makaleyi inceleyin.

HTTP yanıt kodları

Aşağıdaki bölümlerde, YouTube'un HLS kullanılarak yayınlanan medya segmentlerine ve medya oynatma listelerine yanıt olarak döndürdüğü yanıt kodları açıklanmaktadır.

200 (Tamam)

PUT veya POST isteğine yanıt olarak gönderilen HTTP 200 (OK) yanıtı, YouTube sunucusunun beklenen bir işlemi aldığını ve başarıyla işlediğini gösterir.

DELETE isteğine yanıt olarak gelen HTTP 200 (OK) yanıtı, YouTube sunucusunun isteği aldığını ve yoksaydığını gösterir. YouTube sunucusu, istemcinin akıştaki herhangi bir kaynağı silmesini gerektirmez ve DELETE isteklerini yoksayar. YouTube, performans nedeniyle istemcilerin DELETE göndermemesini önerir.

202 (Kabul edildi)

HTTP 202 (Kabul Edildi) yanıtı, YouTube sunucusunun medya segmentini, bu medya segmentini içeren bir medya oynatma listesi almadan önce aldığını gösterir. Bu, istemciye, ilgili segmentin işlenmesinde gecikme yaşanmaması için bu medya segmentini içeren medya oynatma listesini bir an önce göndermesi gerektiğini belirtir. Kodlayıcı her medya segmenti için güncellenmiş bir medya oynatma listesi gönderirse bunun sorun oluşturmayacağını unutmayın.

400 (Hatalı İstek)

HTTP 400 (Hatalı İstek) yanıtı, aşağıdaki sorunlardan birinin yaşandığını gösterir:

  • URL bozulmuş
  • Oynatma listesi ayrıştırılamaz veya desteklenmeyen etiketler içeriyor
401 (Yetkisiz)

HTTP 401 (Yetkisiz) yanıtı, YouTube HLS uç noktasının ana URL'sindeki cid parametresinin bozuk olduğunu veya süresinin dolduğunu gösterir. Devam etmek için istemcinin cid parametresini güncellemesi gerekir.

405 (Yönteme İzin Verilmiyor)

HTTP 405 (Yönteme İzin Verilmiyor) yanıtı, isteğin POST, PUT veya DELETE isteği olmadığını gösterir.

500 (Dahili Sunucu Hatası)

HTTP 500 (Dahili Sunucu Hatası) yanıtı, sunucunun isteği işleyemediğini gösterir. Bu hata için isteği eksponansiyel geri yükleme ile yeniden denemenizi öneririz.