WebRTC

WebRTC
Logo WebRTC
Logo programu
Autor Global IP Solutions
Platforma sprzętowa wieloplatformowy
Rodzaj interfejs programowania aplikacji
Licencja 3-klauzulowa licencja BSD
Strona internetowa

WebRTC (Web Real-Time Communication) – wolny i otwartoźródłowy projekt, część standardu HTML5 zapewniająca przeglądarkom internetowym oraz aplikacjom mobilnym możliwość komunikacji w czasie rzeczywistym poprzez zestaw prostych interfejsów programowania (API). Podstawowym celem projektu jest umożliwienie komunikacji audio/video na stronach internetowych poprzez bezpośrednią komunikację typu peer-to-peer, eliminując w ten sposób potrzebę instalacji wtyczek czy ściągania natywnych aplikacji[1]. Projekt jest wspierany przez takie firmy jak Apple, Google, Microsoft, Mozilla i Opera. Specyfikacja techniczna została opublikowana przez World Wide Web Consortium (W3C) i Internet Engineering Task Force (IETF)[2][3]

Według strony webrtc.org celem tego projektu jest „umożliwienie stworzenia bogatych, wysokiej jakości aplikacji RTC dla przeglądarek, platform mobilnych, i urządzeń internetu rzeczy i pozwolenie im na komunikację wspólnym zestawem protokołów[4].

Historia

W maju 2010 roku Google zakupiło przedsiębiorstwo Global IP Solutions (GISP), które specjalizowało się w technologiach Wideokonferencyjnych i VoIP, a które stworzyło wiele komponentów wymaganych do komunikacji w czasie rzeczywistym (RTC), takich jak kodeki, czy techniki eliminacji echa[5]. Następnie przeniesiono posiadane technologie GISP do domeny otwarto-źródłowej i rozpoczęto proces współpracy z organami standaryzującymi takimi jak IETF, czy W3C by zapewnić nowemu standardowi wsparcie branży[6][5]. W maju 2011 Google wypuściło otwarto źródłowy projekt dla przeglądarek internetowych znany wtedy już pod nazwą WebRTC, jednak dalszym ciągu kontynuowane prace nad protokołami w IETF[7] i API przeglądarki w W3C[8].

W styczniu 2011 Ericsson Labs zbudowało pierwszą implementację WebRTC wykorzystując do tego bibliotekę WebKit[9][10]. W Październiku 2011, W3C opublikowało pierwszą roboczą specyfikacji projektu[11], by już dwa lata później (Luty 2013) wykonać pierwszą rozmowę i przesył danych z wykorzystaniem przeglądarki. Od Czerwca 2014 Google Hangouts już do pewnego stopnia również wykorzystał WebRTC do przesyłu danych[12].

Projekt API W3C został oparty na wstępnych pracach wykonanych w WHATWG[13]. API otrzymało nazwę ConnectionPeer, a pierwsze implementacja (poprzedzająca jeszcze standaryzację) została stworzona w Ericsson Labs.[10] Grupa Robocza WebRTC oczekuje, że ta specyfikacja będzie znacząco ewoluować na podstawie:

  • wyników trwających dyskusji w grupie RTCWEB w IETF w celu zdefiniowania zestawu protokołów, które wraz z tym dokumentem definiują komunikację w czasie rzeczywistym w przeglądarkach internetowych; chociaż specyfikacja standardu nie narzuca żadnego protokołu sygnalizacyjnego, bardzo często do tego zadania stosowany jest SIP oparty na WebSocketach;
  • problemów z prywatnością, które pojawiają się podczas ujawniania lokalnych możliwości i lokalnych strumieni;
  • dyskusji technicznych w grupie, dotyczących w szczególności implementacji kanałów danych[14];
  • doświadczenia zdobytego podczas wczesnych eksperymentów;
  • Informacji zwrotnych od innych grup i osób.

W listopadzie 2017 r. specyfikacja WebRTC 1.0 przeszła z poziomu Working Draft do Candidate Recommendation[15].

