Video streaming

Video streaming is een vorm van data overdracht waarbij data real-time verstuurd worden. Bij video streaming zijn drie dingen belangrijk:

  • het bestand format of in andere woorden de encoded bits. (h.264, MPEG-4, VP6, etc)
  • het container format die de encoded bits bij elkaar houdt. (mp4, MPEG-4, flv, etc)
  • het streaming protocol waarover het bestand verstuurd wordt.

Om dit te vertalen naar gewoon nederlands neem ik er een voorbeeld bij dat mij erg geholpen heeft. Als video streaming vergeleken word met trein transport komt dit er als volgt uit te zien.

Je besteld een groot product, bijvoorbeeld een puzzel van een 50 biljoen stukjes (Dit is de video aanvraag). Deze puzzel is te groot voor een wagon en wordt opgesplitst over verschillende wagons die ieder een biljoen stukjes bevatten (Deze verschillende puzzelstukjes zijn de encoded bits). Het totaal van deze wagons, de gehele trein (dit is de container), wordt bezorgd over een spoor (Dit spoor is het streaming protocol).

Verder zijn er twee soorten streaming: on-demand en real-time. Bij on-demand streaming vraagt de client de content op. Een voorbeeld hierbij is Netflix. De gebruiker in de app of op het web (beide client) klikt een video aan die vervolgens opgevraagd wordt. Bij real-time streaming wordt door de zender bepaald wat er verstuurd wordt. Het project richt zich op deze tweede vorm van streaming: real-time streaming. Bij dit project zijn er drie categorieën content die gestreamd worden:

  • Video
  • Illustratie
  • Screencast

Op deze pagina behandel ik omtrent de video streaming; welke mogelijkheden er zijn, welke voordelen de mogelijkheid heeft, welke nadelen er aan vast zitten, welke mogelijkheid ik wil toepassen en waarom.

HLS

HLS staat voor HTTP Live Streaming en is een media streaming protocol om audiovisuele content te streamen over internet. Bij deze methode wordt de mp4 file geknipt in kleine stukjes van ieder tien seconden. Deze korte stukjes worden vervolgens verzonden.

Pros

  • Streaming kwaliteit: De kwaliteit is aan te passen, hierdoor kun je op ieder moment de beste kwaliteit selecteren voor het netwerk.
  • Brede ondersteuning: HLS wordt breed ondersteund, eerst was dit alleen voor iOS ondertussen wordt dit ook ondersteund op MacOS, Android, Linux, Microsoft, Chrome, Safari, Firefox en Microsoft Edge.
  • Firewall: HTTP Live Streaming kan elke firewall of proxyserver doorlopen die standaard HTTP-verkeer doorlaat, in tegenstelling tot op UDP gebaseerde protocollen zoals RTP.
  • Meerdere servers: Meerdere servers kunnen dezelfde video aanbieden, zodat de speler naadloos kan wisselen als een van de servers faalt.
  • Up-to-date: HLS is de meest up-to-date streaming methode.
  • 4k support
  • Goede kleur weergaven: HDR (High Dynamic Range)

Cons

  • Vertraging: Er kan een vertraging van 15 tot 30 seconden in de livestream zitten.

 

MPEG-DASH

MPEG-DASH staat voor Moving Picture Experts Group Dynamic Adaptive Streaming over HTTP. Net als HLS wordt het gestreamde bestand opgesplitst in kleinere. DASH is codec-agnostic, wat betekent dat het content kan gebruiken die gecodeerd is met elk coderingsformat, zoals H.265, H.264, VP9.

Pros

  • Streaming kwaliteit: De kwaliteit is aan te passen, hierdoor kun je op ieder moment de beste kwaliteit selecteren voor het netwerk.
  • Firewall: MPEG-DASH kan elke firewall of proxyserver doorlopen die standaard HTTP-verkeer doorlaat, in tegenstelling tot op UDP gebaseerde protocollen zoals RTP.
  • 4k support
  • Goede kleur weergaven: HDR (High Dynamic Range)
  • Vertraging: Een aanzienlijk lagere end-to-end latentie in vergelijking met HLS.
  • Geluid: Omdat alle audio en video apart staan, kunnen ze op basis van beslissingen gemixt worden. Dit houdt in dat tijdens het afspelen de audio en videokwaliteit apart gekozen kunnen worden in tegenstelling tot HLS.

