方案一:截圖輪詢(不推薦)
每秒 25 次 BitBlt 截圖 → JPEG 壓縮 → TCP 發送。缺點:CPU 佔用高、延遲大、無幀間壓縮、帶寬浪費。
方案二:標準視頻流架構(推薦)
- 采集:Windows Desktop Duplication API (DXGI) / GDI Hook / 驅動級捕獲,獲取 GPU 共享表面,零拷貝
- 編碼:H.264/H.265 (Intel QuickSync / NVIDIA NVENC / AMD VCE) 硬件編碼,產出 I/P/B 幀,帶寬降低 90%+
- 封裝:RTP over UDP (低延遲) 或 MPEG-TS/FLV (兼容性)
- 傳輸:網絡好用 UDP+FEC/NACK,差用 TCP/QUIC;支持自適應碼率
- 客戶端:FFmpeg/LibVLC 解碼渲染,或 Web 端 WebRTC/MSE 播放
關鍵庫/框架
- 采集:
ScreenCapture (GitHub), DD_API
- 編碼:
Media Foundation, FFmpeg, NVENC SDK
- 傳輸:
Live555, SRT, WebRTC Native
給新手建議
先用 OBS Studio + nginx-rtmp 搭建推拉流原型,理解流程後再逐模塊替換為自研代碼。