W styczniu 2021 r. specyfikacja WebRTC 1.0 przeszła z poziomu Candidate Recommendation do Recommendation[2].

Opis

Projekt

Główne komponenty WebRTC opierają się. o kilka JavaScript’owych API:

  • getUserMedia pozyskuje media typu audio i wideo (np. uzyskując dostęp do kamery i mikrofonu urządzenia)[16].
  • RTCPeerConnection umożliwia komunikację audio i wideo pomiędzy klientami. Obsługuje przetwarzanie sygnału, kodeki, komunikację peer-to-peer, odpowiada za bezpieczeństwo i przepustowość[17].
  • RTCDataChannel umożliwia dwukierunkową komunikację dowolnych danych pomiędzy peerami. Używa tego samego interfejsu API, co WebSocket i ma bardzo niskie opóźnienie[17].

WebRTC API zawiera również funkcję statystyk:

  • getStats umożliwia aplikacji internetowej pobieranie zestawu statystyk dotyczących sesji WebRTC. Te dane statystyczne są opisane w osobnym dokumencie W3C.[17]

Standard RFC 7874 ↓ wymaga implementacji minimum PCMA/PCMU (RFC 3551 ↓), DTMF (RFC 4733 ↓) oraz kodeka audio Opus (RFC 6716 ↓). Opcjonalne kodeki audio to m.in.: iLBC, iSAC, G.711, G.722, natomiast video to: H.264, VP8, VP9[18]. Interfejsy API przeglądarki PeerConnection, kanału danych i przechwytywania mediów są szczegółowo opisane w W3C.

Przykłady

Chociaż początkowo WebRTC zostało opracowane dla przeglądarek internetowych, jest on z powodzeniem wykorzystywany poza nimi, np. w platformach mobilnych, czy internetu rzeczy. Przykłady obejmują także telefonię VoIP opartą na przeglądarkach, zwaną telefonami w chmurze lub telefonami internetowymi, które umożliwiają wykonywanie i odbieranie połączeń z poziomu przeglądarki internetowej, zastępując wymóg pobierania i instalowania telefonu programowego[19]. O uniwersalności WebRTC świadczyć może to, że za jego pomocą został zaimplementowany klient protokołu BitTorrent dostępny w przeglądarce[20].

Wsparcie

WebRTC jest wspierane przez następujące przeglądarki

GStreamer bezpośrednio udostępnia darmową implementację WebRTC[24].

Wsparcie kodeków w różnych przeglądarkach

Obsługa poszczególnych kodeków nie jest jednolita. WebRTC ustanawia standardowy zestaw kodeków, które muszą wdrożyć wszystkie zgodne przeglądarki. Niektóre przeglądarki mogą zezwalać również na kodeki spoza bazowej specyfikacji[25].

Wsparcie dla kodeków wideo
Nazwa kodeka Profile Wspierające przeglądarki
H.264 Constrained Baseline (CB) Chrome (52+), Edge, Firefox[1], Safari
VP8 Chrome, Edge, Firefox, Safari (12.1+)[26]
VP9 Chrome (48+), Firefox
Wsparcie dla kodeków audio
Nazwa kodeka Wspierające przeglądarki
Opus Chrome, Edge, Firefox, Safari
G.711 PCM (A-law) Chrome, Firefox, Safari
G.711 PCM (µ-law) Chrome, Firefox, Safari
G.722 Chrome, Firefox, Safari
iLBC Chrome, Safari
iSAC Chrome, Safari

Kontrowersje

W styczniu 2015 r. TorrentFreak zgłosił poważną lukę w zabezpieczeniach przeglądarek obsługujących WebRTC, mówiąc, że naruszył bezpieczeństwo tuneli VPN, ujawniając prawdziwy adres IP użytkownika[27]. Żądania odczytu adresu IP nie są widoczne w konsoli programisty przeglądarki i nie są blokowane przez większość wtyczek zarządzającymi prywatnością, umożliwiając śledzenie online przez reklamodawców i inne podmioty pomimo środków ostrożności (jednak wtyczka uBlock Origin może rozwiązać ten problem).

