WebRTC là gì? Kết nối P2P thời gian thực cho web

WebRTC là gì? Kết nối P2P thời gian thực cho web

WebRTC (Web Real-Time Communication) là bộ API trình duyệt cho phép truyền audio, video, data trực tiếp giữa các peer (P2P) mà không cần plugin hay server trung gian cho luồng media. Dùng cho video call, screen sharing, game online, file transfer.

Sơ đồ WebRTC: signaling server trao đổi SDP offer/answer và ICE candidate, thiết lập kết nối P2P qua STUN/TURN, luồng media truyền trực tiếp peer-to-peer

Cách hoạt động WebRTC:
1. Signaling: Hai peer trao đổi thông tin kết nối (SDP offer/answer, ICE candidates) qua signaling server (WebSocket, HTTP). Server không tham gia luồng media.
2. NAT Traversal: Sử dụng STUN (địa chỉ public) và TURN (relay khi P2P thất bại) để vượt qua NAT/firewall.
3. ICE (Interactive Connectivity Establishment): Thu thập candidate, chọn đường đi tối ưu cho kết nối P2P.
4. Media Stream: getUserMedia() truy cập camera/microphone, RTCPeerConnection truyền luồng media đã mã hóa (DTLS/SRTP).

Các API chính:
– RTCPeerConnection: Quản lý kết nối P2P, ICE, DTLS, codecnego
– RTCDataChannel: Truyền data tùy ý (file, game state, chat) độ trễ thấp, reliable/unreliable
– MediaDevices.getUserMedia(): Truy cập camera, microphone, màn hình

Ví dụ code JavaScript tạo RTCPeerConnection, addStream từ getUserMedia, tạo offer setLocalDescription, gửi qua signaling server WebSocket

Ứng dụng phổ biến:
– Video conference: Google Meet, Discord, Jitsi
– Screen sharing: trình bày, hỗ trợ từ xa
– Game multiplayer realtime: WebRTC data channel
– IoT: truyền cảm biến, camera về dashboard
– File transfer P2P: ShareDrop, Firefox Send

WebRTC vs WebSocket:

Đặc điểm WebRTC WebSocket
Kết nối P2P (media/data) Client-Server
Độ trễ Rất thấp (< 100ms) Thấp (~10-50ms)
Mã hóa Bắt buộc (DTLS/SRTP) Tuỳ chọn (WSS)
NAT traversal STUN/TURN built-in Cần proxy/relay
Binary data DataChannel (SCTP) Binary frames

Thử thách:
– Signaling không chuẩn: cần tự thiết kế protocol
– NAT/Firewall phức tạp: cần TURN server cho trường hợp khó
– Scalability: mesh P2P giới hạn ~10-20 peer, cần SFU/MCU cho group call
– Mobile: tiêu thụ pin, băng thông lớn

Tài nguyên học tập:
– webrtc.org — tài liệu chính thức
– webrtc/samples — demo code
– MDN WebRTC API

WebRTC là nền tảng của truyền thông thời gian thực hiện đại, cho phép xây dựng ứng dụng video call, game, collaboration không phụ thuộc server media trung tâm.

Tôi là một lập trình viên IOS. Code chính là IOS nhưng thỉnnh thoảng vẫn đá sang Android hoặc web. Mặc dù không quá thông thạo nhưng tôi sẽ chia sẻ những kiến thức mà mình đã tìm hiểu, áp dụng qua.

Bài viết liên quan

asyncio trong Python là gì: event loop và lập trình bất đồng bộ

asyncio trong Python là gì và vì sao nó nhanh hơn threading là câu hỏi mà bất kỳ lập trình viên nào làm backend cũng gặp phải. Thư viện asyncio…

Xem thêm
Ví dụ cây đỏ đen hoàn chỉnh với các nút NIL tô đen ở đáy, mọi đường đi từ gốc xuống lá đều có cùng số nút đen

Cây đỏ đen (Red-Black Tree) là gì? Cấu trúc dữ liệu cân bằng

Cây đỏ đen (Red-Black Tree) là một cây tìm kiếm nhị phân tự cân bằng, nhờ vậy chiều cao cây luôn bị giới hạn ở mức O(log n) bất kể…

Xem thêm
Sơ đồ tổng quan các thao tác quản lý kho mã nguồn trong git: khởi tạo kho, thêm thay đổi vào vùng staging, tạo commit cục bộ rồi kéo và đẩy lên remote

Git internals là gì? Cách Git lưu blob, tree và commit bên trong

Git internals là gì? Đó là phần lõi bên trong Git — cách nó lưu blob, tree và commit dưới dạng đối tượng có địa chỉ SHA-1, vì sao có…

Xem thêm
0 0 đánh giá
Article Rating
Theo dõi
Thông báo của
guest
0 Comments
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất