Aşamalı HTTP indirme, canlı video sağlamak için HLS / DASH / RTMP'ye uygun bir alternatif mi?


16

Kullanıcılara canlı video akışı yapması gereken bir web sitesi üzerinde çalışıyorum ve bu nedenle mevcut tarayıcı tabanlı video akış teknolojisinin üzücü durumunu kafamda dolaşmak zorunda kaldım. Şu anda canlı akış için en popüler çözümlerin hepsinde uyumluluk sorunları vardır; RTMP, HLS sadece yerel olarak Android için Safari ve Chrome desteklenir, Flash gerektirir DASH değil doğal olarak her yerde desteklenir ve kullanan dash.js gerektirir Medya Kaynağı Uzantıları henüz yaygın olarak desteklenmemektedir.

Bu bana açık bir soru getiriyor: basit aşamalı indirmeyi , tarayıcı desteği veya eklentileri gerektiren HLS, RTMP ve DASH gibi protokollere alternatif olarak kullanmak mümkün mü?

Canlı medya akışı için aşamalı indirmeyi kullanma fikri benzeri görülmemektedir; insanlar bunu zaten ses için yapıyor. LiveCaster gibi araçlar , önceden kaydedilmiş bir MP3 dosyasına ihtiyaç duymadan tek bir aşamalı HTTP yanıtıyla canlı MP3 sesi akışı yapmanıza izin verir ve AmplitudeJS gibi kütüphaneler , bu tür canlı ses akışı ile ilgili özellikler eklemek için kendi yolundan çıkmıştır .

Yine de, bu tekniğin vahşi ortamlarda video için kullanıldığını görmedim ve nedenini anlayamıyorum. Görünüşe göre nispeten daha az ödün vermek için dağınık ve zor tarayıcı tarafı uyumluluk sorunları katmanını kaldıracak gibi görünüyor. (Ve uyumluluk, profesyoneller bunu yaparken bile canlı akış için hala büyük bir sorundur; BBC'nin Firefox'taki iPlayer'ında canlı video izlemeye çalışırsam, bana Flash'ı yüklememi söyleyen bir hata mesajı veriyor.) Yine de kimse kullanmıyor Bu tekniği hiç görmedim ve hiç kimsenin benim yanımdaki fikirden bahsetmediğini bile görmedim .

Neden? Sadece MP4 gibi bir video dosyasını üretilirken aşamalı indirme yoluyla akışa almayı ve <video>indirirken bir öğede oynatmayı imkansız hale getirecek temel bir sınırlama var mı ?


Sayfanıza çapraz tarayıcı HLS desteği eklemek için bir HLS javascript kütüphanesi (ör. Hls.js burada: github.com/video-dev/hls.js/tree/master ) kullanamaz mısınız? Sanırım bu soruyu başlangıçta sorduğunuzda belki de yoktu ... ama şimdi var. :)
stuckj

Yanıtlar:


3

Sorunuz geçerlidir ve teorik olarak düşündüğünü olabilir kullanmak Aşamalı İndirme canlı video akışı için. Aslında YouTube gibi bir çok Çevrimiçi Akış Videosu zaten HTTP kullanıyor. Sadece canlı akıştan değil, sadece CANLI akıştan bahsettiğinizi varsayıyorum .

Yine de, Canlı Akış kullanım örneklerini kendiniz uygulamak zorunda kalacaksınız! Aksi takdirde akış protokolleri (RTMP vb.) Kendilerini yaparlar. Bu protokolleri ve mimariyi tercih etmek için bazı nedenler:

1. Değişken Bit Hızı

Çoğu Canlı akış videosu VBR olarak kodlanır ve videonuzun istemcinizin değişen ağ tıkanıklığına hızla uyum sağlaması gerekir. Böylece videonuz, istemci bağlantısının ne kadar hızlı veya yavaş olduğuna bağlı olarak çok kısa sürede birden çok çözünürlüğü değiştirebilir.

Wikipedia'ya göre

Bir kullanıcının bant genişliğini ve CPU kapasitesini gerçek zamanlı olarak tespit ederek ve video akışının kalitesini buna göre ayarlayarak çalışır

2. Canlı İçerik

En önemli nokta Canlı akışın canlı içerik anlamına gelmesidir . HTTP Aşamalı İndirmeden farklı olarak, hiçbir zaman arabelleğe alamazsınız. Kullanıcı tüm dünya için tasarlanmış en yeni çerçeveyi görmelidir ve geride kalmaz.

3. Aramayı Devre Dışı Bırak

