WebRTC dan pengawasan video: bagaimana kami mengalahkan keterlambatan video dari kamera

gambar

Dari hari-hari pertama bekerja dengan sistem pengawasan video berbasis cloud, kami menghadapi masalah yang tanpanya memungkinkan untuk mengakhiri Ivideon - itu adalah Everest kami, memanjatnya membutuhkan banyak energi, tetapi sekarang kami akhirnya memasukkan kapak es ke mahkota rebus lintas platform.

Sistem untuk mentransmisikan suara dan video melalui Internet tidak boleh bergantung pada peralatan, klien Web dan standar yang mereka dukung, dan juga bekerja dengan benar dengan Penerjemah Alamat Jaringan dan firewall. Pengguna pengawasan video cloud ingin mengakses layanan, bahkan jika ia menggunakan kamera analog, dan lebih suka menonton siaran video langsung pada perangkat paling modern.

Sangat signifikan bahwa pengguna ingin menonton video dengan penundaan minimal. Hampir satu-satunya cara untuk menampilkan video latensi rendah di browser adalah dengan menggunakan WebRTC (web real-time communications). WebRTC adalah seperangkat teknologi untuk transmisi video dan audio peer-to-peer di browser, yang pada awalnya dirancang untuk mengirim dan memutar aliran video dengan latensi rendah. Untuk ini, antara lain, protokol UDP digunakan.

Sebelum memberi tahu Anda apa yang diberikan mesin baru kepada pengguna, kami akan mengingatkan Anda mengapa dan mengapa kami mendukung teknologi HLS, dan untuk apa yang kami putuskan untuk dilanjutkan.

Mesin HLS: pro dan kontra


gambar
( c )

Teknologi HLS (HTTP Live Streaming) dikembangkan oleh Apple, sehingga tidak mengherankan bahwa untuk pertama kalinya dukungannya muncul di perangkat merek khusus ini. Sampai saat ini, hampir semua televisi set-top box dan banyak perangkat yang berjalan pada OS Android juga dapat memutar rekaman format HLS.

Mesin HLS menggunakan codec video H264 yang terkenal dalam kombinasi dengan stream audio AAC atau MP3 untuk streaming video. Seluruh aliran audio dan video dikemas dalam wadah transportasi MPEG-TS. Untuk transmisi melalui HTTP, informasi yang terkandung dalam aliran dibagi menjadi beberapa fragmen yang dijelaskan dalam daftar putar m3u8. Dan hanya kemudian, fragmen-fragmen ini, bersama dengan daftar putar, ditransmisikan melalui HTTP. Membagi menjadi beberapa bagian secara otomatis berarti penundaan dalam hitungan detik. Fitur seperti wadah MPEG-TS.

Mesin HLS juga mendukung stream multibit, Live / VOD.

Keuntungan utama HLS:

  • dukungan bawaan di semua browser utama;
  • kemudahan implementasi (bila dibandingkan dengan WebRTC);
  • sangat mudah dan efisien untuk mengatur semua jenis siaran ke khalayak luas karena fakta bahwa segmen dapat dimuat ke CDN satu kali.

Untuk semua kesederhanaan mesin, tidak semuanya semulus kelihatannya. Masalah utama adalah bahwa pengembang pemain pihak ketiga telah menjauh dari rekomendasi Apple, misalnya, dalam hal format audio yang didukung. Secara khusus, banyak pengembang mulai menambahkan kemampuan untuk bekerja dengan aliran audio populer: video mpeg2, audio mpeg2, dll. Akibatnya, kami harus membuat format daftar putar yang berbeda untuk pemain yang berbeda.

Tetapi salah satu masalah terbesar dengan mesin HLS adalah latensi tinggi dalam transfer data.

Asal-usul "rem"


Alasan utama untuk keterlambatan tinggi dalam HLS terletak pada kenyataan bahwa programmer menciptakan mesin untuk mendapatkan gambar kualitas tertinggi. Oleh karena itu, parameter interval bingkai yang digunakan dan ukuran buffer pemutaran sama sekali tidak cocok untuk melakukan siaran video langsung. Karena itu, terjadi keterlambatan yang agak tinggi dalam transmisi urutan video, yang bisa 5-7 detik.

