
Bulut video gözetim sistemi üzerinde çalışmaya başladığımız ilk günlerden itibaren, Ivideon'dan vazgeçebileceğimiz bir çözümü olmayan bir sorunla karşı karşıyaydık - bu bizim Everest'imizdi, tırmanmak çok fazla enerji gerektiriyordu, ama şimdi nihayet başardık platformlar arası bulmacanın tepesine bir buz baltası sapladı.
İnternet üzerinden ses ve video aktarımına yönelik sistem, ekipmana, Web istemcilerine ve destekledikleri standartlara bağlı olmamalı ve ayrıca Ağ Adresi Çeviricileri ve güvenlik duvarlarının varlığında doğru şekilde çalışmalıdır. Bulut video gözetim kullanıcısı, analog kameralar kullanıyor olsa bile hizmete erişmek istiyor ve canlı video yayınını en modern cihazda izlemeyi tercih ediyor.
Kullanıcının videoları minimum gecikmeyle izlemek istemesi çok önemlidir. Bir tarayıcıda videoyu düşük gecikmeyle göstermenin neredeyse tek yolu WebRTC'yi (web gerçek zamanlı iletişimleri) kullanmaktır. WebRTC, başlangıçta video akışlarının düşük gecikmeyle iletilmesi ve oynatılması için tasarlanmış, tarayıcılarda video ve sesin eşler arası aktarımına yönelik bir dizi teknolojidir. Bu amaçla diğer şeylerin yanı sıra UDP protokolü kullanılır.
Yeni motorun kullanıcıya neler kazandırdığını anlatmadan önce, neden ve neden HLS teknolojilerini desteklediğimizi ve neden yolumuza devam etmeye karar verdiğimizi hatırlatacağız.
HLS motoru: artıları ve eksileri

