
Sejak hari pertama bekerja pada sistem pengawasan video cloud, kami dihadapkan pada masalah, tanpa solusi yang dapat kami tinggalkan di Ivideon - ini adalah Everest kami, pendakian yang menghabiskan banyak energi, tetapi sekarang kami akhirnya melakukannya menancapkan kapak es ke bagian atas teka-teki lintas platform.
Sistem transmisi audio dan video melalui Internet tidak boleh bergantung pada peralatan, klien Web dan standar yang didukungnya, serta berfungsi dengan baik jika ada Penerjemah Alamat Jaringan dan firewall. Pengguna pengawasan video cloud ingin mengakses layanan ini, meskipun ia menggunakan kamera analog, dan lebih suka menonton siaran video langsung di perangkat paling modern.
Sangatlah penting bahwa pengguna ingin menonton video dengan penundaan minimal. Hampir satu-satunya cara untuk menampilkan video dengan latensi rendah di browser adalah dengan menggunakan WebRTC (komunikasi real-time web). WebRTC adalah seperangkat teknologi untuk transmisi video dan audio peer-to-peer di browser, awalnya dirancang untuk transmisi dan pemutaran aliran video dengan latensi rendah. Untuk tujuan ini, antara lain, protokol UDP digunakan.
Sebelum kami memberi tahu Anda apa yang diberikan mesin baru kepada pengguna, kami akan mengingatkan Anda mengapa dan mengapa kami mendukung teknologi HLS, dan mengapa kami memutuskan untuk melanjutkan.
Mesin HLS: pro dan kontra