Cons

  • Vertraging: Hoewel het ook positief is, de vertraging binnen Dash is ten opzichte van HLS een stuk kleiner. Maar voor livestreams is de vertraging van Dash alsnog een kritiek punt.
  • Niet breed ondersteund: MPEG-DASH is zo nieuw dat deze nog niet door alles ondersteund wordt. Safari ondersteunt dit nog niet.

 

RTMP

RTMP is een op TCP gebaseerd media streaming protocol om permanente verbindingen te onderhouden en communicatie met lage vertraging tot stand te brengen. Om deze zogeheten streams soepel te behouden splitst het de streams op in fragmenten en wordt de grootte dynamisch onderhandeld tussen client en server. Deze worden op verschillende kanalen verstuurd. Zo wordt er een kanaal gebruikt voor; het afhandelen van RPC-aanvragen en -reacties, een kanaal voor videostream-gegevens, een kanaal voor audiostream-gegevens, een kanaal voor buiten de band besturende berichten (fragmentgrootte-onderhandeling, enz.), Enzovoort. Al deze kanalen werken onafhankelijk van elkaar en kunnen tegelijkertijd actief zijn.

Pros

  • Vertraging: Het grote voordeel aan RTMP is de lage latency, met de juiste instellingen blijft dit ergens rond de een seconde.
  • Brede ondersteuning: Oudere (maar dan ook echt oudere) apparaten ondersteunen eerder RTMP dan HTTP.
  • Meerdere apparaten: RTMP heeft de ondersteuning om het te streamen naar meerdere gebruikers zonder een nieuwe connectie aan te maken per gebruiker.
  • Beveiliging: Digital Rights Management (DRM) wordt breed ondersteund door RTMP.

Cons

  • Flash: Voor RTMP is flash een vereiste. Niet alle iOS devices ondersteunen flash. Flash is ondertussen outdated en vervangen met HTML5.
  • HTML5: RTMP werkt niet in een HTML5 omgeving.
  • Firewall: Door het gebruik van TCP en UDP poorten wil de firewall wel eens in de weg zitten. (Al is er wel een versie RTMPT die gebruik maakt van de HTTP poort.)
  • Streaming kwaliteit: In tegenstelling tot de voorgaande wordt er maar een kwaliteit gestreamd.

 

WebRTC

WebRTC is een open source protocol geschreven om webapplicaties in staat te stellen spraak- en videogesprekken en p2p-bestandsoverdrachten uit te voeren. Hierbij is de noodzaak voor extra plug-ins en software van derden niet nodig. WebRTC maakt bij voorkeur gebruik van de UDP poort, maar als deze is afgesloten valt het terug op TCP.

Pros

  • Vertraging: WebRTC wordt gezien als de toekomst door het peer-to-peer protocol kan een real-time ervaring geboden worden van onder een seconde.
  • Streaming kwaliteit: De videokwaliteit ligt hoger dan bij flash.
  • HTML5: WebRTC is speciaal geschreven voor web applicaties, daardoor werkt het ook met de HTML5 video tag zonder dat de gebruiker plug-ins moet installeren.

Cons

  • Ondersteuning: Wordt niet ondersteund door Internet Explorer en Safari voor iOS 11. Alleen Android mobiles zijn ondersteund. Mobile versie nog niet volledig ondersteund.
  • Lokale media bestanden: Een lokaal media bestand moet eerst in een canvas ingeladen worden voordat deze naar de client gestuurd kan worden.
  • Firewall: WebRTC gebruikt SRTP

 

RTP/SRTP

(Secure) Real-time Transport Protocol is bedoeld om audio en video over het internet te versturen. RTP wordt veelal samen gebruikt met RTSP (Real Time Streaming Protocol). RTSP is een protocol voor het gebruik van streamingmediasystemen. De eindgebruiker kan de server op afstand bedienen en commando’s geven net als een videospeler, zoals “play” en “pause” en zoeken op tijdcode.

Pros

  • Vertraging: RTP heeft vrijwel geen vertraging door het gebruik van de UDP poort.
  • Brede ondersteuning: RTP is ontworpen om gebruikt te worden door een brede variatie van applicaties.
  • SRTP: SRTP is een extensie op RTP die voor verbeterde beveiliging zorgt door middel van authenticatie en encryptie.