()
HLS (HTTP Canlı Yayın) teknolojisi Apple tarafından geliştirildiğinden, ilk olarak Apple cihazlarında desteklenmesi şaşırtıcı değil. Bugün HLS video, neredeyse tüm set üstü kutular ve işletim sistemini çalıştıran birçok cihaz tarafından da desteklenmektedir. Android.
HLS motoru, video verilerini yayınlamak için iyi bilinen H264 video codec bileşenini AAC veya MP3 ses akışlarıyla birlikte kullanır. Ses ve video veri akışının tamamı bir MPEG-TS taşıma konteynerinde paketlenir. HTTP protokolü aracılığıyla iletim için akışta yer alan bilgiler m3u8 çalma listelerinde açıklanan parçalara bölünür. Ve ancak o zaman bu parçalar, çalma listeleriyle birlikte HTTP aracılığıyla iletilir. Parçalama otomatik olarak saniye cinsinden bir gecikme anlamına gelir. Bu MPEG-TS konteynerinin bir özelliğidir.
HLS motoru aynı zamanda çoklu bit hızına sahip akışları (Canlı/VOD) da destekler.
HLS'nin ana avantajları:
- tüm büyük tarayıcılarda yerleşik destek;
- uygulama kolaylığı (WebRTC ile karşılaştırıldığında);
- Segmentlerin CDN'e bir kere yüklenebilmesi nedeniyle her türlü yayının geniş kitlelere düzenlenmesi oldukça kullanışlı ve verimlidir.
Motorun sadeliğine rağmen her şey göründüğü kadar düzgün değil. Asıl sorun, üçüncü taraf oynatıcı geliştiricilerinin, örneğin desteklenen ses formatları açısından Apple'ın tavsiyelerinden uzaklaşmasıdır. Özellikle birçok geliştirici, popüler ses akışlarıyla çalışma yeteneğini eklemeye başladı: mpeg2 video, mpeg2 ses vb. Sonuç olarak, farklı oynatıcılar için farklı çalma listesi formatları oluşturmak zorunda kaldılar.
Ancak HLS motorunun en büyük sorunlarından biri veri aktarımındaki yüksek gecikmedir.
“Frenlerin” kökenleri
HLS'nin yüksek gecikmesinin ana nedeni, programcıların motoru en yüksek kalitede görüntüleri elde edecek şekilde yaratmasıdır. Bu nedenle, kullanılan kare aralığı parametreleri ve oynatma arabelleğinin boyutu, canlı video yayınları için kesinlikle uygun değildir. Bu nedenle video görüntülerinin aktarımında 5-7 saniye kadar sürebilen oldukça yüksek bir gecikme yaşanıyor.
Bir yandan bu, örneğin bir video barındırma sunucusundan film izleyenler için fazla bir şey değil. Ancak video gözetim sistemleri için video görüntülerinin iletilmesindeki gecikme çok önemli olabilir.
Çalışanların saatte bir monitörlerinden yukarı baktığı bir ofisi izliyorsanız 5 saniyelik gecikmenin hiçbir önemi yoktur. Ancak insanlar, örneğin bir futbol maçı yayınlarken sohbette zaten GOOOOL yazdıklarından ancak bunun videoda henüz olmadığından şikayet etmeye başladılar :). Ivideon'un pratikte Skype'ın yerini alması gereken çok sayıda kullanıcı örneğimiz zaten var.
HLS'de gecikmeyi yenmek mümkün mü? Bu sorunun cevabı, deneyimli bir fare ilaçlama uzmanının acemi haşere kontrol uzmanlarına verdiği bir derste yaptığı konuşmaya benziyor: "Fareler yok edilemez, ancak sayıları makul bir minimuma indirilebilir." Aynı şekilde HLS'deki gecikmeyi de sıfıra indirmek mümkün olmayacak ancak piyasada gecikmeyi önemli ölçüde azaltabilecek çözümler var.
İnce kesimler
Motorun bir diğer dezavantajı ise veri aktarımı için küçük dosyaların kullanılmasıdır. Görünüşe göre bunda yanlış olan ne?
Çok sayıda küçük dosyayı bir ortamdan diğerine kopyalamayı deneyen herkes, muhtemelen böyle bir setin yazma hızının aynı boyuttaki büyük bir dosyadan çok daha düşük olduğunu fark etmiştir. Ve sabit sürücüye erişimin yoğunluğu önemli ölçüde artar, bu da genellikle tüm bilgisayarın performansını olumsuz yönde etkiler. Bu nedenle, video verilerinin 10 saniyelik küçük parçalar halinde iletilmesi de motor gecikmesinin artmasına katkıda bulunur.
HLS teknolojisinin tüm artılarını ve eksilerini kısaca özetleyelim.
HLS'nin Avantajları:
- Herhangi bir cihazla çalışabilme yeteneği. Videoları akıllı telefon, tablet, dizüstü bilgisayar veya masaüstü bilgisayar gibi herhangi bir modern cihazda izleyebilirsiniz. Önemli olan web tarayıcısının güncel ve HTML5 ve Medya Kaynağı Uzantıları ile uyumlu olmasıdır.
- Mükemmel görüntü kalitesi. Kullanılan uyarlanabilir veri aktarım işlevi, algoritma maksimum kaliteyi korumaya çalışırken, İnternet bağlantısının bant genişliğine bağlı olarak iletilen videonun kalitesini dinamik olarak değiştirmenize olanak tanır.
- Kullanıcının ekipmanının karmaşık konfigürasyonuna gerek yoktur.
Dezavantajları:
- Bazı cihazlarda motorla çalışmaya yönelik sınırlı destek.
- Görüntü aktarımında yüksek gecikmeler.
- Küçük dosyaların kullanılması nedeniyle optimizasyonun yükünde ve karmaşıklığında önemli artış. Container'ın doğası gereği hiçbir zaman segment boyutundan daha düşük bir gecikme elde edemeyiz.
HLS'nin dezavantajları bizim için avantajlarından daha ağır bastı ve bizi alternatif seçenekler aramaya zorladı.
WebRTC nedir?

