
От първите дни на работа по облачна система за видеонаблюдение се сблъскахме с проблем, без решение на който можехме да се откажем от Ivideon - това беше нашият Еверест, изкачването на което отне много енергия, но сега най-накрая заби брадва за лед в горната част на кръстосания пъзел.
Системата за предаване на аудио и видео през Интернет не трябва да зависи от оборудването, уеб клиентите и поддържаните от тях стандарти, а също така да работи правилно при наличието на преводачи на мрежови адреси и защитни стени. Потребителят на облачно видеонаблюдение иска да има достъп до услугата, дори ако използва аналогови камери и предпочита да гледа видео предаване на живо на най-модерното устройство.
Много важно е, че потребителят иска да гледа видеоклипове с минимално забавяне. Почти единственият начин да покажете видео с ниска латентност в браузър е да използвате WebRTC (уеб комуникации в реално време). WebRTC е набор от технологии за peer-to-peer предаване на видео и аудио в браузъри, първоначално предназначени за предаване и възпроизвеждане на видео потоци с ниска латентност. За тази цел, наред с други неща, се използва UDP протоколът.
Преди да ви кажем какво дава новият двигател на потребителя, ще ви напомним защо и защо поддържаме HLS технологиите и защо решихме да продължим напред.
HLS двигател: плюсове и минуси

()
Технологията HLS (HTTP Live Streaming) е разработена от Apple, така че не е изненадващо, че за първи път е била поддържана от устройства на Apple. Днес HLS видеото се поддържа и от почти всички приемници и много устройства, работещи с операционната система. Android.
Механизмът HLS използва добре познатия видео кодек H264 в комбинация с AAC или MP3 аудио потоци за поточно предаване на видео данни. Целият поток от аудио и видео данни се пакетира в MPEG-TS транспортен контейнер. За предаване чрез HTTP протокола информацията, съдържаща се в потока, се разделя на фрагменти, описани в плейлисти m3u8. И едва тогава тези фрагменти, заедно с плейлистите, се предават чрез HTTP. Разкъсването автоматично означава забавяне в секунди. Това е характеристика на MPEG-TS контейнера.
Механизмът HLS също поддържа многобитови потоци, Live/VOD.
Основни предимства на HLS:
- вградена поддръжка във всички основни браузъри;
- лекота на внедряване (в сравнение с WebRTC);
- Много е удобно и ефективно да се организират всякакви излъчвания за голяма аудитория поради факта, че сегментите могат да бъдат качени в CDN веднъж.
Въпреки простотата на двигателя, не всичко е толкова гладко, колкото изглежда. Основният проблем е, че разработчиците на плейъри на трети страни са се отдалечили от препоръките на Apple, например по отношение на поддържаните аудио формати. По-специално, много разработчици започнаха да добавят възможност за работа с популярни аудио потоци: mpeg2 видео, mpeg2 аудио и т.н. В резултат на това те трябваше да създадат различни формати на плейлисти за различни плейъри.
Но един от най-големите проблеми с HLS двигателя е високата латентност при трансфера на данни.
Произходът на „спирачки“
Основната причина за високата латентност на HLS се крие във факта, че програмистите са създали двигателя за получаване на изображения с най-високо качество. Следователно параметрите на използвания интервал между кадрите и размера на буфера за възпроизвеждане просто не са подходящи за видео излъчвания на живо. Поради това има доста голямо забавяне при предаването на видеозаписи, което може да бъде 5-7 секунди.
От една страна, това не е много, например за тези, които гледат филм от сървър за видео хостинг. Но за системите за видеонаблюдение забавянето при предаване на видеозапис може да бъде много важно.
Ако наблюдавате офис, в който служителите вдигат поглед от мониторите си веднъж на час, тогава забавянето от 5 секунди няма никакво значение. Но хората започнаха да се оплакват, че например при предаване на футболен мач вече пишат GOOOOL в чата, но това още го няма на видеото :). Вече имаме редица потребителски случаи, при които Ivideon на практика трябва да замени Skype.
Възможно ли е да се преодолее латентността в HLS? Отговорът на този въпрос звучи като речта на опитен унищожител на плъхове на лекция пред начинаещи специалисти по борба с вредителите: „Плъховете не могат да бъдат унищожени, но техният брой може да бъде намален до разумен минимум.“ Същото е и със забавянето в HLS, няма да е възможно да се намали до нула, но на пазара има решения, които могат значително да намалят забавянето.
Фини разфасовки
Друг недостатък на двигателя е използването на малки файлове за пренос на данни. Изглежда, какво не е наред с това?
Всеки, който се е опитвал да копира голям брой малки файлове от един носител на друг, вероятно е забелязал, че скоростта на запис на такъв набор е много по-ниска от един голям файл със същия размер. И интензивността на достъпа до твърдия диск се увеличава значително, което като цяло се отразява негативно на производителността на целия компютър. Следователно предаването на видео данни на малки отрязъци от 10 секунди също допринася за увеличеното забавяне на двигателя.
Нека накратко обобщим всички плюсове и минуси на HLS технологията.
Предимства на HLS:
- Възможност за работа с всякакви устройства. Можете да гледате видеоклипове на всяко модерно устройство, било то смартфон, таблет, лаптоп или настолен компютър. Основното е, че уеб браузърът е актуален и съвместим с HTML5 и Media Source Extensions.
- Отлично качество на изображението. Използваната функция за адаптивно предаване на данни ви позволява динамично да променяте качеството на предаваното видео в зависимост от честотната лента на интернет връзката, като алгоритъмът се стреми да поддържа максимално качество.
- Няма нужда от сложна конфигурация на оборудването на потребителя.
Недостатъци:
- Ограничена поддръжка за работа с двигателя на някои устройства.
- Големи закъснения при предаване на изображение.
- Значително увеличение на разходите и сложността на оптимизацията поради използването на малки файлове. Поради естеството на контейнера никога няма да можем да получим латентност, по-ниска от размера на сегмента.
Недостатъците на HLS надделяха над предимствата за нас и ни принудиха да търсим алтернативни варианти.
Какво е WebRTC

()
Платформата WebRTC е разработена от Google през 2011 г. за предаване на поточно видео и аудио данни между браузъри и мобилни приложения с минимално забавяне. За това се използват стандартният UDP протокол и специални алгоритми за контрол на потока. Днес това е проект с отворен код, активно се поддържа от Google и се развива.
WebRTC е набор от технологии за peer-to-peer предаване на видео и аудио. Тоест, например, потребителските браузъри, използващи WebRTC, могат да прехвърлят данни един към друг директно, без да използват отдалечени сървъри за съхранение и обработка на данни. Цялата информация се обработва и от браузърите и мобилните приложения на крайните потребители.
Удобството и обширните възможности на тази технология са оценени от разработчиците на всички популярни браузъри. Поддръжката на WebRTC в момента е налична в Mozilla Firefox, Opera, Google Chrome (и всички браузъри, базирани на Chromium), както и в мобилни приложения, работещи... Android и iOS.
Въпреки всичките си безспорни предимства, WebRTC има няколко съществени недостатъка.
Трудности при избора
Технологията WebRTC е много по-сложна по отношение на мрежовите взаимодействия поради факта, че става дума за P2P. Трудно е за отстраняване на грешки, тестване и може да се държи непредвидимо. В същото време трябва да преодолеем NAT и защитната стена, трябва да осигурим работа в мрежи, където UDP е блокиран.
Внедряването на WebRTC на Google е много трудно за използване. Има дори цяла компания, която предоставя услуги за асемблиране на SDK. Освен това внедряването на Google беше много трудно за интегриране с нашата система без повторно кодиране на цялото видео.
Отдавна обаче искахме да дадем възможност на потребителите да работят с пълноценно „живо“ видео и да сведем до минимум забавянето между изображението на екрана и самите събития. Освен това имахме желание да направим използването на PTZ камери, където закъсненията са критични, по-удобно.
Имайки предвид, че други реализации против забавяне все още имат ограничена функционалност и работят значително по-зле, решихме да използваме WebRTC.
Какво направихме

