1. Windows上 FFmpeg 推流(攝像頭采集)
-
設備名稱可用
ffmpeg -list_devices true -f dshow -i dummy
查詢,假設為Integrated Camera
-
采集推流示例(推RTMP到MediaMTX):
ffmpeg -rtbufsize 100M -f dshow -video_size 1280x720 -framerate 30 -i video="Integrated Camera" -c:v libx264 -preset veryfast -f flv rtmp://<服務器IP或localhost>/live/stream
這里推到MediaMTX默認監聽的RTMP端口1935,路徑
/live/stream
,可根據MediaMTX配置調整
2. MediaMTX服務器轉發配置
-
確保
mediamtx.yml
配置文件中開啟了RTMP服務,監聽1935端口 -
典型配置片段:
protocols: [rtmp, rtsp, hls] rtmp: listen: ":1935"
-
MediaMTX啟動后會監聽RTMP端口,接收并轉發流
3. WSL2上拉流播放
-
WSL2本質是Linux環境,可以用
ffplay
或vlc
拉流 -
拉取RTMP流示例:
ffplay rtmp://<Windows主機IP或localhost>:1935/live/stream
-
如果WSL2和Windows在同一臺機器上,
localhost
通常可通;如果網絡隔離,用Windows實際IP -
同理,OpenCV讀取也用相同URL:
cv::VideoCapture cap("rtmp://<WindowsIP>:1935/live/stream");
注意點
-
防火墻:確認Windows防火墻允許1935端口入站,MediaMTX監聽生效
-
網絡地址:WSL2訪問Windows時,
localhost
有時不通,可能需要用<Windows主機IP>
或者host.docker.internal
等特殊地址 -
推流參數:
-
-rtbufsize 100M
防止采集緩沖區溢出 -
-preset veryfast
或更快編碼速度降低CPU負載
-
-
流地址一致性:推流地址和拉流地址的路徑要對應
流程示意圖
Windows(FFmpeg dshow推流) --> MediaMTX(rtmp://:1935/live/stream) --> WSL2(ffplay拉流)