Przypisy

  1. How WebRTC Is Revolutionizing Telephony [online], Trilogy-LTE [dostęp 2021-07-25] (ang.).
  2. a b Web Real-Time Communications (WebRTC) transforms the communications landscape; becomes a World Wide Web Consortium (W3C) Recommendation and multiple Internet Engineering Task Force (IETF) standards [online], www.w3.org [dostęp 2021-07-25] (ang.).
  3. Rtcweb Status Pages [online], tools.ietf.org [dostęp 2021-07-25] (ang.).
  4. WebRTC [online], WebRTC [dostęp 2021-07-25] (ang.).
  5. a b Google makes $68.2 million cash offer for Global IP Solutions [online], TechCrunch [dostęp 2021-07-25] (ang.).
  6. Are the WebRTC components from Google’s acquisition of Global IP Solutions? [online] [dostęp 2021-07-25] [zarchiwizowane z adresu 2011-06-07] (ang.).
  7. Real-Time Communication in WEB-browsers (rtcweb) – [online], datatracker.ietf.org [dostęp 2021-07-25] (ang.).
  8. WebRTC 1.0: Real-Time Communication Between Browsers [online], www.w3.org [dostęp 2021-07-25] (ang.).
  9. Stefan Håkansson, Welcome to Ericsson Blog [online], www.ericsson.com, 21 lipca 2021 [dostęp 2021-07-25] (ang.).
  10. a b Beyond HTML5: Peer-to-Peer Conversational Video | Ericsson Research Blog [online], web.archive.org, 25 lutego 2017 [dostęp 2021-07-25] [zarchiwizowane z adresu 2017-02-25] (ang.).
  11. WebRTC 1.0: Real-time Communication Between Browsers [online], www.w3.org [dostęp 2021-07-25] (ang.).
  12. WebRTC – so much more than just video conferencing! [online], szimek.github.io [dostęp 2021-07-25] (ang.).
  13. HTML Standard [online], html.spec.whatwg.org [dostęp 2021-07-25] (ang.).
  14. draft-jesup-rtcweb-data-protocol-00 [online], datatracker.ietf.org [dostęp 2021-07-25] (ang.).
  15. WebRTC 1.0: Real-time Communication Between Browsers [online], www.w3.org [dostęp 2021-07-25] (ang.).
  16. Media Capture and Streams [online], www.w3.org [dostęp 2021-07-25] (ang.).
  17. a b c WebRTC 1.0: Real-Time Communication Between Browsers [online], www.w3.org [dostęp 2021-07-25] (ang.).
  18. Codecs used by WebRTC – Web media technologies | MDN [online], developer.mozilla.org [dostęp 2021-07-25] (ang.).
  19. John Kennedy, Catch the Babelfish: Irish telco devises a new kind of cloud phone [online], Silicon Republic, 1 listopada 2017 [dostęp 2021-07-25] (ang.).
  20. WebTorrent FAQ [online], webtorrent.io [dostęp 2021-07-25] (ang.).
  21. Microsoft Edge Blog, ORTC API is now available in Microsoft Edge [online], Microsoft Edge Blog, 18 września 2015 [dostęp 2021-07-25] (ang.).
  22. Firefox Notes – Desktop [online], website-archive.mozilla.org [dostęp 2021-07-25] (ang.).
  23. Download Opera 18 for desktop – Blog [online], Opera News, 19 listopada 2013 [dostęp 2021-07-25] (ang.).
  24. GStreamer 1.14 release notes [online], gstreamer.freedesktop.org [dostęp 2021-07-25] (ang.).
  25. Codecs used by WebRTC – Web media technologies | MDN [online], developer.mozilla.org [dostęp 2021-07-29] (ang.).
  26. Youenn Fablet, On the Road to WebRTC 1.0, Including VP8 [online], WebKit, 12 marca 2019 [dostęp 2021-07-29] (ang.).
  27. Huge Security Flaw Leaks VPN Users’ Real IP-Addresses * TorrentFreak [online] [dostęp 2021-07-25] (ang.).

Linki zewnętrzne