Cons

  • Firewall: Door het gebruik van UDP wilt de firewall wel eens in de weg zitten.
  • QoS: Er is geen garantie voor de Quality of Service.

 

Gekozen streaming methode

TCP draait om het behouden van een betrouwbare data verbinding. Als er een corrupt pakket ontdekt wordt zal TCP het hele systeem vertragen en proberen opnieuw dit pakket te versturen. Hierbij blijft de stream stilstaan tot dit pakket verstuurd is. UDP trekt zich weinig aan van deze pakketten en zal deze negeren. Bij UDP draait het meer om de real-time verbinding dan om de data.

Bij het ontvangen van bestanden is TCP belangrijk, als hier data ontbreken is het bestand onbruikbaar. Maar bij het streamen van video is dit minder van belang. Als een frame corrupt is zal TCP deze frame opnieuw proberen te verzenden waardoor heel de video stil blijft staan tot deze frame juist verstuurd is. Heel de video raakt dus vertraagd en deze vertraging stapelt zich als maar op. UDP zal niets aantrekken van deze frame en deze weg laten de video gaat gewoon door.

Een van de belangrijkste onderdelen is de real-time streaming. Dit omdat enkele A/B metrics afhankelijk zijn van de tijdsmomenten van de video. Hiervoor is stream nodig die constant open staat en doorgaat. Deze functionaliteit wordt bereikt met UDP en niet via TCP. In het verdere onderzoek zal dan naar mogelijkheden gezocht worden die gebruik maken van UDP. HSL en MPEG-DASH vallen af op basis van de vertraging die erin zit. RTMP vanwege de vereiste van flash.

 

Bibliografie

Altomare, F. (2018, 9 26). Streaming: Adobe RTMP Explained. Opgehaald van GlobalDots: https://www.globaldots.com/streaming-adobe-rtmp-explained/

Bernat, V. (2018, 9 26). Self-hosting videos with HLS. Opgehaald van EXOSCALE: https://www.exoscale.com/syslog/self-hosted-videos/

Does WebRTC use TCP or UDP. (2018, 9 28). Opgehaald van Stackoverflow: https://stackoverflow.com/questions/18897917/does-webrtc-use-tcp-or-udp

Durresi, A., & Jain, R. (2018). RTP, RTCP, and RTSP – Internet Protocols for Real-Time Multimedia Communication. In The Industrial Information Technology Handbook (pp. 28-1 – 28-11). Tilburg.

HTTP Live Streaming. (2018, 9 24). Opgehaald van Wikipedia: https://en.wikipedia.org/wiki/HTTP_Live_Streaming

MPEG-DASH An Overview. (2018, 9 25). Opgehaald van encoding.com: https://www.encoding.com/mpeg-dash/

Real-Time Messaging Protocol. (2018, 9 26). Opgehaald van Wikipedia: https://en.wikipedia.org/wiki/Real-Time_Messaging_Protocol

Real-time Transport Protocol. (2018, 9 27). Opgehaald van Wikipedia: https://en.wikipedia.org/wiki/Real-time_Transport_Protocol

SRTP. (2018, 10 10). Retrieved from WebRTC Glossary: https://webrtcglossary.com/srtp/

Streaming content. (2018, 9 24). Opgehaald van Computer Hope: https://www.computerhope.com/jargon/s/streamin.htm

Streaming media. (2018, 9 14). Opgehaald van Wikipedia: https://en.wikipedia.org/wiki/Streaming_media

WebRTC 04: Video Editing / Canvas Streams. (2018, 9 28). Opgehaald van deepstreamHub: https://deepstreamhub.com/tutorials/protocols/webrtc-video-manipulation/

WebRTC. (2018, 9 25). Opgehaald van Wikipedia: https://nl.wikipedia.org/wiki/WebRTC

Webrtc stream local video file. (2018, 10 1). Opgehaald van Stackoverflow: https://stackoverflow.com/questions/40363110/webrtc-stream-local-video-file

Why Does RTP use UDP instead of TCP? (2018, 9 27). Opgehaald van Stackoverflow: https://stackoverflow.com/questions/361943/why-does-rtp-use-udp-instead-of-tcp

Wilbert, M. (2018, 9 24). What is HLS Streaming and when should you use it? Opgehaald van DaCast: https://www.dacast.com/blog/hls-streaming-protocol/