用 OBS + MediaMTX 搭一个本地视频流给视觉程序用
开发目标检测、姿态识别这类视觉程序的时候,有个很烦的问题:你需要一个可控的、可重复的视频输入源。 对着真实的摄像头调试?光线一会变一个样,人走来走去的,画面完全不可控。用视频文件做输入吧,有些程序又只认摄像头设备或者RTSP地址,不认本地文件路径。 所以我需要一个东西,既能把视频文件"伪装"成一个实时的视频流,让下游程序当摄像头一样去读。又能快速接入各种我想要做出的画面或者 usb 摄像头来测试视频效果。 当然如果有更好的方案欢迎大家留言(鬼知道有没有人看得到我的文章) 其实 OBS 自带的 Virtual Camera 也能解决一部分问题,但我没怎么用过。 这次搭的链路长这样: 1 视频文件 → OBS 推流 → MediaMTX → RTSP → ffplay / OpenCV / 目标检测程序 MediaMTX 是什么 之前没见过 MediaMTX,一开始还以为是某种虚拟摄像头设备。不是。 MediaMTX 是一个本地流媒体中转服务器,用 Go 写的,一个二进制文件就能跑。它能把推过来的流转成 RTSP、RTMP、HLS、WebRTC、SRT 等各种协议的输出。也就是说你往里面塞一路流,下游不管你用什么协议来读,它都能接。 GitHub 地址:bluenviron/mediamtx,macOS arm64 直接下载解压就能用。 启动 MediaMTX 1 2 cd /Volumes/extStorage/rayEx/Downloads/mediamtx_v1.18.2_darwin_arm64 ./mediamtx gemini 最早叫我下载完之后直接刷机打开,启动的时候会报一条 warning:是因为双击启动的目录对不上,他找不到 yml,进入路径执行就没问题了 1 WAR configuration file not found (looked in .../rtsp-simple-server.yml, .../mediamtx.yml), using an empty configuration 默认配置已经把常用端口都打开了: 1 2 3 4 5 RTSP :8554 RTMP :1935 HLS :8888 WebRTC :8889 SRT :8890 本地调试足够用了,不用改 yml。后面需要鉴权、固定路径、改端口的时候再配。 ...