Di satu sisi, ini sedikit, misalnya, bagi mereka yang menonton film dari server hosting video. Tetapi untuk sistem pengawasan video, keterlambatan pengiriman rekaman bisa sangat penting.

Jika Anda mengamati kantor tempat karyawan keluar dari monitor satu jam sekali, penundaan 5 detik tidak masalah. Tetapi orang-orang mulai mengeluh bahwa, misalnya, ketika menyiarkan pertandingan sepak bola, GOOOOOOL sudah ditulis dalam obrolan, tetapi ini tidak ada di video :). Kami sudah memiliki sejumlah kasus khusus di mana Ivideon hampir harus mengganti skype.

Apakah mungkin untuk mengalahkan keterlambatan HLS? Jawaban untuk pertanyaan ini terdengar seperti pidato oleh pejuang tikus yang berpengalaman di sebuah ceramah sebelum pengganggu pemula: "Tikus tidak dapat dimusnahkan, tetapi jumlahnya dapat dikurangi seminimal mungkin." Jadi dengan penundaan dalam HLS, menghapusnya ke nol tidak akan berhasil, tetapi ada solusi di pasar yang dapat secara signifikan mengurangi penundaan tersebut.

Potong dangkal


Kerugian lain dari mesin adalah penggunaan file berukuran kecil untuk transfer data. Tampaknya ini buruk?

Siapa pun yang mencoba menyalin sejumlah besar file kecil dari satu media ke media lain, mungkin memperhatikan bahwa kecepatan penulisan set seperti itu jauh lebih rendah daripada satu file besar dengan ukuran yang sama. Ya, dan intensitas akses ke hard drive meningkat secara signifikan, yang secara umum mempengaruhi kinerja seluruh komputer secara negatif. Oleh karena itu, transmisi data video dalam bentuk fragmen kecil 10 detik juga berkontribusi pada peningkatan penundaan engine.

Ringkas semua pro dan kontra dari teknologi HLS.

Keuntungan HLS:

  1. Kemampuan untuk bekerja dengan perangkat apa pun. Anda dapat menonton video di perangkat modern apa pun, apakah itu ponsel pintar, tablet, laptop atau desktop. Yang utama adalah bahwa peramban web mutakhir dan kompatibel dengan HTML5 dan Media Source Extensions.
  2. Kualitas gambar luar biasa. Fungsi transfer data adaptif yang digunakan memungkinkan Anda untuk secara dinamis mengubah kualitas urutan video yang ditransmisikan tergantung pada bandwidth koneksi Internet, sementara algoritma berusaha untuk mempertahankan kualitas maksimum.
  3. Tidak perlu konfigurasi peralatan pengguna yang kompleks.

Kekurangan:

  1. Dukungan terbatas untuk bekerja dengan mesin pada beberapa perangkat.
  2. Penundaan pengiriman gambar yang tinggi.
  3. Peningkatan yang kuat dalam overhead dan kompleksitas optimasi karena penggunaan file kecil. Karena sifat wadahnya, kami tidak akan pernah dapat menunda kurang dari ukuran segmen.

Kerugian HLS melebihi keuntungannya bagi kami dan memaksa kami untuk mencari opsi alternatif.

Apa itu WebRTC?


gambar
( c )

WebRTC dikembangkan oleh Google pada 2011 untuk melakukan streaming video dan audio antara browser dan aplikasi seluler dengan latensi minimal. Untuk ini, protokol UDP standar dan algoritma kontrol aliran khusus digunakan. Hari ini adalah proyek open source, didukung secara aktif oleh Google dan sedang dikembangkan.

WebRTC adalah seperangkat teknologi untuk transmisi video dan suara peer-to-peer. Misalnya, browser pengguna yang menggunakan WebRTC dapat mentransfer data satu sama lain secara langsung, tanpa menggunakan server jarak jauh untuk menyimpan dan memproses data. Semua informasi juga diproses oleh browser dan aplikasi seluler pengguna akhir.

