WebRTC

Источник мультимедийных данных
Получение доступа к изображению с камеры
Изучение интерфейса RTCPeerConnection

Web Real-Time Communication (WebRTC) - это новый стандарт, который позволяет браузерам общаться в реальном времени используя одноранговую (peer-to-peer) архитектуру . Речь идет о безопасной, согласованной, с передачей аудио / видео (и данных) одноранговой связи между браузерами поддерживающими HTML5. Это безусловно эволюция в мире веб-приложений, после применения которой веб-разработчики могут разрабатывать мультимедийные приложения реального времени без необходимости использования проприетарных плагинов типа Adobe Flash.

Стек WebRTC

Протоколы

SDP
RFC 4566 (устаревший RFC 3266)

Используется для описания сеансов передачи мультимедийных данных для таких целей как объявление сеанса, приглашение к сеансу и другим формам инициации сеанса передачи мультимедийных данных.


JSEP (JavaScript Session Establishment Protocol)
Internet-Draft


ICE (Interactive Connectivity Establishment)
RFC 8445 (устаревший RFC 5245)

Этот документ описывает протокол для прохождения NAT (Network Address Translator) для коммуникаций использующих UDP. ICE использует протокол STUN (Session Traversal Utilities for NAT) и его расширение TURN (Traversal Using Relay NAT).


STUN (Session Traversal Utilities for NAT)
RFC 5389


TURN (Traversal Using Relays around NAT)
RFC 5766


RTP (Real-time Transport Protocol)
RFC 3550


SRTP (Secure Real-time Transport Protocol)
RFC 3711


SCTP (Stream Control Transmission Protocol)
RFC 4960

Это надежный транспортный протокол, который обеспечивает стабильную, упорядоченную (с сохранением порядка следования пакетов) передачу данных между двумя конечными точками (подобно TCP). Кроме того, протокол обеспечивает сохранение границ отдельных сообщений (подобно UDP). Однако в отличие от протоколов TCP и UDP протокол SCTP имеет дополнительные преимущества, такие как поддержка множественной адресации (multihoming) и многопоточности (multi-streaming) - каждая из этих возможностей увеличивает доступность узла передачи данных.


RTCP (Real-time Transport Control Protocol )
RFC 3550


WebSocket
RFC 6455
(YouTube) Realtime PHP Using Websockets - Jeff Kolesnikowicz @jkolez
PHP Ratchet
JavaScript Node.js + ws|websocket


DTLS Datagram Transport Layer Security)
RFC 6347


W3C WebRTC 1.0: Real-time Communication Between Browsers
W3C Editor's Draft 15 November 2018

W3C Media Capture and Streams API
W3C Editor's Draft 08 November 2018

Known Issues and Best Practices for the Use of Long Polling and Streaming in Bidirectional HTTP
RFC 6202

Screen Capture
W3C Editor's Draft 15 November 2018
Screen Capture on Chrome

Кодеки

Аудио - Opus (RFC 6716) и G.711
Видео - IETF пока не определились. Согласовывается браузерами.

Сигнальные серверы (используется Websocket)

PHP (Ratchet) Толковое описание на YouTube
JavaScript (Node.js)

Книги

Getting started with WebRTC
Real-time communication with WebRTC
WebRTC cookbook
WebRTC integrator's guide
WebRTC. The web way to communicate