()
Teknologi HLS (HTTP Live Streaming) dikembangkan oleh Apple, jadi tidak mengherankan jika teknologi ini pertama kali didukung pada perangkat Apple. Saat ini, video HLS juga didukung oleh hampir semua set-top box dan banyak perangkat yang menjalankan sistem operasi tersebut. Android.
Mesin HLS menggunakan codec video H264 yang terkenal dikombinasikan dengan aliran audio AAC atau MP3 untuk mengalirkan data video. Seluruh aliran data audio dan video dikemas ke dalam wadah transport MPEG-TS. Untuk transmisi melalui protokol HTTP, informasi yang terkandung dalam aliran dibagi menjadi beberapa bagian yang dijelaskan dalam daftar putar m3u8. Dan baru kemudian fragmen-fragmen ini, bersama dengan daftar putar, dikirimkan melalui HTTP. Chunking secara otomatis berarti penundaan dalam hitungan detik. Ini adalah fitur wadah MPEG-TS.
Mesin HLS juga mendukung streaming multibitrate, Live/VOD.
Keuntungan utama HLS:
- dukungan bawaan di semua browser utama;
- kemudahan implementasi (dibandingkan dengan WebRTC);
- Sangat mudah dan efisien untuk mengatur semua jenis siaran ke khalayak luas karena segmen dapat diunggah ke CDN satu kali.
Meski mesinnya sederhana, tidak semuanya semulus kelihatannya. Masalah utamanya adalah pengembang pemutar pihak ketiga telah menyimpang 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, mereka harus membuat format daftar putar yang berbeda untuk pemutar yang berbeda.
Namun salah satu masalah terbesar dengan mesin HLS adalah tingginya latensi dalam transfer data.
Asal usul “rem”
Alasan utama tingginya latensi HLS terletak pada kenyataan bahwa pemrogram menciptakan mesin untuk mendapatkan gambar dengan kualitas terbaik. Oleh karena itu, parameter interval bingkai yang digunakan dan ukuran buffer pemutaran tidak cocok untuk siaran video langsung. Oleh karena itu, terjadi penundaan yang cukup tinggi dalam transmisi rekaman video, yaitu bisa mencapai 5-7 detik.
Di satu sisi, ini tidak seberapa, misalnya bagi mereka yang menonton film dari server hosting video. Namun untuk sistem pengawasan video, penundaan dalam transmisi rekaman video bisa menjadi hal yang sangat penting.
Jika Anda menonton kantor di mana karyawan melihat dari monitor mereka satu kali dalam satu jam, maka penundaan 5 detik tidak menjadi masalah sama sekali. Tapi orang-orang mulai mengeluh, misalnya saat siaran pertandingan sepak bola, mereka sudah menulis GOOOOL di chat, tapi ini belum ada di video :). Kami sudah memiliki sejumlah kasus pengguna di mana Ivideon seharusnya menggantikan Skype.
Apakah mungkin untuk mengalahkan latensi di HLS? Jawaban atas pertanyaan ini terdengar seperti pidato seorang pembasmi tikus berpengalaman pada sebuah kuliah di hadapan pakar pengendalian hama pemula: “Tikus tidak dapat dimusnahkan, tetapi jumlahnya dapat dikurangi hingga jumlah minimum yang wajar.” Sama halnya dengan penundaan di HLS, tidak mungkin untuk menguranginya menjadi nol, namun terdapat solusi di pasar yang dapat mengurangi penundaan secara signifikan.
Potongan halus
Kerugian lain dari mesin ini adalah penggunaan file kecil untuk transfer data. Tampaknya, apa yang salah dengan ini?
Siapa pun yang mencoba menyalin sejumlah besar file kecil dari satu media ke media lain mungkin memperhatikan bahwa kecepatan penulisan kumpulan tersebut jauh lebih rendah daripada satu file besar dengan ukuran yang sama. Dan intensitas akses ke hard drive meningkat secara signifikan, yang umumnya berdampak negatif pada kinerja seluruh komputer. Oleh karena itu, transmisi data video dalam potongan kecil berdurasi 10 detik juga berkontribusi terhadap peningkatan latensi mesin.
Mari kita rangkum secara singkat semua pro dan kontra dari teknologi HLS.
Kelebihan HLS:
- Kemampuan untuk bekerja dengan perangkat apa pun. Anda dapat menonton video di perangkat modern apa pun, baik itu ponsel cerdas, tablet, laptop, atau PC desktop. Hal utama adalah browser web mutakhir dan kompatibel dengan HTML5 dan Ekstensi Sumber Media.
- Kualitas gambar luar biasa. Fungsi transmisi data adaptif yang digunakan memungkinkan Anda mengubah kualitas video yang dikirimkan secara dinamis tergantung pada bandwidth koneksi Internet, sementara algoritme berupaya mempertahankan kualitas maksimal.
- Tidak diperlukan konfigurasi peralatan pengguna yang rumit.
Kekurangan:
- Dukungan terbatas untuk bekerja dengan mesin pada beberapa perangkat.
- Penundaan tinggi dalam transmisi gambar.
- Peningkatan signifikan dalam overhead dan kompleksitas optimasi karena penggunaan file kecil. Karena sifat wadahnya, kami tidak akan pernah bisa mendapatkan latensi yang lebih rendah dari ukuran segmen.
Kerugian HLS melebihi kelebihannya bagi kami dan memaksa kami untuk mencari opsi alternatif.
Apa itu WebRTC

