如何将Windows主机生成的RTSP视频流传入Docker容器进行处理
解决方案
1. 调整rtsp-simple-server监听配置
首先修改你的rtsp-simple-server.yml,添加全局监听配置,确保服务接受所有网段的访问请求:
rtspAddress: 0.0.0.0:8554 # 新增这行,监听所有网卡的8554端口 paths: cam: runOnInit: ffmpeg -f dshow -i video="HP HD Camera" -c:v libx264 -preset ultrafast -tune zerolatency -b:v 600k -f rtsp rtsp://0.0.0.0:8554/cam # 把原配置里的主机IP改成0.0.0.0 runOnInitRestart: yes
修改后重启rtsp-simple-server生效。
2. 配置Windows防火墙放行端口
RTSP默认使用8554端口,Windows防火墙默认会拦截Docker容器网段的访问请求:
- 打开Windows Defender防火墙 -> 高级设置 -> 入站规则 -> 新建规则
- 规则类型选「端口」,点击下一步
- 选择TCP,特定本地端口填写8554,点击下一步
- 选择允许连接,点击下一步
- 域、专用、公网全部勾选(可根据你的实际网络环境调整,至少勾选你当前使用的网络类型),点击下一步
- 自定义规则名称比如「放行RTSP 8554端口」,点击完成
- 重复上述步骤,再添加一条UDP协议的8554端口放行规则
3. 调整拉流地址与容器启动参数
Windows版Docker Desktop内置了域名host.docker.internal,会自动解析到宿主机的IP,无需手动填写固定IP,避免网段适配问题:
- 启动容器时不需要额外映射8554端口(属于容器主动访问宿主机的场景),如果是WSL2后端的Docker,可在启动命令中额外加参数
--add-host=host.docker.internal:host-gateway保证域名解析正常 - 容器内的Python拉流脚本中的RTSP地址修改为:
rtsp://host.docker.internal:8554/cam
4. 问题排查验证
如果修改后还是无法拉流,按以下步骤定位问题:
- 进入容器内部,执行
ping host.docker.internal确认可以正常连通宿主机 - 容器内安装ffmpeg后执行命令验证流可访问:
如果命令运行后有码率、帧数据输出,说明网络和流正常,问题出在OpenCV编译配置,可更换带完整FFMPEG支持的OpenCV镜像;如果命令报错连接失败,回头检查防火墙和rtsp-simple-server配置。ffmpeg -rtsp_transport tcp -i rtsp://host.docker.internal:8554/cam -c copy -f null -
内容的提问来源于stack exchange,提问作者Bemojo
相关产品推荐
相关产品推荐

