Apakah HTTP progresif mengunduh alternatif yang layak untuk HLS / DASH / RTMP untuk menyediakan video langsung?

16

Saya sedang mengerjakan sebuah situs web yang perlu melakukan streaming video langsung ke pengguna, dan karena itu saya harus mencari tahu tentang keadaan menyedihkan dari teknologi streaming video berbasis browser saat ini. Solusi paling populer untuk streaming langsung saat ini semua memiliki masalah kompatibilitas; RTMP memerlukan Flash, HLS hanya didukung secara native di Safari dan Chrome untuk Android, DASH tidak didukung secara native di mana pun, dan menggunakan dash.js memerlukan Ekstensi Sumber Media , yang belum didukung secara luas.

Ini mengarah pada pertanyaan yang bagi saya tampak jelas: apakah mungkin menggunakan unduhan progresif sederhana sebagai alternatif protokol seperti HLS, RTMP dan DASH yang membutuhkan dukungan atau plugin browser?

Gagasan untuk menggunakan pengunduhan progresif untuk mengalirkan media langsung belum pernah terjadi sebelumnya; orang sudah melakukannya untuk audio. Alat-alat seperti liveCaster memungkinkan Anda untuk streaming audio MP3 langsung melalui satu respons HTTP progresif tanpa perlu file MP3 yang sudah direkam, dan perpustakaan seperti AmplitudeJS telah keluar dari jalan mereka untuk menambahkan fitur-fitur yang berkaitan dengan streaming audio langsung semacam ini .

Saya belum melihat contoh teknik ini digunakan di alam liar untuk video , dan saya tidak tahu mengapa. Sepertinya itu akan menghapus lapisan masalah kompatibilitas sisi browser yang berantakan dan sulit untuk tradeoff yang relatif sedikit. (Dan kompatibilitas masih merupakan masalah besar untuk streaming langsung, bahkan ketika pro melakukannya; jika saya mencoba menonton video langsung di iPlayer BBC di Firefox, itu hanya memberi saya pesan kesalahan yang memberitahu saya untuk menginstal Flash.) Namun tidak ada yang menggunakan teknik ini, dan saya belum pernah melihat orang yang bahkan menyebutkan ide selain saya.

Mengapa? Apakah ada batasan mendasar yang tidak saya lihat yang membuatnya tidak mungkin hanya melakukan streaming file video seperti MP4 melalui unduhan progresif saat sedang dibuat, dan memutarnya dalam sebuah <video>elemen saat diunduh?

Mark Amery
sumber
Tidak bisakah Anda menggunakan pustaka javascript HLS (mis., Hls.js di sini: github.com/video-dev/hls.js/tree/master ) untuk menambahkan dukungan lintas browser HLS untuk halaman Anda? Saya kira ini mungkin tidak ada ketika Anda mengajukan pertanyaan ini awalnya ... tapi, sekarang. :)
stuckj

Jawaban:

3

Pertanyaan Anda valid dan secara teoritis saya pikir Anda bisa menggunakan Progressive Downloads untuk streaming video langsung. Sebenarnya Banyak Streaming Video Online seperti YouTube dll sudah menggunakan HTTP. Saya berasumsi Anda benar-benar berbicara tentang streaming LANGSUNG dan bukan hanya streaming.

Anda harus menerapkan kasus penggunaan Siaran Langsung, sendiri! Yang sebaliknya melakukan protokol streaming (RTMP dll.) Melakukannya sendiri. Berikut adalah beberapa alasan untuk lebih memilih protokol dan arsitektur ini:

1. Tingkat Bit Variabel

Sebagian besar video streaming langsung dikodekan dalam VBR dan video Anda harus cepat beradaptasi dengan mengubah kemacetan jaringan klien Anda. Jadi video Anda dapat beralih beberapa resolusi dalam waktu yang sangat singkat tergantung pada seberapa cepat atau lambat koneksi klien.

Menurut Wikipedia

Ini bekerja dengan mendeteksi bandwidth pengguna dan kapasitas CPU secara real time dan menyesuaikan kualitas aliran video yang sesuai

2. Konten Langsung

Poin paling penting adalah streaming langsung berarti konten langsung . Tidak seperti HTTP Progressive Download, Anda tidak dapat melakukan buffer kapan saja. Pengguna harus melihat bingkai terbaru yang ditujukan untuk seluruh dunia dan tidak bisa ketinggalan.