()
Platform WebRTC dikembangkan oleh Google pada tahun 2011 untuk mengirimkan data streaming video dan audio antara browser dan aplikasi seluler dengan latensi minimal. Untuk ini, protokol UDP standar dan algoritma kontrol aliran khusus digunakan. Saat ini proyek ini merupakan proyek sumber terbuka, dikelola secara aktif oleh Google dan sedang dikembangkan.
WebRTC adalah seperangkat teknologi untuk transmisi video dan audio peer-to-peer. Artinya, 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.
Kemudahan dan kemampuan luas teknologi ini telah diapresiasi oleh para pengembang semua browser populer. Dukungan WebRTC saat ini tersedia di Mozilla Firefox, Opera, Google Chrome (dan semua browser berbasis Chromium), serta di aplikasi seluler. Android dan iOS.
Terlepas dari semua kelebihannya yang tidak diragukan lagi, WebRTC memiliki beberapa kelemahan signifikan.
Kesulitan memilih
Teknologi WebRTC jauh lebih kompleks dalam hal interaksi jaringan karena kita berbicara tentang P2P. Sulit untuk melakukan debug, menguji, dan dapat berperilaku tidak terduga. Pada saat yang sama, kita perlu mengatasi NAT dan firewall, kita perlu memastikan operasi di jaringan di mana UDP diblokir.
Implementasi WebRTC Google sangat sulit digunakan. Bahkan ada seluruh perusahaan yang menyediakan layanan perakitan SDK. Selain itu, penerapan Google sangat sulit untuk diintegrasikan dengan sistem kami tanpa melakukan enkode ulang seluruh video.
Namun, kami sudah lama ingin memberikan kesempatan kepada pengguna untuk bekerja dengan video "langsung" yang lengkap dan meminimalkan jeda antara gambar di layar dan peristiwa itu sendiri. Selain itu, kami memiliki keinginan untuk membuat penggunaan kamera PTZ, yang memerlukan penundaan, menjadi lebih nyaman.
Mengingat implementasi anti-lag lainnya masih memiliki fungsionalitas terbatas dan bekerja jauh lebih buruk, kami memutuskan untuk menggunakan WebRTC.
Apa yang telah kita lakukan

Mengimplementasikan platform WebRTC dengan benar bukanlah tugas yang mudah. Kesalahan perhitungan atau ketidakakuratan apa pun dapat menyebabkan penundaan transmisi video, tidak hanya berkurang dibandingkan platform lain, tetapi bahkan meningkat.
Agar WebRTC berfungsi dengan benar, pertama-tama, perlu dilakukan peningkatan teknologi pada tumpukan untuk bekerja dengan video web. Itulah yang kami lakukan.
Pertama, kami menerapkan server protokol pensinyalan WebRTC melalui Websocket, dan juga menerapkan server rekan WebRTC di cloud berdasarkan SDK webrtc.org. Tugasnya adalah mendistribusikan aliran video ke rekan klien WebRTC dalam format H.264 + Opus/G.711 tanpa transcoding video.
Kami memilih Websocket sebagai protokol pensinyalan karena sudah memiliki dukungan berkualitas tinggi di semua browser web populer. Oleh karena itu, Anda tidak hanya dapat mengurangi overhead pengembangan secara signifikan, tetapi juga menghindari pemborosan waktu dan sumber daya pada jabat tangan TCP dan TLS yang berulang dibandingkan dengan AJAX.
Faktanya adalah, secara default, WebRTC tidak menyediakan protokol pensinyalan yang diperlukan untuk mengonfigurasi, memelihara, dan mengakhiri komunikasi video real-time dengan benar antara aplikasi sumber dan klien.
Dan untuk menerapkan teknologi persinyalan secara mandiri, kami perlu mengembangkan server persinyalan kami sendiri dengan dukungan beberapa protokol web (Websocet, WebRTC). Dan dengan kemampuan mengelola sesi dan notifikasi secara real-time dengan aman, pengelolaan video, dan banyak lagi.
Kami mengatasi keterbatasan P2P dengan mengurangi latensi bukan melalui P2P, namun melalui UDP dan kontrol aliran untuk mengurangi latensi. Ini juga dibangun di WebRTC, karena kasus penggunaan utamanya adalah percakapan p2p melalui browser.
Di klien seluler, kami mengimplementasikan pemutar menggunakan SDK webrtc.org, karena hanya pemutar yang mengimplementasikan kontrol aliran dengan benar, memiliki semua skema Koreksi Kesalahan Maju (FEC) yang diketahui, dan mengimplementasikan mekanisme pengiriman ulang paket dengan benar untuk semua browser. Penting juga agar SDK webrtc.org dikembangkan secara aktif oleh Google.
Apa hasil penerapan WebRTC?
Untuk melihat video langsung dari kamera, kami telah menambahkan pemutar baru yang dioptimalkan berdasarkan WebRTC ke akun pribadi Anda. Ini memberikan kecepatan pemuatan video yang cepat dan sepenuhnya menghilangkan masalah latensi yang terakumulasi seiring bertambahnya waktu menonton.
Setelah memperkenalkan dukungan WebRTC di layanan cloud Ivideon, kami dapat mengatakan dengan penuh keyakinan bahwa klien kami sekarang dapat menonton video langsung secara lengkap. Sekarang penundaan saat menyiarkan rangkaian video tidak lebih dari satu detik! Sebagai perbandingan, mesin HLS sebelumnya menyediakan pengiriman video dengan penundaan 5-7 detik. Perbedaan kecepatan demonstrasi video sangat signifikan, dan pengguna akan segera menyadarinya setelah mulai bekerja dengan layanan video kami.
Seperti yang kami harapkan, penerapan pemain baru ini telah meningkatkan respons PTZ dan komunikasi suara dengan kamera.

