Skip to content

Phiên bản và giới hạn ​

Phiên bản ​

Thành phầnPhiên bảnĐặt ở đâu
webrtc-sdk Androidio.github.webrtc-sdk:android:150.7871.01build.gradle.kts
webrtc-sdk iOS, macOSBinary webrtc-sdk/Specs 150.7871.01, ghim checksum, qua một local packagePackage.swift
libwebrtc Windowslibwebrtc.m150.7871.03 (release của webrtc-sdk/libwebrtc), ghim SHA-256libwebrtc.lock.json
Windows App SDK2.5.1, .NET 10, CommunityToolkit.Mvvm 8.4.2, Vortice 3.8.3Directory.Packages.props
Effect trên WindowsONNX Runtime 1.24.4 với Windows ML, model chuyển đổi bằng tf2onnx 1.16.1, opset 17convert.sh
MediaPipe Androidcom.google.mediapipe:tasks-vision:1.0.0build.gradle.kts
MediaPipe Web@mediapipe/tasks-vision, model lấy từ storage.googleapis.compackage.json
Jetpack ComposeBOM 2026.06.01, material3 1.5.0-alpha18build.gradle.kts
Build AndroidAGP 8.13.2, Gradle 9.5.1, Kotlin 2.3.0, compileSdk 36, minSdk 24android/
iOS, macOSDeployment target 26.0, Xcode 26WebRTCDemo.xcodeproj
sfu-serverGo 1.25, pion/webrtc/v4 v4.2.22, gorilla/websocket v1.5.3go.mod

Mọi bản build WebRTC native đều lấy từ nhánh m150 của bản fork webrtc-sdk.

Lệnh build ​

text
signaling-server:  npm install && npm run dev                  (port 4000)
sfu-server:        go run .   (optional, group calls)           (TCP + UDP 4001)
                   go test -race ./...
web:               npm install && npm run dev                  (http://localhost:5173)
android:           ./gradlew :app:assembleDebug
ios / macOS:       open ios/WebRTCDemo.xcodeproj; scheme WebRTCDemo or WebRTCDemoMac
windows:           ./native/RtcShim/scripts/build-shim.ps1
                   dotnet run --project src/WebRtcDemo.App -p:Platform=x64
docs:              cd docs && npm install && npm run dev

Giới hạn ​

Đây là những giới hạn đã biết, và phần lớn là cố ý. Đây là một demo.

  • Mặc định là 1:1. Phòng mặc định chứa hai người. Cuộc gọi nhóm cần SFU (không bắt buộc), mặc định 8 người mỗi phòng.
  • Không có TURN server. Cuộc gọi có thể thất bại khi nằm sau symmetric NAT hoặc firewall chặt.
  • Không tự kết nối lại. Socket signaling đóng thì cuộc gọi kết thúc.
  • Signaling không được bảo mật. HTTP và WebSocket thường, không có xác thực. Ai có room ID cũng vào được.
  • Key E2EE đi qua server ở dạng chưa mã hóa. Một app thật nên dùng cơ chế thỏa thuận key (ví dụ ECDH) hoặc một passphrase chia sẻ qua kênh khác.
  • E2EE được chọn ở lobby và không bật tắt được trong lúc gọi. Cả hai peer phải chọn cùng một thiết lập.
  • Cuộc gọi nhóm: không có simulcast, không điều chỉnh chiều tải xuống. Mỗi subscriber nhận đúng một stream duy nhất của từng người publish. Subscriber có mạng chậm không xin được layer thấp hơn.
  • Cuộc gọi nhóm: một server, chỉ IPv4 UDP. Client phải truy cập thẳng được UDP 4001. Phòng chỉ nằm trong bộ nhớ của một process.
  • Cuộc gọi nhóm: chat đi qua server dưới dạng text thuần trên WebSocket signaling, khác với data channel của cuộc gọi 1:1.
  • iOS luôn gửi VP8. VP8 được encode bằng phần mềm, nên tốn CPU và pin hơn H264 phần cứng. Nhưng chính nhờ vậy chia sẻ màn hình mới chạy được khi app ở chế độ nền.
  • Chia sẻ màn hình trên macOS cần quyền Screen Recording, và phải mở lại app sau khi cấp quyền.
  • Windows ghép effect trên CPU. Model có thể chạy trên GPU hoặc NPU, nhưng phần trộn hình, làm mờ và chuyển đổi màu chạy bằng C# trên một thread, khoảng 13 ms cho mỗi frame 720p, nên máy chậm sẽ gửi effect với frame rate thấp hơn.
  • Windows chỉ phát file video ở những định dạng mà Media Foundation trên máy đó decode được.