()
WebRTC platformu, tarayıcılar ve mobil uygulamalar arasında minimum gecikmeyle video ve ses verilerinin akışını sağlamak için 2011 yılında Google tarafından geliştirildi. Bunun için standart UDP protokolü ve özel akış kontrol algoritmaları kullanılır. Bugün açık kaynak kodlu bir proje olup, Google tarafından aktif olarak desteklenmekte ve geliştirilmektedir.
WebRTC, eşler arası video ve ses aktarımına yönelik bir dizi teknolojidir. Yani, örneğin WebRTC kullanan kullanıcı tarayıcıları, verileri depolamak ve işlemek için uzak sunucuları kullanmadan, verileri doğrudan birbirlerine aktarabilirler. Tüm bilgiler aynı zamanda son kullanıcıların tarayıcıları ve mobil uygulamaları tarafından da işlenmektedir.
Bu teknolojinin sunduğu kolaylık ve kapsamlı yetenekler, tüm popüler tarayıcıların geliştiricileri tarafından takdir edilmiştir. WebRTC desteği şu anda Mozilla Firefox, Opera, Google Chrome (ve tüm Chromium tabanlı tarayıcılar) ve mobil uygulamalarda mevcuttur. Android ve iOS.
Tüm şüphesiz avantajlarına rağmen WebRTC'nin birçok önemli dezavantajı vardır.
Seçim zorlukları
WebRTC teknolojisi P2P ile ilgili olduğundan ağ etkileşimleri açısından çok daha karmaşıktır. Hata ayıklamak, test etmek zordur ve öngörülemez şekilde davranabilir. Aynı zamanda NAT ve güvenlik duvarını aşmamız, UDP'nin engellendiği ağlarda çalışmasını sağlamamız gerekiyor.
Google'ın WebRTC uygulamasının kullanımı çok zordur. SDK montaj hizmetleri sağlayan bir şirketin tamamı bile var. Ayrıca Google'ın uygulamasının, videonun tamamını yeniden kodlamadan sistemimize entegre edilmesi çok zordu.
Ancak uzun zamandır kullanıcılara tam teşekküllü "canlı" videoyla çalışma fırsatı vermek ve ekrandaki görüntü ile olaylar arasındaki gecikmeyi en aza indirmek istiyorduk. Ayrıca gecikmelerin kritik olduğu yerlerde PTZ kameraların kullanımını daha konforlu hale getirme isteğimiz vardı.
Diğer gecikme önleyici uygulamaların hala sınırlı işlevselliğe sahip olduğunu ve gözle görülür şekilde daha kötü çalıştığını göz önünde bulundurarak WebRTC'yi kullanmaya karar verdik.
Ne yaptık

WebRTC platformunu düzgün bir şekilde uygulamak kolay bir iş değildir. Herhangi bir yanlış hesaplama veya yanlışlık, video aktarımındaki gecikmelerin diğer platformlara göre azalmasına değil, hatta artmasına neden olabilir.
WebRTC'nin doğru çalışması için öncelikle web videosuyla çalışmaya yönelik yığının teknolojik yükseltmesinin yapılması gerekir. Biz de öyle yaptık.
İlk olarak Websocket üzerinden bir WebRTC sinyalleşme protokolü sunucusu uyguladık ve ayrıca webrtc.org SDK'sını temel alarak bulutta bir WebRTC eş sunucusunu devreye aldık. Görevi, video akışlarını, video kod dönüştürmesi olmadan H.264 + Opus/G.711 formatında istemci WebRTC eşlerine dağıtmaktır.
Sinyal protokolü olarak Websocket'i seçtik çünkü tüm popüler web tarayıcılarında zaten yüksek kaliteli desteğe sahip. Bu sayede, yalnızca geliştirme yükünü önemli ölçüde azaltmakla kalmaz, aynı zamanda AJAX'a kıyasla tekrarlanan TCP ve TLS anlaşmasıyla zaman ve kaynak israfını da önleyebilirsiniz.
Gerçek şu ki, WebRTC, kaynak ve istemci uygulamaları arasındaki gerçek zamanlı video iletişimini düzgün bir şekilde yapılandırmak, sürdürmek ve sonlandırmak için gerekli sinyal protokolünü varsayılan olarak sağlamaz.
Sinyalleşme teknolojisini bağımsız olarak uygulamak için çeşitli web protokollerini (Websocet, WebRTC) destekleyen kendi sinyalleşme sunucumuzu geliştirmemiz gerekiyordu. Oturumları ve bildirimleri gerçek zamanlı, güvenli bir şekilde yönetme yeteneği, video yönetimi ve çok daha fazlası.
Gecikmeyi P2P aracılığıyla değil, UDP ve gecikmeyi azaltmak için akış kontrolü yoluyla azaltarak P2P sınırlamalarının üstesinden geldik. Bu aynı zamanda WebRTC'de de yerleşiktir, çünkü ana kullanım şekli tarayıcı aracılığıyla p2p konuşmalardır.
Mobil istemcide, oynatıcıyı webrtc.org SDK'sını kullanarak uyguladık, çünkü yalnızca bu, akış kontrolünü doğru bir şekilde uygular, bilinen tüm İleri Hata Düzeltme (FEC) şemalarına sahiptir ve tüm tarayıcılar için paketleri yeniden gönderme mekanizmasını doğru şekilde uygular. webrtc.org SDK'sının Google tarafından aktif olarak geliştiriliyor olması da önemlidir.
WebRTC'yi uygulamanın sonucu nedir?
Kameralardan canlı video izlemek için kişisel hesabınıza WebRTC tabanlı optimize edilmiş yeni bir oynatıcı ekledik. Yüksek video yükleme hızları sağlar ve izleme süresi arttıkça biriken gecikme sorununu tamamen ortadan kaldırır.
Ivideon bulut hizmetinde WebRTC desteğinin sunulmasının ardından müşterilerimizin artık tam teşekküllü canlı video izleyebileceğini tam bir güvenle söyleyebiliriz. Artık video dizilerini yayınlarken gecikme bir saniyeyi geçmiyor! Karşılaştırma yapmak gerekirse, önceki HLS motoru 5-7 saniyelik bir gecikmeyle video yayını sağlıyordu. Video gösterim hızındaki fark çok önemlidir ve kullanıcı, video hizmetimizle çalışmaya başladıktan hemen sonra bunu fark edecektir.
Beklediğimiz gibi, yeni oynatıcının uygulanması PTZ'nin duyarlılığını ve kamerayla sesli iletişimi geliştirdi.