Hanya ada satu hal halus yang ingin kami perhatikan. Pemain WebRTC baru saat ini bekerja dalam mode uji. Dan itulah mengapa kami tidak mengaktifkannya untuk semua klien kami secara default. Namun Anda dapat mengaktifkannya sendiri dengan mengaktifkan item yang sesuai di pengaturan kamera (untuk melakukan ini, Anda harus pergi ke ).
Fitur implementasi WebRTC di layanan Ivideon

WebRTC masih merupakan teknologi eksperimental saat ini. Dukungannya belum diterapkan dengan benar di semua browser dan perangkat pengguna, dan juga tidak di semua kamera.
Inilah sebabnya kami belum menjadikan pemutar WebRTC sebagai default untuk semua pengguna.
Untuk saat ini, kami menyarankan penggunaan WebRTC hanya di browser Google Chrome. Firefox dan Safari versi terbaru juga mendukung teknologi ini, namun sayangnya masih belum stabil.
Kami belum menerapkan dukungan WebRTC untuk browser di perangkat seluler. Saat ini, jika Anda masuk dari perangkat seluler dan mengaktifkan WebRTC, mode ini tidak akan berfungsi. Namun, WebRTC tersedia di aplikasi seluler kami untuk и .
Dan sebagai penutup cerita tentang fitur implementasi WebRTC di layanan kami, mari kita perhatikan dua poin yang lebih halus.
Pertama, teknologi ini difokuskan pada penyiaran video langsung secara real time. Oleh karena itu, jika saluran Anda tidak memiliki cukup bandwidth untuk mengirimkan video, Anda akan melihat penurunan bingkai (dengan HLS Anda akan melihat video memudar dan peningkatan latensi, tetapi tidak akan ada penurunan bingkai), namun video akan tetap disiarkan secara nyata. waktu.
Kedua, karena teknologi ini dirancang untuk bekerja secara khusus dengan video langsung secara real-time, kami tidak menggunakannya untuk bekerja dengan data video yang diarsipkan.
Perubahan lain pada layanan
Saat ini Flash tidak lagi terlibat dalam mekanisme pemilihan mesin otomatis. Anda masih dapat menggunakan pemutar seperti itu, tetapi untuk melakukan ini, Anda harus memilihnya secara manual di pengaturan akun atau kamera. Ini bukan merupakan penghormatan terhadap fashion, hanya saja menurut statistik layanan kami, praktis tidak ada lagi pengguna yang bekerja dengan Flash. Dan saat mencoba menentukan apakah browser pengguna mendukungnya, kami kehilangan waktu berharga sekitar 2 detik.
Berikut ini ikhtisar singkat tentang perubahan yang menanti Anda di sistem pengawasan video cloud dan akun pribadi kami. Tetap bersama kami dan ikuti beritanya!
Sumber: www.habr.com