Kenyamanan dan kapabilitas hebat dari teknologi ini dihargai oleh pengembang dari semua browser populer. Hari ini dukungan WebRTC diimplementasikan di Mozilla Firefox, Opera, Google Chrome (dan semua browser berbasis Chromium), serta dalam aplikasi seluler untuk Android dan iOS.

Dengan semua kelebihannya yang tidak diragukan, WebRTC memiliki beberapa kelemahan signifikan.

Sulit memilih


WebRTC jauh lebih kompleks dalam hal jaringan karena ini tentang P2P. Sulit untuk men-debug, menguji, dapat berperilaku tidak terduga. Dalam hal ini, kita perlu mengatasi NAT dan firewall, kita perlu menyediakan pekerjaan di jaringan di mana UDP diblokir.

Implementasi Google WebRTC sangat sulit digunakan. Bahkan ada seluruh perusahaan yang menyediakan layanan perakitan SDK. Plus, implementasi dari Google sangat sulit untuk diintegrasikan dengan sistem kami sehingga tidak mentranskode semua video.

Namun, kami telah lama ingin memberi pengguna kesempatan untuk bekerja dengan urutan video "langsung" lengkap dan meminimalkan kelambatan gambar di layar dari acara itu sendiri. Plus, kami memiliki keinginan untuk membuat penggunaan kamera PTZ lebih nyaman, di mana penundaan sangat penting.

Menimbang bahwa implementasi lain dari perang melawan kelambatan sejauh ini memiliki fungsi yang terbatas dan bekerja terasa lebih buruk, kami memutuskan untuk menggunakan WebRTC.

Apa yang telah kita lakukan


gambar

Mengimplementasikan platform WebRTC dengan benar bukanlah tugas yang mudah. Kesalahan perhitungan atau ketidaktepatan dapat mengarah pada fakta bahwa keterlambatan dalam transmisi urutan video tidak hanya tidak berkurang dibandingkan dengan platform lain, tetapi juga meningkat.

Agar WebRTC dapat berfungsi dengan benar, pertama-tama, perlu untuk melakukan modernisasi teknologi stack untuk bekerja dengan video web. Yang kami lakukan.

Pertama, kami menerapkan server protokol pensinyalan WebRTC di atas Websocket, dan juga menyebarkan server peer WebRTC di cloud berdasarkan SDK webrtc.org. Tugasnya adalah mendistribusikan streaming video ke rekan-rekan WebRTC klien dalam format H.264 + Opus / G.711 tanpa transcoding video.

Kami memilih Websocket sebagai protokol pensinyalan karena sudah memiliki dukungan kualitas di semua peramban web populer. Karena ini, dimungkinkan untuk secara signifikan mengurangi tidak hanya overhead pengembangan, tetapi juga tidak membuang waktu dan sumber daya pada jabat tangan TCP dan TLS berulang dibandingkan dengan AJAX.

Faktanya adalah bahwa secara default WebRTC tidak menyediakan protokol pensinyalan yang diperlukan untuk konfigurasi, dukungan, dan pemutusan komunikasi video waktu-nyata antara sumber dan aplikasi klien.

Dan untuk menerapkan teknologi pensinyalan secara mandiri, kami perlu mengembangkan server sinyal kami sendiri dengan dukungan untuk beberapa protokol web (Websocet, WebRTC). Dan juga dengan kemampuan untuk mengelola sesi dan notifikasi dengan aman secara real time, manajemen video dan banyak parameter lainnya.

Kami mengatasi keterbatasan P2P dengan mengurangi penundaan bukan karena P2P, tetapi karena UDP dan kontrol aliran yang bertujuan mengurangi penundaan. Ini juga tertanam di WebRTC, karena kasus penggunaan utama adalah percakapan p2p melalui browser.

Di klien seluler, kami menerapkan pemutar menggunakan SDK webrtc.org, karena hanya di dalamnya kontrol aliran diterapkan dengan benar, ada semua skema Forward Error Correction (FEC) yang dikenal, dan mekanisme pengiriman kembali paket untuk semua browser diterapkan dengan benar. Penting juga bahwa SDK webrtc.org dikembangkan secara aktif oleh Google.