3. Nonaktifkan Mencari

Masalah kecil, tetapi protokol seharusnya tidak mengizinkan pengguna untuk mencari mundur (dan jelas ke depan). Ini seharusnya tidak hanya dikontrol di tingkat Pemutar Video tetapi juga di tingkat jaringan.

4. Sering terputusnya jaringan / tidak dapat diandalkan

Saya agak tidak jelas tentang hal ini tetapi saya tahu bahwa begitu unduhan HTTP yang masuk terputus, mungkin perlu waktu untuk membangun jabat tangan lain (bahkan dengan keep-alive). Protokol langsung jauh lebih cepat untuk terhubung dan terputus karena titik selanjutnya ->

5. Latensi

HTTP secara inheren berjalan melalui TCP yang memberikan jaminan pengiriman paket. Bandingkan ini dengan UDP yang digunakan dalam banyak protokol (terutama game multipemain langsung) di mana kecepatan diprioritaskan di atas jaminan.

Untuk lebih lanjut lihat di sini -> https://en.wikipedia.org/wiki/Streaming_media#Protocols

6. Menyalin Konten

Sebagian besar server streaming langsung hanya akan merespons konten waktu saat ini. Meskipun masih mungkin untuk menyalin konten streaming langsung, kita harus menggunakan screen capture dll. Memberikan HTTP progresif membuat tugas menyalin konten sangat sepele (Oleh karena itu begitu banyak pengunduh YouTube di luar sana).

Sekarang, HTTP dapat dimodelkan untuk menyediakan sebagian besar di atas.

HTTP Live Streaming (HLS) Apple , yang Anda sebutkan, paling mendekati apa yang ingin Anda capai.

Dan ada penelitian aktif yang terjadi di bidang ini seperti yang diberikan di sini -> http://www.streamingmedia.com/Articles/ReadArticle.aspx?ArticleID=65749&PageNum=2

Saya sedang mencari info lebih lanjut dan akan memperbarui jawaban ini.

Gaurav Ramanan
sumber
Tampaknya tidak benar untuk menyebutkan latensi sebagai kerugian menggunakan unduhan HTTP progresif mengingat bahwa pesaing utama menyertakan DASH dan HLS yang memberikan segmen video melalui beberapa permintaan HTTP berurutan. Saya tidak tahu setiap detail protokol, tapi saya berasumsi bahwa pendekatan yang terakhir membutuhkan latensi minimum setidaknya panjang segmen yang digunakan, sedangkan dengan pendekatan unduhan progresif tidak ada latensi minimum teoretis - latensi yang lebih rendah seharusnya sebuah iklan yang menguntungkan pendekatan download progresif, kan?
Mark Amery
Juga, beberapa masalah lain di sini - seperti mencari dan memulihkan dari terputus - adalah masalah yang berlaku sama untuk implementasi JavaScript DASH, namun dash.js mungkin mengatasinya. Saya membayangkan mereka bisa diatasi untuk pemain unduhan progresif hanya dengan mencuri solusi apa pun yang dikembangkan oleh dash.js.
Mark Amery
@MarkAmery Jika Anda membandingkan dengan DASH dan HLS maka ya saya kira itu sebanding. Tetapi, jika Anda membandingkannya dengan beberapa protokol lama yang melebihi UDP maka HTTP kehilangan kendali! Bahkan jika Anda melihat banyak sistem realtime saat ini dibangun menggunakan Websockets dan menghindari HTTP karena masalah latensi.
Gaurav Ramanan
1
Kemudahan menyalin konten adalah kerugian nyata dibandingkan dash.js dan HLS. Dan saya tidak yakin bagaimana aliran bit rate variabel dapat diimplementasikan menggunakan unduhan progresif, meskipun saya berharap itu akan mungkin dengan sedikit kelicikan.
Mark Amery
@MarkAmery Ketika datang ke realtime dan live streaming, kita harus mempertimbangkan kinerja dan bukan hanya kemungkinan. Saya akan melihat ke DASH tapi saya ingin tahu apakah ada tolok ukur yang menunjukkan perbandingan kinerja antara Streaming Protocols dan memulihkan HTTP dari putuskan.
Gaurav Ramanan