Bu belgede, 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 alımı desteği eklemek isteyen kodlayıcı satıcıları için hazırlanmıştır. HLS alımı, 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 yayınlamak için kodlayıcı, HTTP PUT
veya POST
isteklerini kullanarak YouTube'un HLS uç noktasına bir dizi medya oynatma listesi ve medya segmenti göndermelidir. Kodlayıcının bakış açısıyla YouTube HLS uç noktası, pasif bir HTTP sunucusu gibi görünür.
Her bir medya segmenti, akışın bir ila dört saniye süren kısa bir bölümündeki 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 alımı için video ve ses içeriklerinin aşağıdaki şartları karşılaması gerekir:
- 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ı şartları Medya Segmentleri bölümünde bulabilirsiniz.
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ıklı (veya MPEG aralıklı) hem de tam aralıklı (veya JPEG aralıklı) ö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 aktarım URL'si alma
Kodlayıcılar, tam besleme URL'sini almak için YouTube Canlı Yayın API'sini kullanarak aşağıdaki özelliklere sahip bir liveStream 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 ayrıntı için liveStreams
kaynağının dokümanlarına bakın.
YouTube İçerik Stüdyosu'ndan HLS alım URL'si edinme
YouTube İçerik Stüdyosu 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 yayını YouTube'da 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=
... 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©=0&file=
Daha fazla güvenilirlik için alım işleminin yedekli ikinci bir 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, akışı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 de elde edilen URL'ler eksik şablonlardır. Her biri boş bir file=
sorgu parametresiyle sona erer. Kodlayıcı, nihai URL'yi oluşturmak için 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 oluşan 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ında göreli veya mutlak yol bileşenleri içerebilir ancak bu hiçbir zaman gerekli 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, yayınlanan içeriği farklı çözünürlüklerde ve bit hızlarında yeniden kodladığından kodlayıcının içeriği farklı bit hızlarında YouTube'a 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ştirir.
- Tüm istekler için HTTPS ve kalıcı bağlantı kullanın.
Aşağıdaki bölümlerde, medya oynatma listeleri ve medya segmentleriyle ilgili daha ayrıntılı şartlar yer almaktadır.
Medya oynatma listeleri
Medya oynatma listesi, sürekli ve çözülebilir bir multimedya akışını temsil etmek için birleştirilebilen medya segmentlerinin listesini içerir. Medya oynatma listesi, sunucuya hangi medya segmentlerinin beklendiğini ve yeniden birleştirilen akışta bunların nasıl doğru şekilde sıralanacağını bildirir.
Şartlar
Medya oynatma listesi dosya adı
.m3u8
veya.m3u
ile bitmelidir.Bir yayın için gönderilen ilk medya oynatma listesi, sıra numarası
0
ile 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.Bir medya oynatma listesi, beklemede en fazla beş segment içerebilir. Sunucu tarafından alınmamış veya alındığı onaylanmamış bir segment varsa bu segment beklemede demektir.
Her medya oynatma listesine, öne çıkan segmentlerin yanı sıra birkaç onaylanmış 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ş bekleyen segment ekleyebilirsiniz.
Sunucunun, bir medya segmentinin alındığını, bu segmentin yüklenmesi üzerine
200
(OK
) veya202
(Accepted
) yanıtı döndürerek 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 kaybolursa sunucunun hızlıca kurtarılabilmesi için her medya segmenti için 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-SEQUENCE
etiket değerini artırabilirsiniz. Örneğin, sunucu ilk dokuz medya segmentinin alındığını zaten onaylamışsa bir sonraki medya oynatma listesinde sekizinci, dokuzuncu ve onuncu medya segmentleri listelenebilir.EXT-X-KEY
veEXT-X-SESSION-KEY
etiketleri desteklenmez.
Örnekler
Aşağıdaki listede, kodlayıcının göndermesi beklenen dosyalarla ilgili 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 yayınının ortasında gönderilen bir medya oynatma listesi gösterilmektedir. Örnek, bir yayın akışının ortasından alındığı için EXT-X-MEDIA-SEQUENCE
etiketinin değeri sıfır değildir.
#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 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 kendini başlatmalıdır.
- Her M2TS segmenti tek bir MPEG-2 programı içermelidir.
- M2TS segmenti PAT ve PMT içermelidir. Segmentteki ilk iki aktarım akışı paketi PAT ve 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ı 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ç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.
Daha küçük medya segmentleri, daha yüksek yeniden arabelleğe alma oranı ve daha düşük kodlama verimliliği pahasına da olsa daha düşük gecikmeye neden olabileceğinden bir ila dört saniye arasında bir medya segmenti süresi öneririz. Ö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 önerilen aralıkların alt ucundaki bit hızı değerleri HEVC ile kullanılabilir. Bu, özellikle 4K içeriklerde faydalıdır.
Diğer Gereksinimler
Kodlayıcılar, üreticinin adını, model adını ve sürümünü içeren aşağıdaki söz dizimini kullanarak HTTP isteğinde
User-Agent
üstbilgisini ayarlamalıdır:User-Agent: <manufacturer> / <model> / <version>
Altyazılar
HLS alımı, altyazı göndermek için iki seçeneği destekler:
- Ayrı HTTP POST istekleri kullanarak altyazı gönderin. Bu özellik, tüm HLS alımlarında kullanılabilir.
- Yerleşik 608/708 altyazılar, H264 video codec'inin kullanıldığı HLS beslemelerinde çalışır ancak HEVC video codec'inin kullanıldığı beslemelerde çalışmaz. Daha fazla bilgi için YouTube Yardım Merkezi'ndeki Canlı Altyazı Koşulları başlıklı makaleyi inceleyin.
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 (OK)
Bir PUT veya POST isteğine yanıt olarak HTTP 200 (OK) yanıtı, YouTube sunucusunun beklenen bir işlemi aldığını ve başarılı bir şekilde 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ışta herhangi bir kaynağı SİLMESİNİ gerektirmez ve SİLME 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, segmentin işlenmesinde gecikme yaşanmaması için mümkün olan en kısa sürede göndermesi gerektiğini belirtir. Kodlayıcı her medya segmenti için güncellenmiş bir medya oynatma listesi gönderiyorsa bunun sorun olmayacağını unutmayın.
- 400 (Hatalı İstek)
HTTP 400 (Hatalı İstek) yanıtı, aşağıdaki sorunlardan birinin oluştuğunu gösterir:
- URL bozulmuş
- Oynatma listesi ayrıştırılamıyor veya desteklenmeyen etiketler içeriyor
- 401 (Yetkisiz)
HTTP 401 (Yetkisiz) yanıtı, YouTube HLS uç noktasının temel URL'sindeki cid parametresinin bozulduğ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.