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

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

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

Правилното внедряване на платформата WebRTC е трудна задача. Всяка грешка или неточност могат да доведат до това, че забавянията в предаване на видеопотока не само да не намаляват в сравнение с други платформи, но и да нараснат.
За коректна работа на WebRTC, на първо място, е необходимо да бъде проведена технологична модернизация на стека за работа с уеб видео. Това и направихме.
Първо реализирахме WebRTC сигнален протокол върху Websocket, както и разгряхме WebRTC peer-сървър в облака на основата на SDK webrtc.org. Неговата задача е да разпространява видео потоци на клиентските WebRTC peer-и в формат H.264 + Opus/G.711 без повторно кодиране на видеото.
Избрахме Websocket като сигнален протокол, защото вече има качествено поддържане в всички популярни уеб браузъри. С това можем значително да намалим не само разходите по разработка, но и да не губим време и ресурси за повторни TCP и TLS handshake в сравнение с AJAX.
Факт е, че по подразбиране WebRTC не предоставя сигнален протокол, необходим за правилното конфигуриране, поддръжка и счупване на видеовръзката в реално време между изходните и клиентските приложения.
И за да реализираме технологията за сигнализиране, ни беше необходимо да разработим собствен сигнален сървър с поддръжка на няколко уеб протокола (Websocet, WebRTC). А също и с възможности за безопасно управление на сесиите и уведомления в реално време, управление на видеото и много други параметри.
Ограниченията на P2P преодоляхме, намалявайки закъснението не чрез P2P, а чрез UDP и управление на потока, насочено към намаляване на закъснението. Това също е заложено в WebRTC, тъй като основният use-case са p2p разговори през браузъра.
В мобилния клиент реализирахме плейър с използване на SDK webrtc.org, тъй като само в него е правилно реализирано управлението на потока, налични са всички известни схеми Forward Error Correction (FEC), и механизма за повторно изпращане на пакети е правилно реализиран за всички браузъри. Не е маловажно и това, че SDK webrtc.org активно се развива от 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 секунди ценна време.
Ето накратко за промените, които ви очакват в нашата облачна система за видеонаблюдение и личния ви кабинет. Останете с нас и следете новините!
Източник: habr.com
