Използва ли webrtc http
Отварянето на нова TCP връзка за всяка заявка стана проблем, когато мрежата се развива. Започнахме да изграждаме пълни приложения вместо прости уеб страници, а броят на медиите и файловете, който браузърът е необходим за извличане, стана повече. Представете си типично уеб приложение, което изисква HTML, CSS и JavaScript файл, както и различни изображения и други активи. За всеки файл трябваше да се направи нова връзка.
Webrtc срещу http стрийминг
Вохноно, по -мил -тиктоннох -охта -ул -тюр -джа – ЕКТРОННОй ПОХАТы ЕЕЕ НАЙ -ВЕСТНИКОВ, ТО.
-Disside-webrtc
Експериментирах с протоколи за стрийминг на WebRTC и HTTP (HLS, MPEG-DASH) за поточно видео на живо за няколко дни и установих, че докато WebRTC постига подтори закъснения, HTTP протоколите за стрийминг винаги имат много секунди латентности. Следователно имам няколко въпроса, свързани с WebRTC срещу HTTP стрийминг.
1. Как е способен WebRTC да постигне подтори закъснения в сравнение с HTTP протоколите за стрийминг?
WebRTC е в състояние да постигне Sub втори латентност в сравнение с HTTP протоколите за стрийминг поради възможностите си в реално време (RTC). WebRTC е създаден, за да предоставя приложения с незабавно предаване на видео, аудио и други данни между връстници. Това позволява практически мигновено предаване на съдържание, което води до закъснения на Sub Second.
2. Ако WebRTC вече осигурява стрийминг на видео с ниска латентност, защо има усилия за обединяване на HTTP протоколи за стрийминг под стандарта MPEG-DASH?
Усилията за обединяване на HTTP протоколите за стрийминг по стандарта MPEG-DASH се ръководят от необходимостта от стандартизиран подход към базиран на HTTP стрийминг. Докато WebRTC осигурява поточно предаване на видео с ниска латентност, той не е подходящ за всички случаи на употреба и може да не е съвместим с всички устройства и софтуер. Чрез обединяване на HTTP протоколи за стрийминг под стандарта MPEG-DASH става по-лесно за доставчиците на съдържание да доставят висококачествено видео стрийминг в различни платформи и устройства, като гарантират постоянно изживяване за гледане на потребителите на потребителите.
3. Как се сравнява webrtc с RTMP? (Досега не съм изследвал RTMP, но искам да знам дали е възможно да се постигне подсекунтна латентност с RTMP)
WebRTC и RTMP са и протоколи, използвани за поточно носители, но имат някои разлики по отношение на латентността и съвместимостта. WebRTC е предназначен за комуникация в реално време и може да постигне закъснения в секунда, което го прави подходящ за приложения, които изискват незабавно предаване. От друга страна, RTMP (протокол за съобщения в реално време) е протокол, използван предимно за поточно аудио, видео и данни между енкодер и стрийминг сървър. Въпреки че RTMP може да осигури стрийминг с ниска латентност, постигането на подсекунтни латентности може да зависи от различни фактори като мрежови условия и конфигурации на сървъра.
Сравнително проучване между стрийминг на базата на WebRTC и HTTP
Дълго време намаляването на латентността на стрийминг е популярна тема. Известно е, че закъсненията от десетки секунди и дори една минута се появяват с стрийминг на базата на HTTP в миналото. С традиционна латентност на излъчване в едноцифрените секунди и нововъзникващите решения като Услуги за развитие на WebRTC, Въпросът е кой подход да се предприеме. WebRTC стриймингът е в състояние да доставя видео не само в подсекунди, но за по-малко от 500 милисекунди. Понастоящем това е наличната технология за стрийминг с най-ниска латентност, която позволява практически мигновено предаване.
В това изящно ръководство ще разгледаме как работи WebRTC и ще го сравним с HTTP от гледна точка на a Услуга за стрийминг на видео. Да започваме!
Бързо пробиване на HTTP базиран стрийминг и WebRTC
Базираните на HTTP протоколи са технически редовни уеб сървъри, изпращащи прогресивни изтегляния. Те използват адаптивен стрийминг на битрейт, за да осигурят възможно най -високо качество на видеото и изживяване на гледане, независимо от връзката, софтуера или устройството. Някои от най-често срещаните налични протоколи, базирани на HTTP, включват MPEG-DASH, Apple’S HLS, Adobe HDS и Microsoft Smooth Streaming.
WebRTC е стабилен протокол, който е подкрепен от отлични инструменти и широко разпространена поддръжка на индустрията. Той е създаден, за да предостави приложения с възможности за комуникация в реално време (RTC), което позволява видео, аудио или друг тип данни да се прехвърлят между връстници. Това е ключово разграничение между двете в сравнение с HTTP-базиран стрийминг, който е ориентиран към клиента-сървър.
UDP срещу. TCP
Основните компоненти на пакета на Интернет протокол, протокол за потребителски Datagram (UDP) и протокол за контрол на предаването (TCP), и двете пребивават на транспортния слой.
Основното разграничение между UDP и TCP е, че TCP изисква трипосочно ръкостискане, докато предава данни. Инициаторът (клиент) иска акцепторът (сървърът) да установи връзка, акцепторът отговаря и инициаторът потвърждава отговора и поддържа сесия между двата края. Следователно TCP е изключително достоверна и може да се справи със загубата на пакети и поръчките.
UDP, от друга страна, не’не се изисква ръкостискане, за да започне. Той прехвърля данни, независимо от ограниченията на честотната лента, което го прави както по -бърз, така и по -рисков. Тъй като UDP не поддържа ретрансмисии, поръчка на пакети или проверка на грешки, мрежовата хълцане има потенциал да замърси данните в транзита.
Протоколи като WebRTC често използват UDP, докато HTTP базирани протоколи използват TCP.
Как WebRTC се подрежда спрямо стрийминг на базата на HTTP?
- Какъв тип латентност търсите?
- Какъв ще бъде размерът на публиката?
- Каква е максималната сума, която сте готови да похарчите?
Латентност
Отговорите на въпросите за латентността зависят от обхвата на латентността, към който се стремите.
Новите и подобрени HLS като LL-HLS и LL-DASH имат 3 секунди или по-малко латентност. Това все още се счита за бързо и ще е достатъчно за повечето случаи на използване с ниска латентност. WebRTC, от друга страна, остава най-бързото решение, ако случаят на употреба налага стрийминг в реално време. Тъй като това е UDP протокол, разработен за напълно адаптиране към съвременния интернет. Той поддържа 500 мс латентност в реално време.
WebRTC е проектиран да предоставя двупосочна комуникация в реално време в реално време. За разлика от HLS, който се основава на TCP, WebRTC се основава на UDP. Това означава, че WebRTC може да започне без клиент и сървър да обменят каквато и да е информация за ръкостискане. В резултат на това WebRTC е по -бърз, но също така го прави по -податлив на колебанията в мрежата.
WebRTC е протоколът, който трябва да се използва, ако вашето решение изисква предаване на партньорски, в реално време стрийминг. Ако обаче трябва да увеличите аудиторията си над 50 души, ще трябва да преразгледате стратегията си.
В сравнение с HLS, мащабирането на WebRTC е значително по -трудно. Това обаче може да се реши с хибриден работен процес. Вашият избор ще бъде определен от вашия случай на използване и размера на целевата аудитория.
Що се отнася до достигането до масивна аудитория, HTTP базирани протоколи излизат отгоре.
Използва ли webrtc http
Отварянето на нова TCP връзка за всяка заявка стана проблем, когато мрежата се развива. Започнахме да изграждаме пълни приложения вместо прости уеб страници, а броят на медиите и файловете, който браузърът е необходим за извличане, стана повече. Представете си типично уеб приложение, което изисква HTML, CSS и JavaScript файл, както и различни изображения и други активи. За всеки файл трябваше да се направи нова връзка.
Webrtc срещу http стрийминг
Вохноно, по -мил -тиктоннох -охта -ул -тюр -джа – ЕКТРОННОй ПОХАТы ЕЕЕ НАЙ -ВЕСТНИКОВ, ТО.
-Disside-webrtc
Експериментирах с протоколи за стрийминг на WebRTC и HTTP (HLS, MPEG-DASH) за поточно видео на живо за няколко дни и установих, че докато WebRTC постига подтори закъснения, HTTP протоколите за стрийминг винаги имат много секунди латентности. Следователно имам няколко въпроса, свързани с WebRTC срещу HTTP стрийминг.
1. Как е способен WebRTC да постигне подтори закъснения в сравнение с HTTP протоколите за стрийминг?
2. Ако WebRTC вече осигурява стрийминг на видео с ниска латентност, защо има усилия за обединяване на HTTP протоколи за стрийминг под стандарта MPEG-DASH?
3. Как се сравнява webrtc с RTMP? (Досега не съм изследвал RTMP, но искам да знам дали е възможно да се постигне подсекунтна латентност с RTMP)
Сравнително проучване между стрийминг на базата на WebRTC и HTTP
Дълго време намаляването на латентността на стрийминг е популярна тема. Известно е, че закъсненията от десетки секунди и дори една минута се появяват с стрийминг на базата на HTTP в миналото. С традиционна латентност на излъчване в едноцифрените секунди и нововъзникващите решения като Услуги за развитие на WebRTC , Въпросът е кой подход да се предприеме. WebRTC стриймингът е в състояние да доставя видео не само в подсекунди, но за по-малко от 500 милисекунди. Понастоящем това е наличната технология за стрийминг с най-ниска латентност, която позволява практически мигновено предаване.
В това изящно ръководство ще разгледаме как работи WebRTC и ще го сравним с HTTP от гледна точка на a Услуга за стрийминг на видео . Да започваме!
Бързо пробиване на HTTP базиран стрийминг и WebRTC
Базираните на HTTP протоколи са технически редовни уеб сървъри, изпращащи прогресивни изтегляния. Те използват адаптивен стрийминг на битрейт, за да осигурят възможно най -високо качество на видеото и изживяване на гледане, независимо от връзката, софтуера или устройството. Някои от най-често срещаните налични протоколи, базирани на HTTP, включват MPEG-DASH, Apple’S HLS, Adobe HDS и Microsoft Smooth Streaming.
WebRTC е стабилен протокол, който е подкрепен от отлични инструменти и широко разпространена поддръжка на индустрията. Той е създаден, за да предостави приложения с възможности за комуникация в реално време (RTC), което позволява видео, аудио или друг тип данни да се прехвърлят между връстници. Това е ключово разграничение между двете в сравнение с HTTP-базиран стрийминг, който е ориентиран към клиента-сървър.
UDP срещу. TCP
Основните компоненти на пакета на Интернет протокол, протокол за потребителски Datagram (UDP) и протокол за контрол на предаването (TCP), и двете пребивават на транспортния слой.
Основното разграничение между UDP и TCP е, че TCP изисква трипосочно ръкостискане, докато предава данни. Инициаторът (клиент) иска акцепторът (сървърът) да установи връзка, акцепторът отговаря и инициаторът потвърждава отговора и поддържа сесия между двата края. Следователно TCP е изключително достоверна и може да се справи със загубата на пакети и поръчките.
UDP, от друга страна, не’не се изисква ръкостискане, за да започне. Той прехвърля данни, независимо от ограниченията на честотната лента, което го прави както по -бърз, така и по -рисков. Тъй като UDP не поддържа ретрансмисии, поръчка на пакети или проверка на грешки, мрежовата хълцане има потенциал да замърси данните в транзита.
Протоколи като WebRTC често използват UDP, докато HTTP базирани протоколи използват TCP.
Как WebRTC се подрежда спрямо стрийминг на базата на HTTP?
- Какъв тип латентност търсите?
- Какъв ще бъде размерът на публиката?
- Каква е максималната сума, която сте готови да похарчите?
Латентност
Отговорите на въпросите за латентността зависят от обхвата на латентността, към който се стремите.
Новите и подобрени HLS като LL-HLS и LL-DASH имат 3 секунди или по-малко латентност. Това все още се счита за бързо и ще е достатъчно за повечето случаи на използване с ниска латентност. WebRTC, от друга страна, остава най-бързото решение, ако случаят на употреба налага стрийминг в реално време. Тъй като това е UDP протокол, разработен за напълно адаптиране към съвременния интернет. Той поддържа 500 мс латентност в реално време.
WebRTC е проектиран да предоставя двупосочна комуникация в реално време в реално време. За разлика от HLS, който се основава на TCP, WebRTC се основава на UDP. Това означава, че WebRTC може да започне без клиент и сървър да обменят каквато и да е информация за ръкостискане. В резултат на това WebRTC е по -бърз, но също така го прави по -податлив на колебанията в мрежата.
WebRTC е протоколът, който трябва да се използва, ако вашето решение изисква предаване на партньорски, в реално време стрийминг. Ако обаче трябва да увеличите аудиторията си над 50 души, ще трябва да преразгледате стратегията си.
В сравнение с HLS, мащабирането на WebRTC е значително по -трудно. Това обаче може да се реши с хибриден работен процес. Вашият избор ще бъде определен от вашия случай на използване и размера на целевата аудитория.
Що се отнася до достигането до масивна аудитория, HTTP базирани протоколи излизат отгоре. Докато “Cdns” за съществуването на webrtc, цената често е прекомерна.
Разходи
WebRTC е безплатен и отворен код протокол. Но помнете как говорихме за мащабирането на webrtc? Това е напълно възможно и работи ефективно в много случаи на употреба – но не е евтино. Ако не е нужно да предавате на стотици хора, Webrtc е чудесен вариант. Ако обаче искате да достигнете до голяма аудитория, ще трябва да харчите пари за допълнителни сървъри, за да намалите тежестта върху браузъра.
HLS е може би най-ефективният метод за доставка на видео. Мащабирането с CDN лесно се оправдава от гледна точка на разходите, тъй като използва достъпни HTTP инфраструктури и настоящата мрежова технология, базирана на TCP.
Заключение
През последните няколко години, базиран на HTTP протокол и WebRTC изминаха дълъг път. Въпреки факта, те са и авангардни технологии, които задвижват индустрията напред, всяка от тях има свой набор от предимства и недостатъци. Нито един избор не е идеален за всички, но един от тях може да е най -подходящият за вас.
В крайна сметка оптималният протокол ще бъде определен от характеристиките на вашия проект, устройствата, на които той ще бъде разпределен, и мащаба на вашата аудитория. Когато разработвате решение с ниска латентност, имайте предвид тези неща.
Любопитно да намерите най -доброто решение за вас? Свържете се с нашите експерти по стрийминг на видео на живо!
HTTP, WebSocket, GRPC или WebRTC: Кой протокол за комуникация е най -подходящ за вашето приложение?
Активирайте 30-дневната си безплатна пробна версия днес и започнете прототипиране.
- Изградете видео чат
- Какво е SFU
- Протоколи за стрийминг на видео
- P2P видео конференция
Споделете статия с:
Когато избирате комуникационен протокол за вашите приложения, има много различни опции. В тази публикация ние’Ще разгледам четири популярни решения: Http, WebSocket, GRPC, и Webrtc. Ще изследваме всеки протокол, като изследваме технологията зад него, какво е’най -добре се използва за и неговите силни и слаби страни.
· Публикувано 26 септември 2022 г
Нашите форми на комуникация непрекъснато се подобряват: ставайки по -бързи, по -удобни и по -надеждни. Нашата комуникация се е развила от изпращане на съобщения с помощта на гълъби на превозвачи, до пощенски поща, до изобретението на стационарния телефон, до имейл и текстови съобщения от малко устройство, което се вписва в нашите джобове.
В бъдеще можем дори да преминем срещи и партита за рожден ден към VR (надяваме се, че това е просто шега!). Но най -добрата форма на комуникация винаги ще зависи от ситуацията.
Бързото текстово съобщение понякога е по -добро от дълъг имейл. Друг път видео обаждането в екипа е най -добрият начин за обмен на информация. За разлика от това, важните застрахователни документи трябва да бъдат изпращани по редовна поща и доставени в хартиен носител.
Същото важи и за уеб технологиите и протоколите, които използваме. Различните приложения имат различни комуникационни нужди.
Преглед
В тази статия ние’Ще покрия някои популярни Протоколи за комуникация Можем да използваме като разработчици и да изследваме плюсовете и минусите на различните опции. Никое решение не е по -добро от друго – има само някои, които са по -добри за определено приложение или проблем.
Някои приложения изискват връзка за партньорска връзка, с ниска латентност и висок трансфер на данни и могат да приемат някаква загуба на пакет (информация). Други приложения могат да анкетират сървъра при необходимост и да не са’не трябва да получавате комуникация от различен партньор. Други приложения изискват комуникация в реално време с надеждност на данните.
Онлайн мултиплейър игра, приложение за съобщения, уебсайт в блога, приложение за медийна галерия и софтуер за видеоконференции имат различни нива на комуникация и нужди от данни.
Ако изграждате решение за стрийминг на видео, тогава има и други съображения, вижте нашата статия за протоколите за стрийминг на видео за повече информация относно избора на правилния.
Какво е комуникационен протокол?
В компютърните мрежи протоколът е набор от правила, които уреждат как се обменят данните между устройства. Протоколът определя правилата, синтаксиса, семантиката и синхронизирането на комуникацията и възможните методи за възстановяване на грешки.
Протоколите, обсъдени в тази статия. Различни протоколи се придържат към различни правила и то’е от съществено значение, за да се разбере силните и ограниченията на всеки. В тази статия вие’Ще науча за следните протоколи:
Http (Протокол за хипертекстов трансфер) е протокол за приложение за разпределени, съвместни и хипермедийни информационни системи. HTTP е основата на комуникацията с данни за световната мрежа. Хипертекстът е структуриран текст, който използва логически връзки (хипервръзки) между възли, съдържащи текст. HTTP е протоколът за обмен или прехвърляне на хипертекст.
Http/2 е проектиран за справяне с недостатъците на оригиналния HTTP протокол и за подобряване на производителността. HTTP/2 е по -бърз и по -ефективен от HTTP/1.1 и поддържа мултиплексиране, за да се позволи множество заявки и отговори да бъдат мултиплексирани върху една връзка. Други забележителни функции включват компресия на заглавката и натискане на сървъра. То’постепенно се превръща в протокол по подразбиране за уеб трафик.
WebSocket е протокол, който позволява двупосочна комуникация между клиент и сървър. Това е популярен избор за приложения, които обработват данни в реално време, като чат приложения, онлайн игри и стрийминг на данни на живо.
GRPC е модерна RPC рамка с отворен код, която използва HTTP/2 за транспорт. Това е чудесен избор за приложения, които трябва да направят много малки, бързи API обаждания. GRPC генерира кръстосани клиенти и връзки на сървъри за много езици, което прави възможно клиентското приложение да се обади директно.
Webrtc е технология, която позволява комуникация в реално време между клиентите и дава възможност за установяване на директни връзки между партньорски участия. Използва се за видео, чат, споделяне на файлове и приложения за стрийминг на видеоклипове на живо.
Разбиране на TCP и UDP
Преди да се задълбочи в споменатите по -горе слоеве на приложението, то’Важно е да имате основно разбиране на TCP и UDP, два основни транспортни слоя, които улесняват трансфера на данни по коренно различни начини.
TCP (протокол за контрол на предаването) е стандарт, който определя как да установи и поддържа мрежов разговор чрез Интернет. TCP е най-често използваният протокол в интернет и всяка мрежа, ориентирана към връзката. Когато разглеждате мрежата, вашият компютър изпраща TCP пакети на уеб сървър. Уеб сървър отговаря, като изпраща TCP пакети обратно на вашия компютър. Първо се установява връзка между две устройства, преди да се обменят данни, а TCP използва корекция на грешки, за да гарантира, че всички пакети се доставят успешно. Ако пакет е загубен или повреден, TCP ще се опита да го преустанови.
UDP (протокол за потребителски Datagram)) е без връзка, ненадежден протокол за транспортен слой. Тя не изисква връзка или поддържане на връзка и не гарантира, че съобщенията ще бъдат доставени в ред. Което означава, че може да има някаква загуба на данни, ако пакетът не бъде изпратен или ако го’s покварен. UDP често се използва за стрийминг на медии или приложения в реално време, където изпуснатите пакети са по-малко проблематични от осигуряването на доставка.
Http/1
То’Важно е да имате основно разбиране на основата на цялата интернет базирана комуникация и трансфер на данни на приложния слой – HTTP (протокол за прехвърляне на хипертекст)).
Разбирането на http/1 и нейните ограничения също ще бъде важно, преди да можем да проучим по -подробно другите протоколи и да оценим напълно това, което предоставят.
С HTTP клиентите и сървърите комуникират, като обменят индивидуални съобщения. Съобщенията, които клиентът изпраща, се наричат заявки, а съобщенията, изпратени от сървъра, се наричат отговори. Тези съобщения се изпращат като редовни текстови съобщения през TCP връзка. Те също могат да бъдат криптирани с помощта на TLS и изпратени с помощта на HTTPS протокола.
Клиентът обикновено е уеб браузър или приложение, работещо на потребител’S телефон или компютър, но технически може да бъде всичко, например скрипт, който пълзи уебсайтове.
HTTP заявките могат да текат само в една посока, от клиента до сървъра. Няма начин сървърът да инициира комуникация с клиента; може да отговори само на заявки.
HTTP е идеален за традиционни приложения за уеб и клиенти, където информацията се събира при необходимост. Например, вие опресвате страница и се отправя заявка на сървъра, за да се донесе най -новата информация.
Този протокол обаче се разшири по начин, по който първоначално не е бил предназначен. В следващите раздели ние’Ще проуча някои от HTTP/1’s ограничения.
Http/1 в реално време
HTTP/1 е неефективен, когато съобщенията трябва да бъдат изпращани в реално време от клиента до сървъра и обратно. Например, ако на сървъра е налична нова информация, която трябва да бъде споделена с клиента, тази транзакция може да се извърши само след като клиентът започне заявка.
Има решения за това, използвайки техники, наречени HTTP къси и дълги проучвания, както и събития със със сървър.
Кратко гласуване
HTTP краткото анкетиране е техника, при която клиентът многократно изпраща заявки до сървъра, докато не отговори с нови данни. След като получи данни, той стартира процеса отново и многократно пита, докато не е налице нещо друго.
Това е неефективна комуникационна стратегия в реално време, тъй като тя губи много ресурси чрез непрекъснато предаване и анализиране на HTTP заявки/отговори.
Дълго гласуване
С HTTP дълго проучване, от клиента се прави една заявка и след това сървърът поддържа тази връзка отворена, докато не са налични нови данни и може да се изпрати отговор. След като клиентът получи отговора, нова връзка веднага се осъществява отново.
Дългото гласуване е по-ефективно от краткото анкетиране, но не е оптимално решение за комуникация в реално време.
Събития със сървър (SSE)
Събитията със сървърни изпращания позволяват на клиента да държи отворена връзка и да получава актуализации (натискане на съобщения) от сървър в реално време, без да се налага постоянно да анкетира сървъра за нови данни. Това е еднопосочна връзка, така че не можете да изпращате събития от клиента до сървъра.
SSE е стандарт, описващ как сървърите могат да инициират предаване на данни към клиентите, след като бъде установена първоначална клиентска връзка.
Проблемът с производителността с HTTP/1
Повечето от потоците от данни HTTP се състоят от малки, спукани трансфери на данни, докато TCP е оптимизиран за дълготрайни връзки и насипни трансфери на данни. Времето за пътуване в мрежата е ограничаващият фактор в пропускателната способност и производителността на TCP в повечето случаи. Следователно латентността е препятствието за производителността и повечето уеб приложения го доставят.
Това, което е по-горе, е, че TCP, който HTTP използва, е създаден за обработка на дълготрайни връзки и за прехвърляне на много данни. HTTP/1, от друга страна, ще отвори куп краткотрайни TCP връзки и обикновено изпраща само малки парчета данни.
Блокиране на ръководството
Проблем с ефективността с HTTP/1.0 е, че трябва да отворите нова TCP връзка за всяка заявка/отговор. Това не беше проблем за това, което HTTP първоначално е изобретен за – за да се получи хипертекстов документ. Частта от документа е важна, тъй като HTTP не е предназначен за “Хипермедия”.
Отварянето на нова TCP връзка за всяка заявка стана проблем, когато мрежата се развива. Започнахме да изграждаме пълни приложения вместо прости уеб страници, а броят на медиите и файловете, който браузърът е необходим за извличане, стана повече. Представете си типично уеб приложение, което изисква HTML, CSS и JavaScript файл, както и различни изображения и други активи. За всеки файл трябваше да се направи нова връзка.
Заедно идва http/1.1, който има постоянни връзки, които определят, че можем да имаме повече от една заявка или отговор на една и съща TCP връзка.
Това решение определено е подобрение, но не позволява едновременно на сървъра да реагира с множество отговори. То’s Сериализиран протокол, където трябва да изпратите заявка и да изчакате отговора, след това да изпратите втората заявка и т.н. Това е известно като блокиране на главата на линия.
Възможно е обаче да се постигне някакъв паралелизъм, тъй като браузърът може да отвори до шест TCP връзки със същия произход – където “Произход” се определя като уникалната комбинация от хост и порт номер.
Например, ако имате приложение за фотогалерия, което трябва да зареди 12 изображения, тогава ще бъдат направени шест заявки за зареждане на първите шест изображения и всяка заявка ще отвори нова TCP връзка под капака. Останалите шест изображения ще бъдат блокирани, докато не бъде получен отговор и една от отворените връзки може да се използва за зареждане на следващото изображение. Оригиналните шест отворени TCP връзки със същия произход ще бъдат използвани повторно, когато станат достъпни, но вие сте ограничени до шест активни връзки.
Естествено, програмистите намериха лесно решение – чрез промяна на произхода. Вместо да хоствате всички активи от един и същи произход, вие хоствате шест от изображенията от един произход и останалите на друг. Сега можете да имате 12 едновременни заявки (или да отворите TCP връзки). Това се нарича като “Sharding”.
- Изображения 1-6 са хоствани на 1.изображения.com
- Изображения 7-12 са хоствани на 2.изображения.com
Има ограничение колко пъти можете да направите това и то’е трудно да се определи оптимален брой парчета. В даден момент добавянето на повече парчета ще увеличи сложността, добавете над главата и може да доведе до това, че връзките ще станат задръстени и пакетите се губят.
Има и други притеснения, тъй като всяка TCP връзка добавя ненужни режийни разходи към сървъра. Връзките се конкурират помежду си, всеки TCP и TLS ръкостискане добавя ненужни разходи, а други сървърни/прокси ресурси трябва да се използват за поддържане на активните връзки. Има ясно ограничение по начина, по който HTTP/1 използва основните TCP връзки.
Заглавките и бисквитките раздуха
Друг проблем е, че с развитието на спецификацията HTTP, към спецификацията са добавени повече заглавки. Разработчиците също имат възможност да добавят бисквитки към заглавките и те могат да бъдат произволно големи. Това добавя много раздуване, тъй като всяка заявка и отговор трябва да предаде цялата тази информация за текста, и HTTP/1.1 не включва механизъм за компресиране на заглавки и метаданни.
Ако имате нужда от високоефективен RPC протокол, тази режийни разходи се добавя бързо и HTTP вече не е оптимално решение.
Приоритизиране
С HTTP/1.1, браузъри “Приоритизиране” Ресурси, като държите приоритетна опашка на клиента и вземате образовани предположения за това как да се използва най -добре наличните TCP връзки. Браузърите са вградили евристика за определяне какви ресурси са по -ценни от другите.
Например, зареждането на CSS ще има по -висок приоритет от зареждането на изображения.
Проблемът е, че няма начин за вас като разработчик да дадете приоритет на една заявка пред друга или да промените приоритета на текущо съобщение. Какво съдържание се зарежда първо, зависи от браузъра и нямате дума в схемата за приоритизиране.
Http/2
HTTP/2 е подобрена версия на HTTP протокола и адресира всички проблеми с производителността, описани по -горе с HTTP/1 и добавя други подобрения, без да променя нито една от семантиката (глаголи, заглавки и т.н.).
Най -значимата промяна в HTTP/2 е използването на мултиплексиране за едновременно изпращане и получаване на множество HTTP заявки и отговори през a Единична TCP връзка. Всички HTTP/2 връзки са устойчиви и е необходима само една връзка за произход. Това позволява много по -ефективно използване на мрежовите ресурси и може значително да подобри работата на приложенията.
Някои други предимства на HTTP/2:
- Използва компресия на заглавката, за да намали размера на заглавките, което избягва изпращането на едни и същи обикновени текстови заглавки отново и отново. Това значително намалява режийните разходи от заявки/отговори и количеството на изпратените данни.
- Позволява приоритизиране, позволявайки на клиента (разработчика) да определи приоритета на нуждите от него ресурси. То’S също е възможно да се актуализират приоритета на текущите заявки – например при превъртане, ако изображението вече не се вижда, приоритетът може да се промени.
- Използва Server Push за изпращане на данни до клиента, преди да го поиска. Това може да се използва за подобряване на времето за зареждане чрез премахване на необходимостта клиентът да направи множество заявки.
Как работи HTTP/2?
Основният протоколен блок в HTTP/2 е a кадър. Този нов бинарен механизъм за рамкиране променя начина, по който се обменят данните между клиента и сървъра.
Стандартът определя десет различни типа рамки, като всеки от тях обслужва различна цел. Например заглавките и рамките на данни са в основата на HTTP заявки и отговори:
A кадър е най -малката единица за комуникация, която носи конкретен тип данни.
Някои други рамкови примери са:
- Настройки: обмен на информация за настройка в началото или по време на връзка.
- Приоритет: Преназначаване на приоритет за съобщения.
- Push_promise: позволява на сървъра да ви натиска данни – това действа като обещание за това, което сървърът ще изпрати. Например, ако поискате индекса.html, сървърът може да създаде push_promise, който обещава да натисне приложението.JS и стилове.CSS, което означава, че клиентът няма нужда да изисква тези ресурси.
Кадрите се комбинират, за да образуват a съобщение, Например заглавката и рамката за данни в изображението по -горе. Това се равнява на нормална заявка или отговор.
След това най -накрая, поредица от съобщения може да бъде част от a поток. Това позволява двупосочен поток от данни между клиента и сървъра и пълна заявка и мултиплексиране на отговор.
Изображението по -горе е малко подвеждащо, създавайки впечатление, че са отворени множество връзки между клиента и сървъра. Но това е единична TCP връзка и данните протичат свободно между клиента и сървъра по не блокиращ начин.
Новият двоичен рамкиращ слой позволява на клиента и сървъра да разграждат HTTP съобщението на независими рамки, да ги преплитат и след това да ги сглобяват на другия край.
Това е само обобщение за това как http/2.0 работи. Ако искате да научите повече и да проучите приоритизирането, натискането на сървъра и компресията на заглавката, вижте това в статия за дълбочина. За история на проблемите на HTTP/1 и как HTTP/2 ги решава, гледайте това видео.
HTTP/2 двупосочен стрийминг на данни
- Единична HTTP/2 връзка може да съдържа множество едновременно отворени потоци, като двете крайни точки на преплитане от множество потоци.
- Потоците могат да бъдат установени и използвани едностранно или споделени от клиента или сървъра.
- Потоците могат да бъдат затворени от двете крайни точки.
Има много недоразумения с функционалността на сървъра Push, което позволява на сървър през HTTP/2 да изпраща активно ресурси, които смята, че може да се нуждаете, например, .JS и .CSS файлове, без клиентът да го иска. Това няма нищо общо с двупосочното стрийминг и е само техника за оптимизация на мрежата за кешируеми ресурси.
Вярно е, че с http/2 сървърът може’t посветена a поток. Но след като клиентът отвори поток, като изпрати заявка, и двете страни могат да изпращат данни рамки над постоянен гнездо по всяко време. Отличен пример за това е GRPC, който ще обсъдим по -късно.
С HTTP/2 е възможно да се постигне двупосочен стрийминг на данни и можете да спорите, че то това’S по -оптимално решение от нещо като WebSockets или можете да спорите, че не е така. Ние’Ще обсъдя това по -подробно в секцията WebSocket.
WebSockets
Целта на тази технология е да осигури механизъм за приложения, базирани на браузъра, които се нуждаят от двупосочна комуникация със сървъри, които не разчитат на отваряне на множество HTTP връзки (E.g., Използване на xmlhttprequest или iframes и дълги проучвания).
WebSockets са изобретени, за да активират пълна дуплексна комуникация между клиент и сървър, което позволява на данните да пътуват и в двете посоки през една отворена връзка незабавно.
След като се установи връзка с WebSocket, клиентът няма нужда да анкетира сървър за актуализации. Вместо това комуникацията се случва двупосочно. Това подобрява способността за скорост и в реално време в сравнение с оригиналното дълго и кратко и заклинание на HTTP/1. WebSocket няма формат, към който се съобразява. Можете да изпращате всякакви данни, текст или байтове – тази гъвкавост е една от причините, поради които WebSockets са популярни.
Част от това може да звучи познато на това, което обсъдихме в раздела HTTP/2, но то’е важно да се отбележи, че WebSockets са измислени много преди HTTP/2. Ние’ще ги сравня повече по -късно.
Как работят WebSockets
WebSockets ефективно работи като транспортен слой над TCP.
За да установи връзка с WebSocket, клиентът и сървърът първо трябва да извършат ръкостискане през нормален HTTP/1.1 връзка. Това ръкостискане е мостът от HTTP до WebSockets.
По -долу е примерна заявка за ръкостискане на клиента. Клиентът може да използва HTTP/1.1 Механизъм, наречен заглавие на надстройка, за да превключи връзката им от HTTP към WebSockets:
Вземете /чат http /1.1 хост: Пример.com: надстройка 8000: WebSocket Connection: Надстройка SEC-WEBSOCKET-KEY: DGHLIHNHBXBSZSBUB25JZQ == Sec-Websocket-Version: 13
След това сървърът ще заключи ръкостискането със специален отговор, който показва, че протоколът ще се променя от HTTP към WebSocket:
Http/1.1 101 Протоколи за превключване Надстройка: WebSocket Connection: Надстройка SEC-WebSocket-Accept: S3PPLMBITXAQ9KYGZZHZRBK+XOO =
WebSockets изискват еднакъв идентификатор на ресурси (URI) със схема ws: // или wss: //. Схемата WS: // се използва за нешифровани връзки, а схемата wss: // се използва за криптирани връзки, подобно на това как HTTP URL адресите използват http: // или https: // схема.
След като се установи двупосочният комуникационен канал, клиентът и сървърът може да изпраща съобщения напред и назад. Тези съобщения могат да бъдат всичко – от двоични данни до текст. Връзката WebSocket ще остане отворена, докато клиентът или сървъра не се изключат.
Мултиплексиране на WebSocket
По време на писането протоколът WebSocket не поддържа вградено мултиплексиране. Обсъдихме мултиплексиране в раздела HTTP/2 и научихме, че то то’S вградена функция за http/2 и it’е възможно да има множество потоци, мултиплексирани през една и съща връзка. Всеки поток получава уникален идентификатор и всички изпратени кадри имат идентификатор, свързан със съответния поток.
Не поддържане на мултиплексиране означава, че протоколът WebSocket изисква нова транспортна връзка за всяка връзка на WebSocket. Например, множество клиенти, работещи в различни раздели на един и същ браузър, ще доведат до отделни връзки. За да имате мултиплексиране над WebSockets, обикновено е нещо, което ще трябва да внедрите като разработчик или разчитате на плъгин или библиотека на трети страни.
WebSocket срещу HTTP/2
И така, HTTP/2 смени Websockets? Краткият отговор е не. Колкото по -дълъг отговор е, че HTTP/2 прави възможно двупосочното стрийминг и в резултат на това WebSockets не е единственият/най -добрият вариант. Http/2 като спецификация върши повече работа за вас в сравнение с WebSockets. Той има вградено мултиплексиране и в повечето случаи ще доведе до по-малко отворени TCP връзки с произхода. От друга страна, WebSockets осигуряват много свобода и не са ограничителни в това как се изпращат данни между клиента и сървъра, след като се установи връзка. Въпреки това, ще трябва да управлявате отново да се свържете (или да разчитате на библиотека, която прави това за вас).
Кой в крайна сметка е по -добър и където единият ще работи, а другият няма, е готов за дебат и тази статия не дава самоуверен отговор. WebSockets предлагат много гъвкавост и като утвърден стандарт той се поддържа изцяло от всички съвременни браузъри, а екосистемата около клиентските и сървърните библиотеки е стабилна.
За по -подробни и самоуверени дискусии вижте тези въпроси за преливане на стека:
- HTTP/2 прави ли WebSocket остарял
- HTTP/2 или WebSockets за съобщения с ниска латентност към сървър
- Http/2 срещу уеб секунди за двупосочно предаване на съобщения
Има и RFC, който да позволи механизъм за стартиране на протокола WebSocket върху един поток от HTTP/2 връзка.
Възможността за зареждане на Websockets от HTTP/2 позволява да се споделя една TCP връзка както от протоколите, така и от по -ефективното използване на мрежата на HTTP/2.
Това е реализирано в Chrome и Firefox. Можете да прочетете документа и мотивацията на Chrome Design тук.
Кога трябва да използвате Websockets?
WebSockets са най-подходящи за приложения, които се нуждаят от двупосочна комуникация в реално време и когато трябва да се предават бързо малки части от данни, например:
- Приложения за чат
- Мултиплейър игри
- Приложения за сътрудничество за редактиране
- Спортен тикер на живо
- Заявление за търговия с акции
- Храни в реално време
Случайно, това е област, в която нашият екип има много опит. Ние’Повторно използвайки WebSockets за захранване на нашата инфраструктура за чат и активност.
Поддръжката на WebSockets е добра и се поддържа от основните браузъри и клиенти от дълго време, а също така е добре документирана и лесна за използване. Уебокетите обаче не трябва да се използват прекалено; В зависимост от това, което искате, може да има по -добри алтернативи.
Например, сървърните изпратени събития (SSE) са ефективни през HTTP/2 и лесни за използване. SSE не е двупосочна комуникационна система; Сървърът едностранно натиска данни към клиента. Но ако всичко, от което се нуждаете, е начин сървърът да изпраща данни на клиент, това е потенциално по -добър вариант от добавянето на режийни разходи на WebSockets. SSE също се връща към HTTP/1.1 Когато HTTP/2 не е наличен. Освен това клиентът (или браузърът) управлява връзката за вас и поддържа автоматично повторно свързване.
Ако се изгуби връзка над WebSockets, няма включени механизми за балансиране на натоварването или за повторно свързване. Това трябва да се реализира ръчно или от библиотеки на трети страни.
GRPC
GRPC е модерна рамка за отдалечен процедурен призив с отворен код (RPC), която може да работи във всяка среда. Той може ефективно да свърже услугите в и през центрове за данни с поддръжка за включване за балансиране на натоварването, проследяване, проверка на здравето и удостоверяване. Той също е приложим в последната миля от разпределени изчисления за свързване на устройства, мобилни приложения и браузъри за Backend Services.
GRPC е отворен код, базирана на договор, RPC система, първоначално разработена в Google. GRPC дава възможност на приложенията да комуникират прозрачно и да опростяват изграждането на свързани системи.
Той генерира кръстосано-платформени връзки на клиенти и сървър за много езици, което прави възможно клиентското приложение да извика директно метод на сървърно приложение на друга машина, сякаш е локален обект.
Изграден на HTTP/2, GRPC използва функции като двупосочно стрийминг и вградена сигурност на транспортния слой (TLS).
GRPC мотивация
То’е важно да се потопите в мотивацията зад GRPC и защо е измислена, за да разбере ползите му. Защо да не използваме съществуващата технология, която вече имаме: HTTP/2 и WebSockets, например? Защо се нуждаем от друг слой абстракция върху това, което вече имаме?
Има различни начини, по които данните могат да бъдат структурирани и изпращани през интернет. Някои популярни примери са сапун, почивка и graphql. Можете дори да създадете свой собствен протокол, да изпращате данни през сурови TCP и да се справите сами с реализацията, ако искате.
Но без значение какво сте избрали като своя протокол за комуникация, проблемът е, че трябва да гарантирате, че клиентът и сървърът се съгласяват с протокола. Например, ако сте’Изграждане на REST API, клиентската библиотека, която трябва да използвате за изпращане на данни за почивка, е библиотеката HTTP. Библиотеката на HTTP е вградена в браузъра по подразбиране и браузърът обработва всичко за вас:
- Той установява комуникация със сървъра.
- Той обработва http/2 и резервен към http/1. И ще трябва да поддържа HTTP/3 в бъдеще.
- Той обработва TLS и договаря протокола.
- Той обработва заглавки, потоци и всичко останало.
Но какво ще стане, ако ти’не е на браузър? Ами ако вие’Re A Python приложение, работещо на някой сървър, Golang CLI или приложение за трептене, работещо на iOS? Всички тези клиенти се нуждаят от собствена HTTP библиотека, която разбира протокола, с който общувате.
За щастие, много посветени хора работят върху различни HTTP библиотеки за всички тези езици и рамки. Някои езици дори имат множество HTTP библиотеки с различни функции. Всичко това обаче идва на цена – и това е поддръжка.
Тази цена може да ви повлияе в случай, че трябва, например, да надстроите вашия сървър до HTTP/2, ако библиотеката на Golang, която използвате. Но на вашия клиент на предния край Python, еквивалентната HTTP библиотека не е внедрила HTTP/2 или може да не се поддържа вече. Различните HTTP библиотеки на други езици не могат да се сравняват 1: 1.
С развитието на HTTP спецификацията, тези библиотеки трябва да са в крак с напредъка, проблеми със сигурността, нови функции и други пластири. HTTP е само пример и същото е вярно за протокола WebSocket или който и да е друг. Нещо може да бъде добре реализирано в основните браузъри, но тази функционалност трябва да бъде пренесена на множество различни езици и рамки.
Как GRPC е различен?
GRPC се опитва да реши този проблем, като поддържа библиотеката за самите популярни езици, което означава, че добавените нови функции ще бъдат подкрепени от всички тези езици.
Под качулката GRPC използва HTTP/2 като свой протокол, но това изпълнение е скрито от вас. В бъдеще поддържащите GRPC могат лесно да заменят HTTP/2 с HTTP/3 и веднага ще се възползвате от тази промяна.
GRPC също използва протоколни буфери като език за дефиниция на интерфейса (IDL) и неговия основен формат на обмен на съобщения. Този формат е неутрален с език и дава възможност лесно да се комуникира между различни езици за програмиране. Ние’Ще проуча тази концепция повече в следващия раздел.
Какви са буферите на протоколите?
Буферите на протоколите са неутрални по езика, неутрален с платформа, разширяем механизъм за сериализиране на структурирани данни-помислете XML, но по-малък, по-бърз и по-прост. Вие определяте как искате вашите данни да бъдат структурирани веднъж. След това можете да използвате специален генериран изходен код, за да напишете и прочетете структурираните си данни до и от различни потоци от данни и да използвате различни езици.
Традиционно с API, вие не’не имат договор, определен от самия протокол. Например, ако сте’Използване на почивка, вие’обикновено просто изпращане на съобщения на JSON с двойки ключ/стойност, които не са’t проверено, докато съобщението не е в края на приемането. Това съобщение обикновено може да бъде всичко и то’от вас от вас да гарантирате, че правилната структура е дефинирана.
Разгледайте следния полезен товар на JSON:
‘документ за самоличност’: 123 ‘име’: ‘Гордън’, ‘електронна поща’: ‘Гордън@някъде.io’
След като тези данни бъдат получени на клиента/сървъра, той може да бъде десериално в обект, например:
Лице на класа
От вас обаче зависи от вас като разработчик да приложите правилната логика на сериализацията и десерилизацията за гореспоменатия полезен товар – това може да включва писане на методи Tojson и Fromjson ръчно, разчитайки на генерирането на код или може да бъде вградена характеристика на езика, който вие’Използване.
Независимо от това как се сериализирате тези данни, основният код ще трябва да се актуализира ръчно, потенциално в множество среди, в случай че схемата се промени.
С буфери на протокол създавате схема, която определя типа обект за полета и уточнявате кои са необходими и кои не са задължителни:
// Съобщението за заявка, съдържащо лицето’s Информационно съобщение човек < optional int32 required string name = 2; optional string email = 3; >// съобщението за отговор, съдържащо съобщението за поздрави Helloreply
След това можете да посочите процедурите, които искате да изложите.
// Определението за поздравителна услуга. Поздравител за обслужване < // Sends a greeting rpc SayHello (Person) returns (HelloReply) <>>
Веднъж ти’В.
Това ще бъдат интерфейси, които описват обектите, очертани в прото файла, с аксесоари за всяко поле, както и методи за сериализиране/анализ на цялата структура до/от сурови байтове.
GRPC режими
Има четири режима на транспортиране над GRPC. Тези четири режима възпроизвеждат поведението, което обсъдихме по -рано, например, нормална заявка/отговор, SSE и WebSockets.
Unary rpc
Unary RPC е проста заявка и отговор, подобно на извикване на функция. Клиентът иска някои данни, а сървърът прави някои обработки и връща тези данни.
Сървър стрийминг RPC
Сървър стрийминг на RPC, където клиентът изпраща една заявка до сървъра и очаква множество или поток от отговори. Клиентът чете от върнатия поток, докато няма повече съобщения.
Пример ще бъде стрийминг на видео, където искате да заредите видео, а сървърът отговаря с видео потока.
Клиентски стрийминг RPC
Клиентът стрийминг на RPC, където клиентът пише последователност от съобщения и ги изпраща на сървъра, като отново използва предоставен поток. След като клиентът приключи с писането на съобщенията, той чака сървърът да ги прочете и да върне отговора си.
Пример е да се качи голям файл на сървъра и след като всички данни са изпратени, клиентът може да изпрати окончателно съобщение, за да посочи, че качването е завършено и сървърът може по избор да отговори.
Двупосочен поток RPC
Комбинация от стрийминг на клиент и сървър. Приложение за чат или видео игра за мултиплейър е пример, при който данните трябва да текат между клиента и сървъра свободно.
Двупосочен стрийминг RPC, при които и двете страни изпращат последователност от съобщения, използвайки поток от четене-писане. Двата потока работят независимо, така че клиентите и сървърите да могат да четат и пишат в какъвто и да е ред, който им харесва.
В двупосочен стрийминг RPC, повикването се инициира от клиента, призоваващ метода. Обработката на потока от страна на клиента и сървъра е специфична за приложението. Тъй като двата потока са независими, клиентът и сървърът могат да четат и пишат съобщения във всяка поръчка.
Микросервизи
Добър пример за това, където GRPC е мощен, е в рамките на микросервизите.
В този пример имаме микросервизи, написани в Python, Java и Golang. Те трябва да изпращат данни помежду си.
Използване на HTTP/1.1 и JSON ще изискват да внедрите HTTP връзките и сериализацията за всеки език. Също така ще трябва да гарантирате, че схемата се прилага правилно за всеки език и ако API се промени, всички услуги трябва да бъдат актуализирани ръчно.
GRPC, от друга страна, се справя с прилагането на HTTP/2.0 Протокол за нас. Написана е една схема и може да се генерира съответният код за всички използвани езици. Тази схема може да се разглежда като договор, който всички езици трябва да се придържат, правейки комуникацията между тези услуги много по -лесно и по -надеждно.
GRPC изпълнение
GRPC е бърз и като цяло е много по -изпълнен от еквивалент на почивка:
- Буферите на протоколите се сериализират и изпращат като Бинари над жицата, които са значително по -малки от нормалните JSON съобщения.
- GRPC използва http/2.0, които осигуряват допълнителни подобрения
GRPC ефективно компресира изпратените данни има значително предим. Максималният пренос (MTU) е измерване, представящо най-големия пакет от данни, който ще приеме мрежово свързано устройство, което е 1500 байта.
Компресията се обработва за вас и се възползвате просто с помощта на GRPC. Като алтернатива е възможно да се използва нещо като GZIP за компресиране на JSON съобщения, преди да изпратите обикновен HTTP. Това обаче може да бъде неудобно и добавя слой сложност. Различните езици и среди също могат да имат различни нива на поддръжка за GZIP и други еквивалентни инструменти за компресия. И за всеки език, който използвате, ще трябва сами да възстановите правилната логика на компресия и комуникация. Това е подобен проблем с това, което обсъдихме за библиотеката HTTP.
Кога трябва да използвате GRPC?
Ако ти’Използване на множество различни езици за програмиране, които трябва да се интегрират плътно помежду си и изискват бърза и честа комуникация, която изпраща много данни, тогава GRPC ще бъде перфектен.
- С GRPC стрийминг, то’Възможно е лесно да се определи напредъка на качването/изтеглянето – без да е необходимо да се правят ненужни заявки за актуализации.
- То’Възможно е да анулирате заявките.
- Всички предимства на HTTP/2.
- Ако GRPC поддържа вашия език, вие не’не трябва да се притеснявате за външни библиотеки.
- GRPC не поддържа всички езици.
- Схемата може да се почувства ограничителна и тромава.
- Може да бъде сложно да се настрои в сравнение с WebSockets.
- Все още млади и грешки може да са трудни за отстраняване на грешки.
- Комуникацията с GRPC не работи по кутията с уеб браузъри. Трябва да използвате библиотеката GRPC-Web.
Webrtc
Протоколът WebRTC е безплатен проект с отворен код, който предоставя възможности за комуникация в реално време (RTC) на вашето приложение, което работи отгоре на отворен стандарт. Той поддържа видео, глас и общи данни, изпратени между връстници.
Технологията се предлага като набор от JavaScript API за всички основни браузъри и библиотека за местни клиенти като Android и iOS приложения.
WebRTC е различен от WebSockets и GRPC по основен начин и това е, че след като се установи връзка, данните могат (при някои обстоятелства) да се предават директно между браузъри и устройства в реално време, без да се докосват до сървъра.
Това намалява латентността и прави WebRTC чудесен за аудио, видео или споделяне на екрана – където ниската латентност е важна и трябва да се изпраща много данни.
Мотивация на WebRTC
WebRTC възнамерява да стандартизира как медиите, като аудио и видео, се съобщават през телта-и да постигнат това удобно с API за прост за употреба.
Други решения, като WebSockets, дават възможност за предаване на всякакви данни между двама връстници; Тези данни обаче трябва да бъдат предавани чрез прокси или сървър. Разчитането на друг сървър добавя латентност, тъй като всичко, което се изпраща чрез него. Между двамата връстници има среден човек. За стрийминг на видео или дори чат в реално време тази латентност е нежелателна.
Браузърите също са по -мощни сега, отколкото преди няколко години. Браузърите имат достъп до уеб камерата и микрофона, изискващи вграден API и лесен начин за предаване на тази богата информация. WebRTC има за цел да опрости целия този процес и да изложи лесен за използване API, който се предлага в браузърите.
Проблемът с webrtc
Мотивацията е дефинирана и изглежда, че WebRTC е вълшебно решение, което позволява по -бърза комуникация между двама връстници. Но за съжаление има няколко проблема.
Първият проблем е, че установяването на връзка с партньорска връзка не е просто-Интернет е сложен и има много рутери, прокси и защитни стени между Алиса в Калифорния и Бен в Южна Африка. И при някои обстоятелства може да не е възможно да има директна линия между двама връстници. Връзка между двама връстници може да се наложи да заобиколи защитната стена, която предотвратява отворени връзки, потенциално не можете да имате публичен IP адрес или рутерът може да не позволява директна връзка между връстниците.
Вторият проблем е, че трябва да има начин двама връстници да се открият и да определят оптималния маршрут, по който може да се случи комуникацията. Това изисква определена информация да се споделя между двамата клиенти, преди да могат да знаят как най -добре да общуват помежду си – и общ начин за споделяне на тази информация е чрез използване на WebSockets.
Което е малко смешно. An Http Връзката се надгражда до a WebSocket връзка само за споделяне на информация за установяване на a Webrtc Връзка.
Ако наистина искате да оцените това, което прави WebRTC и неговата сложност, ще трябва да се запознаете с някои потенциално непознати термини: NAT, зашеметяване, завой, лед, SDP и сигнализиране.
Как работи webrtc?
В горния преглед описахме мотивацията на WebRTC, която описва основната идея за това как работи. Този раздел ще се потопи в някои от темите от по-ниско ниво, които трябва да разберете, за да схванете WebRTC напълно.
Превод на мрежов адрес (NAT)
Разбирането какво е NAT и как работи е от съществено значение за разбирането на webrtc.
NAT се използва, за да даде на вашето устройство (лаптоп или мобилен телефон) публичен IP адрес; Това е важно, защото искаме да установим връзка между двама връстници, които вероятно са и двамата зад рутер. Маршрутизаторът ще има публичен IP адрес и всяко устройство, свързано с рутера, ще има частен IP адрес.
Тези устройства са’t пряко изложени на интернет. Вместо това целият трафик минава през рутера, който комуникира с външния свят. Когато поискате ресурси от отдалечен сървър, рутерът е отговорен за “маршрутизиране” Заявката от вашата локална машина към този сървър и маршрутизиране на отговора от сървъра обратно към вашата локална машина.
Тези заявки се превеждат от устройството’s частен IP адрес до рутера’S Public IP с уникален порт – който след това се съхранява в NAT таблица. По този начин не е необходимо да имате уникален публичен IP за всяко устройство в локална мрежа.
Изображението по -горе е опростен пример за това как би изглеждала таблица NAT. Позволявам’s се преструват на локалното устройство, с частен IP от 192.168.1.50, иска публичното адрес 82.88.31.26:80 за някои данни.
Това се осъществява от локалното устройство, което първо изпраща заявката до рутера, което насочва заявката до отдалеченото устройство. След това рутерът казва на отдалеченото устройство да изпрати отговора на външния си IP адрес, с уникален порт, който в този пример е 86.88.71.25: 8830.
Този уникален порт е важен, тъй като ще позволи на рутера да определи кое локално устройство е направило заявката. Цялата тази информация се съхранява в таблица на NAT. След като рутерът получи отговора, той може да извърши търсене и да реши до кое локално устройство трябва да се препрати отговорът.
Това е съвсем лесно за разбиране, когато имаме нормална двойка заявка/отговор – едно устройство и един сървър. Но какво се случва, ако друго външно устройство с напълно различен IP адрес реши да изпраща пакети до външния IP адрес на рутера на същия порт, който е бил използван преди това? Ако маршрутизаторът го препраща към локалното устройство, което е картографирано към този номер на порта?
Това решение зависи от това кой превод на NAT използва маршрутизаторът и в крайна сметка определя дали може да се установи връзка с партньорска връзка. В зависимост от рутера, който използвате, той ще внедри различен NAT превод. Има четири различни метода за превод на NAT:
- Едно към едно nat
- Адрес Ограничен Nat
- Пристанище, ограничено на Nat
- Симетричен Nat
Едно към едно nat: Картира един външен IP адрес и порт (обикновено публичен) на един вътрешен IP адрес и порт (обикновено частен). В горния пример, ако рутерът получи отговор на порт 8830 и външен IP 86.88.71.25, Той ще го препрати към локалното устройство 192.168.1.50, Тъй като това е локалното устройство, което направи заявката (информация, извлечена от таблицата NAT). Рутерът не се интересува от дестинацията IP или откъде произлиза отговорът. Ако то’s на определен външен порт, той отива на това локално устройство.
Адрес Ограничен Nat: Отдалечено устройство може да изпрати пакет до локалното устройство само ако локалното устройство преди това е изпратило пакет до отдалечения IP адрес. В обобщение, ние го допускаме само ако сме общували с този хост преди. В горния пример, позволяват само пакети от 86.88.71.25.
Пристанище, ограничено на Nat: Същото като ограничената от адреса NAT, но ограничението включва и номера на порта. Отдалеченото устройство може да изпраща пакет до вътрешното устройство само ако вътрешното устройство преди това е изпратило пакет до IP адрес x и порт P. В горния пример, позволете само от 86.88.71.25 и порт 80.
Симетричен Nat: Най -рестриктивният. За това Външен IP, Външен порт, Дестинация IP, и Порт на местоназначение Всички трябва да съвпадат с това, което присъства в таблицата NAT. Това означава, че пакетите могат да бъдат изпращани до конкретен порт на локално устройство, ако това устройство е това, което поиска IP и порт на местоназначение.
WebRTC не работи над симетричен NAT и за да разбере защо трябва да разберем какво е зашеметяващ сървър.
Помощни програми за преминаване на сесия за NAT (зашеметяване)
Stun. Зашеметяващият сървър е механизъм за клиентите да открият наличието на NAT, както и типа на NAT, и да определят външния IP адрес на NAT и картографирането на порта.
Целта на заявката за зашеметяване е да определите вашето обществено присъствие, така че това обществено присъствие да може да бъде съобщено с някой друг, така че те да могат да се свържат с вас – тази комуникация се нарича сигнализация, която ще обсъдим повече по -късно.
Работи за едно към едно, адрес е ограничен, и пристанище, ограничено на Nat. Но не работи за Симетричен Nat. Защото когато поискате зашеметяващия сървър за вашата публична информация, тази комуникационна двойка е създадена специално за клиента, който отправя заявката. Не е възможно да се включи друг партньор, използвайки симетрична NAT – комуникация над порта на локалното устройство е ограничена до зашеметяващия сървър.
Зашеметяващите сървъри са леки и евтини за поддържане. Има обществени зашеметяващи сървъри, които могат да бъдат запитвани безплатно.
Изображението по-долу илюстрира, когато зашеметяването работи и когато може да се установи връзка за партньорска връзка.
От друга страна, ако не може да се установи връзка за партньорска връзка, например, когато връстникът е зад симетричен NAT-тогава окончателната връзка в трета стъпка няма да бъде разрешена. Тъй като първоначалната връзка е установена със зашеметяващия сървър и никой друг партньор не може да използва тази информация за връзката.
В събитие като това, когато не може да се установи директна връзка, трябва да се възползваме от сървър за завой.
Преминаване с помощта на релета около NAT (завой)
Turn е протокол за препредаване на мрежовия трафик, когато не може да се установи директна връзка между двама връстници. Например, ако един партньор е зад симетричен NAT, е необходим специален сървър за препредаване на трафика между връстници. В този случай бихте създали връзка със сървър за завой и да кажете на всички връстници да изпращат пакети до сървъра, които след това ще ви бъдат препратени.
Това идва с режийни разходи и сървърът за завой може да бъде скъп за поддържане и изпълнение.
Следващото изображение илюстрира как се използва сървърът за обръщане за препредаване на съобщения между двама или повече връстници.
Интерактивно заведение за свързаност (ICE)
ICE използва комбинация от протоколи за зашеметяване и завой, за да осигури механизъм за хостовете, за да открият публичните IP адреси на другия и да установят директна връзка. Ако директната връзка е невъзможна, ледът ще използва завой, за да установи релейна връзка между двата хоста.
Всички тези възможни начини за потенциално установяване на връзка се наричат кандидати за ICE. Всички събрани адреси се изпращат до отдалечения партньор чрез SDP, които ще проучим следващото. WebRTC използва тази информация за всеки клиент, за да определи най -добрия начин за свързване с друг партньор. Може да се окаже,.
Протокол за описание на сесията (SDP)
SDP по същество е формат на данни за описание на медийните сесии за обявяване на сесия, покана за сесия и други форми на посвещение на сесията. Той е стандарт за описание на мултимедийното съдържание за връзката, като разделителна способност, формати, кодеци и криптиране.
Важното е, че това’S също се използва за описание на кандидатите за ICE и други възможности за работа в мрежа. Когато Peer A иска да се свърже с Peer B, те трябва да споделят SDP информация, за да се свържат. Как се споделя този SDP, е изцяло до – това се нарича сигнализация и ние ще го изследваме след това.
Сигнализация – Установяване на връзка
Сигнализацията е процесът на изпращане на информация за контрол между две устройства за определяне на комуникационните протоколи, канали, медийни кодеци и формати и метод за пренос на данни, както и всяка необходима информация за маршрутизиране. Най -важното нещо, което трябва да знаете за процеса на сигнализиране за WebRTC: той не е дефиниран в спецификацията.
Връзките за връстници се занимават със свързване на две приложения на различни компютри. Връзка се установява чрез процес на откриване и договаряне, наречен сигнализация.
Важно предупреждение е, че WEBRTC няма вградена сигнализация като част от спецификацията, тъй като не е възможно две устройства да се свързват директно помежду си, което разгледахме подробно по -рано. За да се свържат двама връстници, използвайки WebRTC, те изискват SDP данните на един друг.
Като такова, от вас зависи от вас като разработчик, да установите начин за две устройства да споделят тази информация. Популярна опция са WebSockets или информацията за сигнализиране може да се изпраща напред и назад по имейл или доставя се пеша и се въвежда ръчно, за да се установи връзка.
След като тази информация бъде споделена, имате всичко необходимо за двама връстници, за да установят връзка WebRTC, това може да е директна връзка или може да е чрез сървър за завой.
Кога трябва да използвате webrtc?
Можете дори да попитате: Защо трябва да използвам webrtc? Изглежда сложно за разбиране и още по -сложно за настройка.
Сложно е да се настрои, но има много ползи:
- API е лесен за използване и се предлага директно във вашия браузър.
- Той има добра производителност, което прави възможно да се предава съдържание на висока честотна лента, като видео или аудио.
- По -усъвършенстваните функции, като споделяне на екрани и споделяне на файлове, могат лесно да бъдат внедрени.
- Поддържа връзка между партньорска връзка с намалена латентност.
- Безплатен и отворен код.
- Без вградена сигнализация.
- Трябва да поддържате сървъри за зашеметяване и завой.
- За групови връзки (като групово видео обаждане) може да е необходим SFU.
- Сложен за настройка и разбиране.
Кое трябва да изберете?
Избраният от вас протокол ще зависи от вашите специфични нужди.
Http: С HTTP/2 вече е възможно да има двупосочна комуникация между клиент и сървър. В зависимост от приложението ви може да не се нуждаете от пълна дуплексна комуникация и нещо като SSE ще бъде повече от достатъчно. В тази статия открихме също, че WebSockets и GRPC разчитат на HTTP, докато WebRTC изисква някакъв друг канал за сигнализация. То’S Заслужава първо да проучите дали HTTP решава нуждите на вашето приложение, преди да се задълбочите в тези други протоколи.
WebSockets са най-подходящи за приложения в реално време, които се нуждаят от двупосочна комуникация, като например приложения за чат. Те също са сравнително лесни за настройка и използване. WebSockets обаче не са толкова ефективни като GRPC или WebRTC и не са подходящи за приложения, които трябва да изпращат много данни.
GRPC е по -ефективен протокол от WebSockets и е по -подходящ за приложения, които трябва да изпращат много данни. GRPC обаче е по -сложен за настройка и използване от WebSockets. Ако трябва да направите много малки обаждания на API, GRPC е добър избор. Или когато внедрите микросервизи с различни езици за програмиране, които трябва да комуникират, след това GRPC’s Сериализирано структурирано генериране на данни и код ще ви спести много време. То’S също си струва да се отбележи, че можете’t лесно използвайте GRPC от браузъра. За това се нуждаете.
Webrtc е най-ефективният протокол за комуникация в реално време с ниска латентност между браузъри и устройства и е подходящ за приложения, които трябва да изпращат много данни. WebRTC предоставя и лесен за използване API, директно наличен в браузъра, което улеснява споделянето на вашата камера, аудио, екран или други файлове. WebRTC обаче може да бъде сложен за настройка и използване, тъй като изисква да изпълнявате сигнализацията и поддържането на сървър за завой и зашеметяване.
Заключение
Бъдещето ще види повече протоколи, промени и допълнителни подобрения. HTTP/3 вече е пуснат и има и нов протокол за комуникация, наречен WebTransport, потенциален заместител на WebSockets.
Надяваме се, че сте намерили тази статия за полезна и че ще ви помогне да вземете информирано решение. Ако искате да продължите дискусията, свържете се с нас в Twitter или LinkedIn.
WebRTC срещу HLS: Сравнение между протоколите за стрийминг
Тази публикация в блога сравнява WebRTC и HLS, два от най -популярните протоколи за стрийминг. Той изследва плюсовете и минусите на всеки протокол и изследва неговите приложения. Освен това, публикацията предоставя преглед на който е по -добър за стрийминг, което позволява на читателите да изберат правилната технология за техните нужди.
Ashik TS
22 февруари 2023 г
В днешната дигитална епоха, протоколите за стрийминг са станали от съществено значение за консумацията и споделянето на медиите. От потоци на живо до видео при поискване, поточните протоколи ни позволиха да имаме достъп до съдържание навсякъде, по всяко време. Но с толкова много възможности, знаейки кое е най -доброто за вашите нужди, може да отнеме време и усилия. В тази статия ще разгледаме два от най -популярните протоколи за стрийминг: WebRTC и HLS, ще ги сравним и ще ви помогнем да вземете информирано решение.
Какво е webrtc?
WebRTC е безплатен и отворен код протокол, разработен от W3C. Тя дава възможност за комуникация в реално време, като гласови и видео разговори, онлайн конференции и чат. WebRTC стана известен наскоро поради способността си да доставя висококачествени, висококачествени видео и аудио потоци.
Приложения на Webrtc
Ето някои от най -често използваните случаи на използване на WebRTC:
- Гласови и видео разговори: Един от най -популярните случаи на използване за WebRTC е гласовите и видео разговори. Тя позволява комуникация в реално време, ниска латентност между двама или повече души. Бизнесът широко използва тази функция за вътрешна комуникация, сътрудничество и приложения, насочени към потребителите за социални мрежи и онлайн запознанства.
- Онлайн конференции: Друг популярен случай за използване на WebRTC е онлайн конференцията. Тя дава възможност на множество потребители да се присъединят към виртуална зала за срещи и да си взаимодействат помежду си чрез видео и аудио, както и да споделят екрани и документи. Бизнесът широко използва тази функция за отдалечени срещи и презентации, както и от образователни институции за онлайн класове и лекции.
- Чат: WebRTC също така дава възможност за текстова комуникация в реално време чрез чат. Тази функция може да бъде интегрирана в различни приложения и платформи, като социални мрежи, онлайн игри и поддръжка на клиенти. Тя позволява незабавна комуникация и може да се използва за подобряване на потребителското изживяване в различни контексти.
Какво е HLS?
HLS (HTTP Live Streaming) е адаптивен протокол за стрийминг на битрат, разработен от Apple. Той се използва широко за стрийминг на живо на мобилни устройства и браузъри на настолни компютри. HLS е проектиран да работи с HTTP протокола и може лесно да бъде интегриран в съществуваща HTTP базирана инфраструктура.
Приложения на HLS
Ето някои от по -често срещаните начини, по които HLS се използва в днешния ден и възраст:
- Пряко предаване онлайн: HLS се използва широко за събития на живо, като спорт, концерти и излъчвания на новини. Протоколът е проектиран да се справи с високия трафик и да осигури гладко изживяване на стрийминг за зрителите. Функцията Adaptive Bitrate позволява на потока да се приспособи към интернет връзката на зрителя, осигурявайки по -добро изживяване на гледане.
- Видео при поискване (VOD): HLS също често се използва за съдържание на видео при поискване (VOD), като филми, телевизионни предавания и видео уроци. Протоколът позволява лесна интеграция със системи за управление на съдържанието и гладко изживяване на стрийминг за зрителя с адаптивен битрейт.
- IPTV и OTT: HLS се използва и в услугите на IPTV и Over-top (OTT), като стрийминг на телевизия и видео услуги. Способността на протокола да се справя с висок трафик и да осигурява гладко изживяване на стрийминг го прави популярен избор за тези приложения.
- Мобилно стрийминг: HLS също е популярен за мобилно стрийминг, тъй като се поддържа както на iOS, така и на Android платформи.
- Enterprise Communications: HLS се използва в корпоративни комуникационни платформи, които позволяват на служителите да предават видеоклипове, да споделят екрани и да извършват аудио/видео разговори, тъй като осигурява гладко изживяване на стрийминг и е съвместим с повечето устройства.
WebRTC срещу HLS: Подробно сравнение
Особеност | Webrtc | Hls |
---|---|---|
Поддръжка на браузъра | Chrome, Firefox, Safari, Edge (с плъгин) | Safari, Chrome, Edge, Firefox (с плъгин) |
Поддръжка на устройството | Windows, MacOS, Linux, iOS, Android | iOS, Android, macOS, Windows |
Поддръжка на кодек | VP8, VP9, H.264, h.265 | З.264, h.265 |
Латентност | Ниско | Високо |
Сигурност | Високо | Среден |
Видео качество | Високо | Високо |
Метод за доставка | Peer-to-peer | Базиран на сървър |
Мащабируемост | Високо | Високо |
Съвместимост | Ограничен | Широк |
Когато решавате кой протокол да се използва, е важно да се вземат предвид фактори като латентност, сигурност, качество на видео, метод на доставка, мащабируемост и съвместимост.
Латентност
Що се отнася до латентността, WebRTC има ясно предимство пред HLS. WebRTC използва комуникация в реално време, което означава, че видеото се доставя незабавно на зрителя. От друга страна, HLS използва механизъм за буфериране, който забавя доставката на видео. В зависимост от мрежовите условия, това забавяне може да бъде от няколко секунди до няколко минути. Тези елементи правят WebRTC по -подходящи за случаи на използване, които изискват ниска латентност, като видео чатове на живо и онлайн игри.
Сигурност
И WebRTC, и HLS използват криптиране за осигуряване на видео потоци. Въпреки това, нивото на сигурност, осигурено от всеки протокол, е различно. WebRTC използва защитния транспортен протокол в реално време (SRTP), за да криптира видео потока, който се счита за един от най-сигурните методи за криптиране. От друга страна, HLS използва HTTP Secure (HTTPS) протокол, за да криптира видео потока. Докато HTTPS се счита за защитен, SRTP е по -малко защитен. Поради тези причини WebRTC е по -подходящ за случаи на използване, които изискват високи нива на сигурност, като финансови транзакции и държавна комуникация.
Видео качество
И WebRTC, и HLS са в състояние да доставят висококачествено видео. Въпреки това, качеството на видеото, доставено от всеки протокол, може да варира в зависимост от мрежовите условия. WebRTC използва адаптивен битрейт стрийминг, който регулира качеството на видеото в реално време въз основа на мрежовите условия на зрителя. Това означава, че качеството на видеото ще бъде високо дори в мрежи с ниска лента. От друга страна, HLS използва предварително сегментиран механизъм за доставка на видео, който може да доведе до буфериране и заекване на мрежи с ниска лента. В резултат на това WebRTC е по-подходящ за случаи на използване, които изискват висококачествено видео в мрежи с ниска лента.
Метод за доставка
WebRTC и HLS използват различни методи за доставка, за да предават видео. WebRTC използва метод за доставка на Peer-to-Peer (P2P), което означава, че видеото се доставя директно от един зрител до друг. Това намалява натоварването на сървъра и увеличава мащабируемостта на видео потока. От друга страна, HLS използва метод за доставка на клиент-сървър, което означава, че видеото се доставя от сървъра до зрителя. Това може да доведе до проблеми с мащабируемостта, особено по време на пиковия трафик. В резултат на това WEBRTC е по -подходящ за случаи на използване, които изискват високи мащаби, като събития на живо и онлайн игри.
Мащабируемост
WebRTC и HLS имат различни характеристики на мащабируемост. WebRTC използва метод за доставка на P2P, който намалява натоварването на сървъра и увеличава мащабируемостта на видео потока. От друга страна, HLS използва метод за доставка на клиент-сървър, който може да доведе до проблеми с мащабируемостта, особено по време на пиковия трафик. В резултат на това WEBRTC е по -подходящ за случаи на използване, които изискват високи мащаби, като събития на живо и онлайн игри.
Съвместимост
WebRTC и HLS имат различни характеристики на съвместимост. WebRTC е съвместим с повечето съвременни браузъри, включително Chrome, Firefox и Safari. Той обаче не е съвместим с Internet Explorer и Edge. От друга страна, HLS е съвместим с повечето съвременни браузъри, включително Chrome, Firefox, Safari, Internet Explorer и Edge. Поради това HLS е по -подходящ за случаи на използване, които изискват съвместимост с широк спектър от браузъри и устройства.
Webrtc срещу hls: което е по -добре?
Webrtc е чудесен вариант за приложения за стрийминг в реално време в реално време. Той е идеален за случаи на използване като гласови и видео разговори, онлайн конференции и чат. От друга страна, Hls е отличен вариант за предаване на видео на живо към голяма аудитория. Той е особено подходящ за случаи на използване като стрийминг на спорт на живо, концерти и други събития, изискващи висока мащабируемост. Способността на HLS да се адаптира към различни мрежови условия го прави популярен избор за стрийминг на съдържание към зрителите на различни устройства и мрежи.
Освен това HLS има по -добра подкрепа за защита на авторските права на съдържанието, което го прави предпочитан избор за поточно премиум съдържание. Що се отнася до съвместимостта, HLS има леко предимство спрямо WebRTC. HLS се поддържа широко, което го прави по -универсален вариант за стрийминг на съдържание към по -широка аудитория. Това обаче идва с цената на малко по -висока латентност.
Ако основният ви фокус е стрийминг в реално време, ниска латентност, WebRTC може да бъде вашият по-добър вариант. В противен случай, ако основният ви фокус е върху мащабируемостта и съвместимостта, тогава HLS може да бъде по -добрият избор.
Заключение
В заключение, както WebRTC, така и HLS имат свои уникални функции и използват случаи, които ги правят подходящи за различни видове стрийминг. WebRTC е най-подходящ за ниска латентност, комуникация в реално време като гласови и видео разговори, онлайн конференции и чат. От друга страна, HLS е най-подходящ за висококачественото стрийминг на предварително записани видеоклипове на широк спектър от устройства.
Често задавани въпроси
1. Използва ли webrtc tcp или udp?
WebRTC използва както TCP, така и UDP в зависимост от вида на данните, които се предават. Използва TCP за контролиране на съобщения и UDP за поточно предаване на медиите.
2. Използва ли youtube hls?
Да, YouTube използва HLS (HTTP Live Streaming) като един от своите протоколи за стрийминг, за да доставя видеоклипове на зрителите.
3. Е webrtc само за браузъри?
WebRTC е предимно базирана на браузъра технология, но може да се използва и в родните приложения чрез библиотеките на WebRTC.
4. Използва ли Netflix webrtc?
Не, Netflix не използва webrtc за стрийминг. Те използват собствена собствена технология, наречена адаптивен стрийминг над HTTP (ASOH), която се основава на HTTP Live Streaming (HLS).