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拉流)