Bu dokümanda, bir kodlayıcıdan YouTube'da canlı veri yayını yapmak için HTTP Canlı Yayın (HLS) protokolünün nasıl kullanılacağı açıklanmaktadır. Bu belge, ürünlerine HLS besleme desteği eklemek isteyen kodlayıcı tedarikçileri için hazırlanmıştır. HLS beslemesi, nispeten daha yüksek gecikmeyle yüksek kalite ve yüksek çözünürlük gerektiren premium içerikler için iyi bir seçenektir. 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 yayınlamak 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. Kodlayıcı açısından YouTube HLS uç noktası, pasif bir HTTP sunucusu olarak görünür.
Her medya segmenti, akışın bir ila dört saniye süren kısa bir bölümü için 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çimiyle İlgili Koşullar
YouTube HLS beslemesi, video ve ses içerikleri için aşağıdaki şartlara sahiptir:
- Video ve ses, M2TS biçiminde çoklanmalıdır.
- 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 kanallı ses desteklenir.
Daha ayrıntılı koşullar için Medya Segmentleri bölümüne bakın.
HDR
Yüksek Dinamik Aralıklı (HDR) video, HEVC codec'i kullanılarak desteklenir ve aşağıdaki ek koşulları karşılaması gerekir:
- Desteklenen renk standartları, sabit olmayan parlaklığa sahip 10 bit PQ ve HLG'dir.
Daha açık şekilde belirtmek gerekirse:
- Kroma 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ıktaki (veya MPEG aralığı) hem de tam aralıktaki (veya JPEG aralığı) örnek değerler 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 edinme
YouTube API'den HLS besleme URL'si alma
Kodlayıcılar, tam besleme URL'sini almak için YouTube Canlı Akış 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 alım URL'sini, cdn.ingestionInfo.backupIngestionAddress alanı ise yedek alım URL'sini belirtir. Daha fazla bilgi için liveStreams kaynağı ile ilgili belgelere bakın.
YouTube İçerik Stüdyosu'ndan HLS besleme URL'si alma
YouTube İçerik Üretici Studio web arayüzünde, içerik üretici "Yayın Oluştur"u tıkladıktan sonra YouTube, alfanümerik karakterler ve tirelerden oluşan bir "Yayın Anahtarı" gösterir. Bu gizli anahtar, hem içerik üreticiyi hem de YouTube'a yapı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©=0&file=
... $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©=0&file=
Daha fazla güvenilirlik için, beslemenin yedek bir ikinci kopyasını bu yedek URL'ye iletebilirsiniz:
https://b.upload.youtube.com/http_upload_hls?cid=$STREAM_KEY©=1&file=
Yedek URL'nin birincil URL'den iki farkı olduğunu unutmayın: hem ana makine adı hem de copy= parametresi değişmiştir. 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
Her iki yöntemle elde edilen URL'ler eksik şablonlardır ve her biri boş bir file= sorgu parametresiyle biter. Nihai URL'yi oluşturmak için kodlayıcı, bir medya oynatma listesinin veya medya segmentinin dosya adını URL'nin sonuna ekleyerek file= parametresini tamamlamalıdır.
file= parametresinin değeri için aşağıdaki kurallar geçerlidir:
- Kodlayıcı; alfanümerik karakterler, alt çizgiler, eğik çizgiler, kısa çizgiler ve noktalardan bir medya oynatma listesi veya medya segmenti dosya 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 zorunlu değildir. Kodlayıcı, bir medya segmenti dosya adında bir 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, canlı yayınlanan içeriği farklı çözünürlük ve bit hızlarına dönüştürdüğünden kodlayıcının YouTube'a farklı bit hızlarında içerik göndermesi gerekmez. Bu nedenle, YouTube yalnızca HLS alımı için 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ü açıklayan bir dizi Varyant Akışı sağlar.)
Kodlayıcı:
- Kullanıcılara sunmak istediğiniz en yüksek çözünürlükte tam olarak bir kodlanmış yayın göndermeniz (tek çözünürlük ve codec).
- ses ve videoyu birleştirme
- 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 ayrıntılı şartlar yer almaktadır.
Medya Oynatma Listeleri
Medya oynatma listesi, sürekli ve çözümlenebilir bir multimedya akışı oluşturmak için birleştirilebilen medya segmentlerinin listesini içerir. Medya Oynatma Listesi, sunucuya hangi Medya Segmentlerini beklemesi gerektiğini ve bunları yeniden birleştirilen akışta nasıl doğru şekilde sıralayacağını bildirir.
Şartlar
Medya oynatma listesi dosya adı
.m3u8veya.m3uile bitmelidir.Bir akış için gönderilen ilk medya oynatma listesi
0sıra numarasıyla başlamalı ve sıra numarası tekdüze şekilde artmalıdır.EXT-X-MEDIA-SEQUENCEetiketi, oynatma listesinde yer alan ilk medya segmentinin sıra numarasını tanımlamalıdır.Medya oynatma listesinde beklemede olan en fazla beş segment bulunabilir. Sunucu tarafından alınmamış veya alındığı onaylanmamış bir segment varsa bu segment bekliyor demektir.
Her medya oynatma listesine, bekleyen segmentlerin yanı sıra onaylanmış birkaç segment de ekleyin. Bu uygulama, sunucu tarafında bir medya oynatma listesi kaybolursa segmentin atlanma olasılığını azaltır. Örneğin, her medya oynatma listesine en fazla iki onaylanmış segment ve en fazla beş onaylanmamış segment ekleyebilirsiniz.
Sunucunun, bir medya segmentinin alındığını, ilgili segmentin yüklenmesiyle ilgili bir
200(OK) veya202(Accepted) yanıtı döndürerek onayladığını unutmayın.202yanıtı, sunucunun segmenti tanımlayan bir oynatma listesinden önce segmenti aldığını gösterir.Bir medya oynatma listesinin kaybolması durumunda sunucunun hızlı bir şekilde kurtarılabilmesi için her medya segmentine güncellenmiş bir medya oynatma listesi gönderin.
Sunucu, medya segmentlerinin alındığını onayladıkça medya oynatma listesinin çok uzun olmasını önlemek için
EXT-X-MEDIA-SEQUENCEetiket değerini artırabilirsiniz. Örneğin, sunucu ilk dokuz medya segmentinin alındığını onayladıysa bir sonraki medya oynatma listesi sekizinci, dokuzuncu ve onuncu medya segmentlerini listeleyebilir.EXT-X-KEYveEXT-X-SESSION-KEYetiketleri desteklenmez.
Örnekler
Aşağıdaki listede, kodlayıcının göndermesi beklenen dosyalara dair bir ö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 akışının ortasında gönderilen bir medya oynatma listesi gösterilmektedir. Örnek, bir akışı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ı
.tsdosya adı uzantısına sahip olmalı ve oynatma listesindeki dosya adlarıyla eşleşmelidir. - Medya segmenti dosyası adları, kodlayıcı yeniden başlatmaları ve akış yeniden başlatmaları genelinde benzersiz olmalıdır.
- URL'deki medya segmenti dosya adları
- Biçim
- Medya segmentleri M2TS biçiminde olmalı ve kendi kendine başlatılmalıdır.
- Her M2TS segmenti tek bir MPEG-2 programı içermelidir.
- M2TS segmenti bir PAT ve bir PMT içermelidir. Segmentteki ilk iki aktarma akışı paketi bir PAT ve bir PMT olmalıdır.
- İçerik
- Video ve ses dosyaları birleştirilmelidir.
- Desteklenen video codec'leri H.264 ve HEVC'dir.
- HEVC ile HDR desteklenir (HDR şartları'na 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çalı ses desteklenir.
- Aşağıdaki bölümde açıklandığı gibi, medya segmentlerinin süresinin bir ila dört saniye arasında olması önerilir. Medya segmentlerinin süresi 5 saniyeden uzun olmamalıdır.
- Medya segmentleri yalnızca HTTPS ile TLS/SSL katmanında şifrelenmelidir. Diğer şifreleme mekanizmaları desteklenmez.
Medya segmenti süresi
Yüksek kalite ve yüksek çözünürlük gerektiren premium içerikler için HLS alımının kullanılmasını bekliyoruz. HLS alımı, segment tabanlı olduğundan genellikle RTMP ve WebRTC tabanlı alımlardan daha yüksek gecikme süresine sahiptir.
Medya segmenti süresinin bir ila dört saniye olmasını öneririz. Daha küçük medya segmentleri, daha yüksek yeniden arabelleğe alma oranı ve daha düşük kodlama verimliliği pahasına daha düşük gecikme süresi sağlayabilir. Önceki bölümde belirtildiği gibi, medya segmentleri 5 saniyeden uzun olmamalıdır.
Bit hızları
YouTube Yardım Merkezi, bit hızı ayarlarıyla ilgili yönergeler sunar.
HEVC'nin genellikle H.264'e kıyasla aynı video kalitesinde% 25 ila% 50 daha fazla veri sıkıştırması sağladığını unutmayın. Bu nedenle, bant genişliğinden tasarruf etmek için HEVC ile önerilen aralıkların alt sınırındaki bit hızı değerleri kullanılabilir. Bu, özellikle 4K içerikler için kullanışlıdır.
Diğer Gereksinimler
Kodlayıcılar, HTTP isteğindeki
User-Agentbaşlığını aşağıdaki söz dizimini kullanarak ayarlamalıdır. Bu söz dizimi; üretici adını, model adını ve sürümü içerir:User-Agent: <manufacturer> / <model> / <version>
Altyazılar
HLS beslemesi, altyazı göndermek için iki seçeneği destekler:
- Ayrı HTTP POST istekleri kullanarak kapalı altyazıları gönderme. Bu özellik, tüm HLS beslemelerinde kullanılabilir.
- Yerleştirilmiş 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ı'na bakın.
HTTP yanıt kodları
Aşağıdaki bölümlerde, YouTube'un HLS kullanılarak sunulan 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 HTTP 200 (OK) yanıtı, YouTube sunucusunun beklenen bir işlemi aldığını ve başarıyla işlediğini gösterir.
Bir DELETE isteğine yanıt olarak HTTP 200 (OK) yanıtı, YouTube sunucusunun isteği aldığını ve yoksaydığını gösterir. YouTube sunucusu, istemcinin akıştaki herhangi bir kaynağı DELETE (silme) işlemiyle kaldırmasını gerektirmez ve DELETE isteklerini yoksayar. YouTube, performans nedenleriyle istemcilerin DELETE istekleri göndermemesini önerir.
- 202 (Kabul edildi)
HTTP 202 (Kabul Edildi) yanıtı, YouTube sunucusunun, söz konusu medya segmentini içeren bir medya oynatma listesini almadan önce medya segmentini aldığını gösterir. Bu, istemciye, söz konusu medya segmentini içeren medya oynatma listesini en kısa sürede göndermesi gerektiğini belirtir. Böylece, segmentin işlenmesinde gecikme önlenir. Kodlayıcı her medya segmenti için güncellenmiş bir medya oynatma listesi gönderirse bu durumun sorun teşkil etmeyeceğini unutmayın.
- 400 (Hatalı İstek)
HTTP 400 (Hatalı İstek) yanıtı, aşağıdaki sorunlardan birinin meydana geldiğini gösterir:
- URL bozulmuş
- Oynatma listesi ayrıştırılamıyor veya desteklenmeyen etiketler içeriyor
- 401 (Yetkisiz)
Bir HTTP 401 (Yetkisiz) yanıtı, YouTube HLS uç noktası için ana URL'deki cid parametresinin bozulduğunu veya süresinin dolduğunu gösterir. Devam etmek için istemcinin
cidparametresini 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.