HLS ile Canlı YouTube İçeriği Aktarma

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&copy=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&copy=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&copy=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) veya 202 (Accepted) yanıt. CEVAP 202 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 ve EXT-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.
  • 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.