Yalnız dikkat çekmek istediğimiz ince bir nokta var. Yeni WebRTC oynatıcısı şu anda test modunda çalışıyor. Bu yüzden bunu varsayılan olarak tüm müşterilerimiz için etkinleştirmiyoruz. Ancak kamera ayarlarında ilgili öğeyi etkinleştirerek bunu kendiniz etkinleştirebilirsiniz (bunu yapmak için şuraya gidin: ).
Ivideon hizmetinde WebRTC uygulamasının özellikleri

WebRTC şu anda hala deneysel bir teknolojidir. Desteği henüz tüm tarayıcılarda, kullanıcı cihazlarında ve ayrıca tüm kameralarda doğru şekilde uygulanmamaktadır.
WebRTC oynatıcısını henüz tüm kullanıcılar için varsayılan yapmamamızın nedeni tam olarak budur.
Şimdilik WebRTC'yi yalnızca Google Chrome tarayıcılarında kullanmanızı öneririz. Firefox ve Safari'nin en son sürümleri de bu teknolojiyi destekliyor ancak maalesef hala kararsız.
Mobil cihazlardaki tarayıcılar için WebRTC desteğini henüz uygulamadık. Şu anda bir mobil cihazdan giriş yapıp WebRTC'yi etkinleştirirseniz bu mod çalışmayacaktır. Ancak WebRTC mobil uygulamalarımızda mevcuttur. и .
Hizmetimizdeki WebRTC uygulamasının özelliklerine ilişkin hikayeyi sonlandırırken iki ince noktaya daha değinelim.
İlk olarak teknoloji, gerçek zamanlı olarak canlı video yayınlamaya odaklanıyor. Bu nedenle, kanalınızda videoyu iletmek için yeterli bant genişliği yoksa kare düşüşleri fark edeceksiniz (HLS ile videoda solma ve artan gecikme fark edeceksiniz, ancak kare düşüşü olmayacak), ancak video yine de gerçek olarak yayınlanmaya devam edecek zaman.
İkinci olarak, teknoloji özel olarak gerçek zamanlı canlı videoyla çalışacak şekilde tasarlandığından, onu arşivlenmiş video verileriyle çalışmak için kullanmıyoruz.
Hizmetteki diğer değişiklikler
Şu anda Flash artık otomatik motor seçme mekanizmasına dahil değildir. Hala böyle bir oynatıcıyı kullanabilirsiniz, ancak bunu yapmak için hesap veya kamera ayarlarında onu manuel olarak seçmeniz gerekir. Bu modaya bir övgü değil, sadece hizmetimizin istatistiklerine göre Flash ile çalışan neredeyse hiç kullanıcı kalmadı. Kullanıcının tarayıcısının bunu destekleyip desteklemediğini belirlemeye çalışırken yaklaşık 2 saniyelik değerli zamanımızı kaybediyoruz.
Bulut video gözetim sistemimizde ve kişisel hesabınızda sizi bekleyen değişikliklere kısa bir genel bakış. Bizimle kalın ve haberleri takip edin!
Kaynak: habr.com
