Bu belgede, HTTP Canlı Yayın (HLS) protokolünün şu amaçlarla nasıl kullanılacağı açıklanmaktadır: bir kodlayıcıdan YouTube'da canlı veri akışı gerçekleştirebilirsiniz. Bu doküman şu kullanıcılara yöneliktir: Ürünlerine HLS besleme desteği eklemek isteyen kodlayıcı tedarikçi firmaları. HLS besleme, yüksek performans gerektiren premium içerik için ve nispeten daha yüksek bir gecikmeyle yüksek çözünürlükte sunulur. Özet için YouTube Canlı'nın kullandığı farklı besleme protokollerinin karşılaştırması Canlı yayın desteği için YouTube Canlı Yayın Besleme Protokolü Karşılaştırması bölümüne bakın.
HLS kullanarak canlı veri akışı gerçekleştirmek için kodlayıcı, bir dizi Medya
HTTP PUT
veya
POST
istek. Kodlayıcının bakış açısından, YouTube HLS uç noktası
pasif bir HTTP sunucusu gibi görünür.
Her Medya Segmenti, kısa bir bölüm için gerçek multimedya içeriğini temsil eder süresi 1-4 saniye arasında değişir. Her bir Medya Oynatma Listesi , Medya Segmentlerinin doğru yayın sırasında nasıl yeniden birleştirileceğini açıklar.
Medya Biçimi Gereksinimleri
YouTube HLS beslemesi, video ve işitsel için aşağıdaki şartlara sahiptir içerik:
- Video ve ses, M2TS biçiminde sıkıştırılmalıdır.
- Desteklenen video codec'leri H.264 ve HEVC'dir.
- 60 fps'ye kadar olan kare hızları desteklenir.
- Yalnızca kapalı GOP desteklenir.
- Desteklenen ses codec'i AAC'dir ve yalnızca tek parçalı ses desteklenir.
Medya Segmentleri bölümünde daha ayrıntılı gereksinimleri görebilirsiniz.
HDR
Yüksek Dinamik Aralıklı (HDR) video, HEVC codec'i kullanılarak desteklenir ve şu ek şartlara uyulması gerekir:
- Desteklenen renk standartları, sabit olmayan parlaklığa sahip 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 olmalıdır. (ARIB STD-B67 olarak da bilinir).
- Renk primerleri Rec olmalıdır. 2020.
- Matris katsayıları Rec olmalıdır. 2020 sabit olmayan parlaklık.
- Hem sınırlı aralıklı (veya MPEG-aralıklı) hem de tam aralıklı (ya da JPEG aralığı) örnek değerleri desteklenir. Aralığın, Google Görüntülü Reklam Ağı'ndaki içeriğin kullandığı örnek değer aralığı. Sınırlı aralıklı ö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ı Yayın API canlı yayın eklemek için kaynak ve özellikler:
"cdn": {
"ingestionType": "hls",
"frameRate": "variable",
"resolution": "variable"
}
API yanıtında cdn.ingestionInfo.ingestionAddress
alanı,
birincil besleme URL'si ve cdn.ingestionInfo.backupIngestionAddress
alanı
yedek besleme URL'sini belirtir. Daha fazla bilgi için
liveStreams
kaynağı.
YouTube İçerik Stüdyosu'ndan HLS Besleme URL'si alma
YouTube İçerik Stüdyosu web arayüzünde içerik üretici, "Oluştur" düğmesini tıkladıktan sonra Yayın" görüyorsanız YouTube bir "Yayın Anahtarı" görüntüler. alfanümerik karakterlerden oluşan karakter ve kısa çizgi olmalıdır. Bu gizli anahtar hem YouTube'da canlı oynatabilir.
Aşağıdaki şekilde bu yayın anahtarından 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.
Örnek:
https://a.upload.youtube.com/http_upload_hls?cid=abcd-efgh-ijkl-mnop-qrst©=0&file=
Daha fazla güvenilirlik için beslemenin ikinci bir kopyasını iletebilirsiniz. şu yedek URL'ye ekleyin:
https://b.upload.youtube.com/http_upload_hls?cid=$STREAM_KEY©=1&file=
Yedeğin birincil URL'den iki farkı olduğunu unutmayın: Her ikisi de ana makine adı
ve copy=
parametresi değişti. Yedek beslemenin gönderilmesi gerekir
birincil beslemeden farklı bir copy=
parametre değerine sahip olması gerekir.
akışı bozuyor.
HLS Besleme URL'sini tamamlama
Her iki yöntem de kullanılarak elde edilen URL'ler eksik şablonlardır; her bitiş
yerine boş bir file=
sorgu parametresi kullanabilirsiniz. Nihai URL'yi oluşturmak için kodlayıcının
bir Medya Oynatma Listesi veya Medya Segmentinin dosya adını URL'nin sonuna ekleyin,
Böylece file=
parametresi tamamlanıyor.
file=
parametresinin değeri için aşağıdaki kurallar geçerlidir:
- Kodlayıcı, şuradan bir Medya Oynatma Listesi veya Medya Segmenti dosya adı oluşturabilir: alfanümerik karakterler, alt çizgiler, eğik çizgiler, kısa çizgiler ve noktalar; başka karakter desteklenmez.
- Kodlayıcı, dosya adına URL kodlaması yapmamalı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 yol bileşeni içeriyorsa içindeki bir Medya Segmenti dosya adında, giriş yapabilirsiniz.
HLS Protokol Şartları
Kodlayıcı tarafından gönderilen Medya Oynatma Listeleri ve Medya Segmentleri, HTTP Canlı Akışı 2. Sürüm Spesifikasyon.
HLS spesifikasyonu iki oynatma listesi türünü tanımlar: Medya Oynatma Listesi ve Ana Oynatma listesi. YouTube, akışlı içeriğin kodunu farklı çözünürlüklere dönüştürdüğü ve bit hızlarında ilerlerse kodlayıcının farklı bit hızlarına sahip içeriği YouTube Bu nedenle YouTube, HLS beslemesi için yalnızca medya oynatma listelerini destekler. ve Ana Oynatma Listeleri yoksayılır. (Ana Oynatma Listesi, bir dizi Varyant sunar Her biri aynı içeriğin farklı bir sürümünü tanımlayan akışlar.)
Kodlayıcı:
- tam olarak yapmak istediğiniz en yüksek çözünürlükte tam olarak bir tane kodlanmış akış kullanıcılara sunulmalıdır (tek çözünürlük ve codec).
- mux ses ve video.
- HTTPS ve kalıcı bağlantı kullanmalıdır.
Aşağıdaki bölümlerde Medya Oynatma Listeleri için daha spesifik gereksinimler yer almaktadır segmentlere ayırıyoruz.
Medya Oynatma Listeleri
Bir Medya Oynatma Listesi, birleştirilebilecek Medya Segmentlerinin listesini içerir tutarlı, kodu çözilebilir bir multimedya akışını temsil eder. Medya Oynatma Listesi hangi Medya Segmentlerini bekleyebileceğinizi ve bunların doğru şekilde nasıl sıralanacağını akıştan farklıdır.
Şartlar
Medya Oynatma Listesi dosya adı
.m3u8
veya.m3u
ile bitmelidir.Bir akış için gönderilen ilk Medya Oynatma Listesi, sıra numarasıyla başlamalıdır
0
ve sıra numarası tekdüze olarak artmalıdır.EXT-X-MEDIA-SEQUENCE
etiketi, oynatma listesindeki ilk Medya Segmenti.Bir Medya Oynatma Listesi, beşten fazla bekleyen segment içermemelidir. CEVAP Segment, sunucu segmenti almadıysa veya onaylamadıysa segment beklemededir kabul edersiniz.
Bekleyen segmentlere ek olarak, onaylanmış birkaç segmente de yer verin her bir Medya Oynatma Listesi'ndeki segmentlerden birini seçin. Bu uygulama, bir proje yöneticisinin bir Medya Oynatma Listesi sunucu tarafında kaybolduğunda atlanacak segment. Örneğin, Örneğin, en fazla iki onaylanmış segment ve en fazla beş adet onaylanmış segment ekleyebilirsiniz her bir Medya Oynatma Listesi'nde öne çıkan segmentler bulunmalıdır.
Sunucunun, bir Medya Segmenti aldığını, bunun için bir Söz konusu segment yüklendiğinde
200
(OK
) veya202
(Accepted
) yanıt. CEVAP202
yanıtı, sunucunun oynatma listesi oluşturur.Her Medya Segmenti için güncellenmiş bir Medya Oynatma Listesi bir Medya Oynatma Listesi kaybolduğunda sunucu bunu hızlı bir şekilde kurtarabilir.
Sunucu, Medya Segmentleri'nin alındığını kabul ettikçe Medya Oynatma Listesi'nin şu şekilde olmasını önlemek için
EXT-X-MEDIA-SEQUENCE
etiket değeri: çok uzun. Örneğin, sunucu listeleniyorsa sonraki Medya Oynatma Listesi sekizincisini, ve onuncu Medya Segmentlerini kullanabilirsiniz.EXT-X-KEY
veEXT-X-SESSION-KEY
etiketleri desteklenmez.
Örnekler
Aşağıdaki listede, kodlayıcının görüntülemesi beklenen dosyalara bir örnek gösterilmektedir gönder:
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ı bir videonun ortasında gönderilen Medya Oynatma Listesi gösterilmektedir
akış şeklinde gösterilir. Örnek bir akışın ortasından olduğu için
EXT-X-MEDIA-SEQUENCE
etiketinin değeri sıfır dışında.
#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 liste, Medya Segmentleri için gereksinimleri tanımlar:
- Dosya adları
- URL'deki Medya Segmenti dosya adları,
.ts
dosya adına sahip olmalıdır uzantısına sahip olmalı ve oynatma listesindeki dosya adlarıyla eşleşmelidir. - Medya Segmenti dosya adları, kodlayıcı yeniden başlatmaları genelinde benzersiz olmalıdır ve akışı tekrar başlatılı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çermeli ve ilk ikisi Segmentteki Taşıma Akışı paketleri, PAT ve PMT olmalıdır.
- İçerik
- Video ve ses karıştırılmalıdır.
- Desteklenen video codec'leri H.264 ve HEVC'dir.
- HEVC ile HDR desteklenir (HDR gereksinimlerine bakın).
- 60 fps'ye kadar olan kare hızları desteklenir.
- Yalnızca kapalı GOP desteklenir.
- Desteklenen ses codec'i AAC'dir ve yalnızca tek parçalı ses desteklenir.
- Medya segmentlerinin süresinin bir ile dört arasında olması önerilir aşağıdaki bölümde açıklandığı gibi). Medya Segmentleri 5 saniyeden uzun süren reklamlar gösterir.
- Medya segmentleri yalnızca HTTPS ile TLS/SSL katmanında şifrelenmelidir. Diğer şifreleme mekanizmaları desteklenmez.
Medya Segmenti süresi
HLS beslemesinin, yüksek hız gerektiren premium içerikler için kullanılmasını bekleriz ve yüksek çözünürlüklü. HLS beslemesi genellikle RTMP'den daha yüksek gecikmeye sahiptir. ve WebRTC tabanlı beslemeler için geçerlidir.
Bir ila dört saniyelik bir Medya Segmenti süresi öneriyoruz. daha küçük Medya Segmentleri daha düşük gecikmeye, ancak daha yüksek bir maliyete neden olabilir. yeniden arabellek hızı ve daha düşük kodlama verimliliği. Önceki bölümde belirtildiği gibi, Medya Segmentleri 5 saniyeden uzun olmamalıdır.
Bit hızları
YouTube Yardımı Ortala bit hızı ayarlarıyla ilgili yönergeler sağlar.
HEVC'nin aynı anda genellikle% 25 ila% 50 daha fazla veri sıkıştırması sağladığını H.264'e kıyasla video kalitesi. Bu nedenle, önerilen aralıklar, özellikle bant genişliğinden tasarruf etmek için HEVC ile kullanılabilir. çok işe yarar.
Diğer Gereksinimler
Kodlayıcılar, HTTP isteğindeki
User-Agent
başlığını üretici adını, model adını ve sürüm:User-Agent: <manufacturer> / <model> / <version>
Altyazılar
HLS beslemesi, altyazı göndermek için iki seçeneği destekler:
- Ayrı HTTP POST istekleri kullanarak altyazıları gönderin. Bu, tüm HLS beslemeleri.
- Yerleştirilmiş 608/708 altyazılar, H264 kullanan HLS beslemeleriyle çalışır. video codec'ini destekler, ancak HEVC video codec'ini kullanan beslemelerle çalışmaz. Daha fazla Canlı Altyazı Gereksinimleri'ne bakın YouTube Yardım Merkezi'ni ziyaret edin.
HTTP yanıt kodları
Aşağıdaki bölümlerde, YouTube'un döndürdüğü yanıt kodları açıklanmaktadır. HLS kullanılarak yayınlanan Medya Segmentleri ve Medya Oynatma Listelerine yanıt.
- 200 (Tamam)
PUT veya POST isteğine yanıt olarak HTTP 200 (OK) yanıtı, YouTube sunucusunun beklenen bir işlemi aldığını ve bunu işlediğini bahsettik.
DELETE isteğine yanıt olarak, HTTP 200 (OK) yanıtı, YouTube sunucusu, isteği aldı ve yoksaydı. YouTube sunucusu istemcinin akıştaki herhangi bir kaynağı SİLmesini gerektirmez ve DELETE istekleri. Performans açısından, YouTube, müşterilerine DELETE komutu gönderme.
- 202 (Kabul edildi)
HTTP 202 (Kabul Edilen) yanıtı, YouTube sunucusunun Medya Segmentini içeren bir Medya Oynatma Listesi almadan önce Bu, istemcinin gecikmeyi önlemek için en kısa sürede bu Medya Segmentini bölümünü seçin. Kodlayıcı, güncellenmiş bir izleme kodu gönderirse bunun bir sorun Her Medya Segmenti için Medya Oynatma Listesi.
- 400 (Hatalı İstek)
HTTP 400 (Hatalı İstek) yanıtı, aşağıdaki sorunlardan birini belirtir gerçekleşme tarihi:
- 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'si bozuk veya süresi dolmuş. Müşteri devam etmek için
cid
parametresini güncellemeniz gerekir.- 405 (Yönteme İzin Verilmiyor)
HTTP 405 (Yönteme İzin Verilmiyor) yanıtı, isteğin POST, PUT veya DELETE isteği değil.
- 500 (Dahili Sunucu Hatası)
HTTP 500 (Dahili Sunucu Hatası) yanıtı, sunucunun isteği işleyemedi. Bu hata için, şu adımları tekrarlamanızı öneririz: üslü istek geri yükleme (backoff) değerleridir.