Apa hasil penerapan WebRTC?



Untuk menonton video langsung dari kamera, kami menambahkan pemutar yang dioptimalkan baru berdasarkan WebRTC ke akun kami. Ini memberikan rekaman video berkecepatan tinggi dan sepenuhnya menghilangkan masalah akumulasi keterlambatan seiring meningkatnya waktu menonton.

Setelah menerapkan dukungan WebRTC di layanan cloud Ivideon, kami dapat dengan yakin mengatakan bahwa sekarang pelanggan kami dapat menonton video langsung lengkap. Sekarang keterlambatan dalam rekaman siaran tidak melebihi satu detik! Sebagai perbandingan, mesin HLS sebelumnya memberikan pengiriman video dengan penundaan 5-7 detik. Perbedaan dalam kecepatan demonstrasi video sangat signifikan, dan pengguna akan segera melihatnya setelah mulai bekerja dengan layanan video kami.

Seperti yang kami harapkan, penerapan pemain baru memungkinkan kami untuk meningkatkan respons PTZ dan komunikasi suara dengan kamera.

gambar

Hanya ada satu titik halus yang ingin kita perhatikan. Pemain WebRTC baru masih dalam mode uji. Dan itulah sebabnya kami tidak menghubungkannya ke semua pelanggan kami secara default. Tetapi Anda dapat mengaktifkannya sendiri dengan mengaktifkan item yang sesuai di pengaturan kamera (untuk ini Anda harus pergi ke akun pribadi Anda).

Fitur implementasi WebRTC dalam layanan Ivideon


gambar

WebRTC saat ini masih merupakan teknologi eksperimental. Dukungannya belum diimplementasikan dengan benar di semua browser dan perangkat pengguna, dan juga tidak di semua kamera.

Ini menjelaskan fakta bahwa kami belum menjadikan pemutar WebRTC sebagai default default untuk semua pengguna.

Untuk saat ini, kami sarankan hanya menggunakan WebRTC di browser Google Chrome. Versi terbaru Firefox dan Safari juga mendukung teknologi ini, tetapi, sayangnya, masih tidak stabil.

Kami belum mengimplementasikan dukungan WebRTC untuk browser di perangkat seluler. Sekarang, jika Anda masuk dari perangkat seluler dan mengaktifkan WebRTC, mode ini tidak akan berfungsi. Namun, WebRTC ada di aplikasi seluler kami untuk Android dan iOS .

Dan menyimpulkan kisah tentang fitur-fitur implementasi WebRTC di layanan kami, kami mencatat dua poin lebih halus.

Pertama, teknologi ini berfokus pada penyiaran video langsung secara real time. Karena itu, jika bandwidth saluran Anda tidak cukup untuk transmisi video, Anda akan melihat penurunan frame (dengan HLS, Anda akan melihat video memudar dan peningkatan penundaan, sementara frame tidak akan putus), tetapi video masih akan disiarkan secara real time.

Kedua, karena teknologi ini dirancang untuk bekerja dengan video langsung dalam waktu nyata, kami tidak menggunakannya untuk bekerja dengan data video yang diarsipkan.

Perubahan layanan lainnya


Flash tidak lagi terlibat dalam mekanisme pemilihan mesin otomatis. Anda masih dapat menggunakan pemain seperti itu, tetapi untuk ini Anda harus memilihnya secara manual di pengaturan akun atau kamera. Ini bukan iseng saja, hanya menurut statistik dari layanan kami pengguna yang bekerja dengan Flash, praktis tidak ada lagi. Dan dalam upaya untuk menentukan apakah browser pengguna mendukungnya, kami kehilangan sekitar 2 detik waktu berharga.

Berikut adalah ringkasan singkat dari perubahan yang menanti Anda di sistem pengawasan video dan akun pribadi berbasis cloud kami. Tetap disini dan tetap disini!

Source: https://habr.com/ru/post/id449326/


All Articles