Skip to content

Browser Support

Chrome 56+ · Firefox 44+ · Safari 11+ · Edge 79+

Overview ​

WebRTC (Web Real-Time Communication) enables two browsers to establish bidirectional audio/video and data channels directly, without server relay. It's composed of three APIs: getUserMedia captures local media stream, RTCPeerConnection establishes P2P connection, RTCDataChannel transfers arbitrary binary data.

In short: Want two users to call, transfer files, play games directly in browsers? WebRTC is built for exactly that.

Quick Start ​

html
<video id="local" autoplay muted></video>

<script type="module">
  const video = document.getElementById('local');

  // Get local camera
  const stream = await navigator.mediaDevices.getUserMedia({
    video: true,
    audio: false,
  });

  // Put it in the video element
  video.srcObject = stream;
</script>

Three lines of code, one API call — camera feed appears.

Core Concepts ​

Three Building Blocks ​

APIResponsibility
getUserMediaCapture local camera/microphone, produce MediaStream
RTCPeerConnectionEstablish, manage, close P2P connections
RTCDataChannelOpen an arbitrary data channel on the connection

Signaling ​

WebRTC itself doesn't solve "how to find the other party". This part needs server cooperation — typically use WebSocket to exchange SDP offer/answer and ICE candidate addresses. Signaling server can be anything: Node.js, Go, even PHP.

ICE / STUN / TURN ​

  • ICE: Unified framework, combines STUN and TURN
  • STUN: Helps you get your public IP (NAT traversal helper)
  • TURN: When P2P direct connection fails, relay server forwards data (final fallback)

Notes ​

  • HTTPS required: Apart from localhost, all getUserMedia calls must use HTTPS
  • Permission prompt: Browser authorization dialog pops up each call, cannot bypass
  • Performance: Audio/video encoding is CPU-intensive, consider bitrate limits on low-end devices

Released under the MIT License.