Küçük bir sorun, ancak protokol özellikle kullanıcının geriye doğru (ve açıkça ileriye doğru) aramasına izin vermemelidir. Bu yalnızca Video Oynatıcı düzeyinde değil, aynı zamanda ağ düzeyinde de kontrol edilmelidir.

4. Sık sık kopukluklar / güvenilir olmayan ağ

Bu nokta hakkında biraz net değilim ama bir kez gelen HTTP indirme bağlantısı kesildiğinde, başka bir el sıkışma (hatta ile keep-alive) kurmak biraz zaman alabilir biliyorum . Canlı protokoller, bir sonraki nokta nedeniyle bağlanmak ve bağlantıyı kesmek çok daha hızlı ->

5. Gecikme

HTTP doğal olarak TCP üzerinden çalışır ve bu da paketlerin garantili olarak teslim edilmesini sağlar. Bunu, hızın garantilere göre önceliklendirildiği birçok protokolde (özellikle canlı çok oyunculu oyunlarda) kullanılan UDP ile karşılaştırın .

Daha fazla bilgi için buraya bakın -> https://en.wikipedia.org/wiki/Streaming_media#Protocols

6. İçerik Kopyalama

Çoğu canlı akış sunucusu yalnızca geçerli zamanın içeriğine yanıt verecektir. Canlı akışların içeriğini kopyalamak hala mümkün olsa da, bir kişinin ekran yakalamaya vb. Başvurması gerekir. HTTP aşamalı indirilmesi, içeriği kopyalama görevini oldukça önemsiz hale getirir (bu nedenle çok fazla YouTube indiricisi var).

Şimdi, yukarıdakilerin çoğunu sağlamak için HTTP modellenebilir .

Bahsettiğiniz Apple'ın HTTP Canlı Akışı (HLS) , elde etmeye çalıştığınız şeye en yakın olanıdır.

Ve burada verildiği gibi bu alanda aktif araştırmalar var -> http://www.streamingmedia.com/Articles/ReadArticle.aspx?ArticleID=65749&PageNum=2

Daha fazla bilgi için bakıyorum ve bu cevabı güncelleyeceğim.


Birincil rakiplerin birden çok ardışık HTTP isteği yoluyla video bölümleri sunan DASH ve HLS'yi içerdiği göz önüne alındığında, HTTP aşamalı indirmenin kullanılmasının bir dezavantajı olarak gecikmeden bahsetmek yanlış görünüyor . Protokollerin her detayını bilmiyorum, ancak ikinci yaklaşımın en azından kullanılan segment uzunluğunun minimum gecikmesini gerektirdiğini , ancak aşamalı indirme yaklaşımı ile teorik minimum gecikmenin olmadığını varsayıyorum - düşük gecikme aşamalı indirme yaklaşımının bir reklam avantajı, değil mi?
Mark Amery

Ayrıca, buradaki diğer endişelerden bazıları - bağlantı kopukluklarını aramak ve onlardan kurtulmak gibi - bir DASH'ın JavaScript uygulamasına eşit olarak uygulanan sorunlardır, ancak dash.js muhtemelen bunların üstesinden gelir. Sadece dash.js geliştiricilerinin ortaya çıkardığı çözümleri çalarak aşamalı bir indirme oynatıcısının üstesinden gelebileceklerini hayal ediyorum.
Mark Amery

@ MarkAmery Eğer DASH ve HLS ile karşılaştırırsanız evet sanırım karşılaştırılabilir. Ancak, UDP üzerindeki bazı eski protokollerle karşılaştırırsanız, HTTP eller kaybeder! Bugün birçok gerçek zamanlı sistem görüyorsanız bile, gecikme sorunları nedeniyle Websockets ve eschew HTTP kullanılarak oluşturulmuştur.
Gaurav Ramanan

1
İçerik kopyalama kolaylığı dash.js ve HLS üzerinde gerçek bir dezavantajdır. Ve değişken bit hızı akışlarının aşamalı indirme kullanılarak nasıl uygulanabileceğinden emin değilim, ancak biraz kurnazlıkla mümkün olacağını umuyorum.
Mark Amery

@MarkAmery Gerçek zamanlı ve canlı akış söz konusu olduğunda, sadece olasılığı değil, performansı da dikkate almalıyız . DASH'a bakacağım ancak Akış Protokolleri ile bir bağlantı kesilmesinden HTTP kurtarma arasında performans karşılaştırmaları gösteren karşılaştırmalar olup olmadığını merak ediyorum.
Gaurav Ramanan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.