# WebRTC

WebRTC (Web Real-Time Communication) is een opensourceprotocol opgesteld door het World Wide Web Consortium (W3C). Dit protocol stelt softwareontwikkelaars in staat om web applicaties voor spraak- en videogesprekken en p2p-bestandsuitwisseling te bouwen zonder noodzaak voor extra plug-ins of software van derden.

## Geschiedenis

WebRTC werd ontwikkeld door het engineeringteam van Google Hangouts. Tijdens de ontwikkeling van de Google Video Chat-plug-in ontstond het idee om de video- en spraaktechnologie direct in de webbrowser te integreren.
Hiertoe vereist Google een videocodec en een spraakgenerator. Begin 2010 kocht Google On2 Technologies, de eigenaar van de VP8-videocodec, waarna de VP8-videocodec als open-source is aangeboden voor het gebruik in zowel WebRTC als in de HTML5-videotag. Iets later nam Google het Zweedse GIPS (Global IP Solutions) over. De GIPS-technologie vormt de basis van de spraakgenerator in de Google Chrome-uitvoering van WebRTC.
In 2010 investeerde Google in totaal 200 miljoen dollar in WebRTC. De IETF richtte in april 2011 de WebRTC-werkgroep op. Deze kreeg de verantwoordelijkheid om de protocollen, die gebruikt worden in WebRTC, te standaardiseren. In mei 2011 werd de W3C WebRTC-werkgroep opgericht om een set van gestandaardiseerde api's te ontwikkelen die de deelnemende browserverkopers zouden uitvoeren.

## Functionaliteit

WebRTC-applicaties ondersteunen verschillende functies, namelijk:
* Realiseren van audio- en videostreaming of andere data.
* Ophalen van netwerkinformatie zoals IP-adressen, poorten en uitwisseling van deze gegevens met andere WebRTC-clients om verbinding in te schakelen, zelfs via NAT en firewalls.
* Informatie uitwisselen over media- en clientfaciliteit, zoals de resolutie en de codecs die worden gebruikt.

## Ontwerp

De belangrijkste onderdelen van WebRTC zijn:
* getUserMedia: dit geeft de webbrowser toegang tot de camera en microfoon.
* PeerConnection: de WebRTC-component die een stabiele en efficiënte communicatie van datastreaming tussen peers behandelt.
* DataChannels: hiermee delen browsers gegevens via peer-to-peer (p2p). De RTCDataChannel-API maakt peer-to-peeruitwisseling van willekeurige data mogelijk, met een lage latentie (vertraging) en een hoge doorvoer.

## Ondersteuning

WebRTC wordt ondersteund door volgende browsers:
* Google Chrome: de eerste browser die zowel getUserMedia en PeerConnection ondersteunde. De RTCDataChannel API wordt nog niet ondersteund.
* Apple Safari: Safari ondersteunt de WebRTC API's sinds 2017.
* Microsoft Edge
* Mozilla Firefox: deze ondersteunt alle drie de WebRTC API’s
* Opera: Opera 12 ondersteunt alleen de getUserMedia API.
Andere partijen zoals Microsoft, Ericsson, Cisco en kleinere real-time-communicatiebedrijven bieden momenteel nog geen ondersteuning.

### Mobiele browsers

De webbrowsers Chrome, Firefox en Opera ondersteunen WebRTC ook op Android. De mobiele versie van Firefox ondersteunt WebRTC sinds 17 september 2013. Google Chrome heeft ondersteuning vanaf versie 28 (deze staat standaard aan in 29+) en ook Opera Mobile 12+ ondersteunt WebRTC. Sinds Apple iOS 11 ondersteunt ook de mobiele versie van Safari WebRTC .

## Voordelen

* Betere videokwaliteit: WebRTC-videokwaliteit is merkbaar beter dan Flash.
* Verminderde audio/video latentie: WebRTC biedt een significante verbetering in latentie, hetgeen natuurgetrouwe gesprekken toestaat.
* Tot zesmaal snellere verbindingstijden
* Native HTML5-elementen: Met de nieuwe videotag in HTML5, is de vormgeving bewerkbaar zoals elk ander element op een webpagina.

## Nadelen

* Browserincompatibiliteit:
** De verschillende WebRTC-applicaties worden nog niet ondersteund in alle browsers en het is nog niet mogelijk dat WebRTC-applicaties samenwerken tussen alle browsers.
** Rond Apple blijft het momenteel stil, er wordt geen informatie verstrekt over het ondersteunen van WebRTC. WebRTC-implementaties werken niet in Safari.
* Webbrowsers kunnen het niet eens worden over welke videocodec gebruikt moet worden in WebRTC. Google Chrome, Mozilla Firefox en Microsoft Edge gebruiken VP8 en VP9.
Verschillende codecs:
| Bedrijf | VP8 | H.264 |
| Google | X | |
| Mozilla | X | |
| Opera | X | |
| Cisco | X | X |
| Microsoft | X | X |
| Apple | | X |
| Ericsson | | X |