┌──────────────┐ WiFi LAN / Hotspot ┌──────────────┐
│ Notebook │ ◄────────── RTP/RTSP/HTTP ────► │ Phone │
│ (Sender) │ │ (Receiver) │
│ 捕獲/編碼/推流 │ │ 解碼/渲染/播放 │
└──────────────┘ └──────────────┘
| 環節 | 推薦方案 | 備選 |
|---|---|---|
| 視頻捕獲 | OpenCV VideoCapture / JavaCV / FFmpeg dshow (Win) / v4l2 (Linux) | DirectShow, MediaFoundation |
| 編碼 | H.264 (硬編碼優先: Intel QuickSync / NVENC / AMF / VideoToolbox) | H.265, VP8/9 |
| 傳輸協議 | WebRTC (超低延遲、NAT 穿透) / RTSP/RTP (標準、易實現) / HTTP-FLV / HLS (兼容性好、延遲高) | SRT, RIST |
| 信令 | WebSocket (WebRTC 必需) / HTTP API (RTSP) | |
| 手機端播放 | WebRTC: 原生 RTCPeerConnection (WebView) / flutter_webrtc / react-native-webrtcRTSP: ExoPlayer / VLC SDK / ijkplayer |
# FFmpeg 推流到本地 RTSP 服務器 (如 MediaMTX, 易于部署)
ffmpeg -f dshow -i video="Integrated Camera" -c:v libx264 -preset ultrafast -tune zerolatency -f rtsp rtsp://0.0.0.0:8554/live
# 或使用 MediaMTX 作為 RTSP 服務器,FFmpeg 推流給它
# MediaMTX 配置: rtmp/rtsp/hls/webrtc 多協議輸出
// Android ExoPlayer 播放 RTSP
SimpleExoPlayer player = new ExoPlayer.Builder(context).build();
player.setMediaItem(MediaItem.fromUri("rtsp://192.168.1.100:8554/live"));
player.prepare();
player.playWhenReady = true;
flutter_webrtcflv.js 兼容的 HTTP-FLV 服務器flv.js 播放頁面,或原生 ijkplayer 支持 FLV「筆記本攝像頭 → 手機」最快原型:FFmpeg 推流 RTSP 到 MediaMTX,手機 ExoPlayer 播放,10 分鐘可跑通。追求低延遲互動則上 WebRTC,技術棧雖重但生態成熟。核心難點不在傳輸協議,而在硬件編碼管線搭建與弱網下的碼率自適應。