Правилното внедряване на платформата WebRTC не е лесна задача. Всяко погрешно изчисление или неточност може да доведе до забавяне на видео предаването, което не само не намалява в сравнение с други платформи, но дори се увеличава.
За да работи правилно WebRTC, на първо място е необходимо да се извърши технологично надграждане на стека за работа с уеб видео. Това и направихме.
Първо внедрихме WebRTC сървър на протокол за сигнализиране върху Websocket и също така внедрихме WebRTC peer сървър в облака, базиран на webrtc.org SDK. Неговата задача е да разпространява видео потоци към клиентски WebRTC партньори във формат H.264 + Opus/G.711 без видео транскодиране.
Избрахме Websocket като протокол за сигнализиране, защото той вече има висококачествена поддръжка във всички популярни уеб браузъри. Благодарение на това можете значително да намалите не само разходите за разработка, но и да избегнете загубата на време и ресурси за повтарящи се TCP и TLS ръкостискания в сравнение с AJAX.
Факт е, че по подразбиране WebRTC не предоставя протокола за сигнализиране, необходим за правилно конфигуриране, поддържане и прекратяване на видео комуникация в реално време между източника и клиентските приложения.
И за да приложим независимо технологията за сигнализиране, трябваше да разработим собствен сървър за сигнализиране с поддръжка на няколко уеб протокола (Websocet, WebRTC). И с възможност за сигурно управление на сесии и известия в реално време, управление на видео и много повече.
Преодоляхме ограниченията на P2P, като намалихме латентността не чрез P2P, а чрез UDP и контрол на потока, за да намалим латентността. Това също е вградено в WebRTC, тъй като основният случай на използване са p2p разговори през браузър.
В мобилния клиент внедрихме плейъра с помощта на webrtc.org SDK, тъй като само той правилно прилага контрол на потока, има всички известни схеми за корекция на грешки (FEC) и правилно прилага механизма за повторно изпращане на пакети за всички браузъри. Също така е важно, че webrtc.org SDK се разработва активно от Google.
Какъв е резултатът от прилагането на WebRTC?
За да гледате видео на живо от камери, добавихме нов оптимизиран плейър, базиран на WebRTC към вашия личен акаунт. Той осигурява бързи скорости на зареждане на видео и напълно елиминира проблема с натрупването на латентност с увеличаване на времето за гледане.
След въвеждането на поддръжка на WebRTC в облачната услуга Ivideon, можем да кажем с пълна увереност, че нашите клиенти вече могат да гледат пълноценно видео на живо. Сега забавянето при излъчване на видео последователности не надвишава една секунда! За сравнение, предишният HLS двигател осигури доставка на видео със закъснение от 5-7 секунди. Разликата в скоростта на видео демонстрация е много значителна и потребителят ще я забележи веднага след като започне да работи с нашата видео услуга.
Както очаквахме, внедряването на новия плейър подобри отзивчивостта на PTZ и гласовата комуникация с камерата.

Има само един тънък момент, на който искаме да обърнем внимание. Новият WebRTC плейър в момента работи в тестов режим. И затова не го активираме за всички наши клиенти по подразбиране. Но можете сами да го активирате, като активирате съответния елемент в настройките на камерата (за да направите това, трябва да отидете на ).
Характеристики на внедряването на WebRTC в услугата Ivideon

WebRTC все още е експериментална технология в момента. Неговата поддръжка все още не е правилно внедрена във всички браузъри и потребителски устройства, а също и не във всички камери.
Точно поради тази причина все още не сме направили WebRTC плейъра стандартен за всички потребители.
Засега препоръчваме използването на WebRTC само в браузърите Google Chrome. Последните версии на Firefox и Safari също поддържат тази технология, но, за съжаление, тя все още е нестабилна.
Все още не сме въвели поддръжка на WebRTC за браузъри на мобилни устройства. В момента, ако влезете от мобилно устройство и активирате WebRTC, този режим няма да работи. WebRTC обаче е наличен в нашите мобилни приложения за и .
И завършвайки историята за характеристиките на внедряването на WebRTC в нашата услуга, нека отбележим още две фини точки.
Първо, технологията е фокусирана върху излъчване на видео на живо в реално време. Ето защо, ако каналът ви няма достатъчна честотна лента за предаване на видеото, ще забележите падане на кадри (с HLS ще забележите избледняване на видеото и увеличена латентност, но няма да има падане на кадри), но видеото все още ще се излъчва в реално време време.
Второ, тъй като технологията е проектирана да работи специално с видео на живо в реално време, ние не я използваме за работа с архивирани видео данни.
Други промени в услугата
Понастоящем Flash вече не участва в механизма за автоматичен избор на двигател. Все още можете да използвате такъв плейър, но за да направите това, трябва да го изберете ръчно в настройките на акаунта или камерата. Това не е почит към модата, просто според статистиката на нашата услуга практически няма останали потребители, работещи с Flash. И опитвайки се да определим дали браузърът на потребителя го поддържа, губим около 2 секунди ценно време.
Ето кратък преглед на промените, които ви очакват в нашата облачна система за видеонаблюдение и личен акаунт. Останете с нас и следете новините!
Източник: www.habr.com
