如何使用Gphoto2与FFmpeg捕获Panasonic DC-GH5相机视频,并搭建无FFServer的浏览器可访问视频流服务
我来帮你搞定这个Panasonic DC-GH5的浏览器视频流服务问题,咱们一步步来排查和解决:
第一步:确认GH5的视频流能被正确捕获
你当前直接用/dev/video0可能有问题——GH5是通过gphoto2的PTP/IP协议连接的,默认不会被识别为普通的V4L2视频设备。先做这几步验证:
- 先测试gphoto2本身能不能拿到相机的视频流:
如果终端开始输出乱码数据,说明相机连接正常,只是没转成V4L2设备。gphoto2 --capture-movie --stdout - 用
v4l2loopback虚拟一个视频设备,把gphoto2的流导进去:- 安装依赖:
sudo apt install v4l2loopback-dkms v4l2loopback-utils - 加载虚拟视频模块:
sudo modprobe v4l2loopback video_nr=0 card_label="GH5_Camera" - 把gphoto2的视频流推到虚拟设备:
gphoto2 --capture-movie --stdout | ffmpeg -i - -f v4l2 /dev/video0
ffplay /dev/video0测试,如果能看到相机画面,说明捕获环节没问题了。 - 安装依赖:
第二步:修正FFmpeg推流命令
你原来的命令有几个容易踩坑的点,我给你调整成更适合浏览器播放的版本:
ffmpeg -f v4l2 -s 1920x1080 -r 25 -i /dev/video0 -c:v libvpx-vp9 -b:v 2M -f webm -listen 1 http://0.0.0.0:8090/gh5-stream
- 用
0.0.0.0代替localhost:这样同一局域网内的设备都能访问,避免只能本地访问的限制 - 加上
/gh5-stream路径:防止浏览器缓存旧的流数据,也让路由更清晰 - 调整分辨率和码率:GH5支持更高分辨率,你可以根据需求改成
3840x2160(4K),码率对应调高到8M左右 - 先去掉音频部分:等视频正常播放后,再添加音频(用
arecord -l查看你的音频设备,替换原来的pulse为实际设备比如hw:0,0)
第三步:调整前端页面代码
浏览器对自动播放和视频格式有严格要求,修改你的index.php代码:
<video width="1920" height="1080" controls autoplay muted> <source src="http://你的Ubuntu机器IP:8090/gh5-stream" type="video/webm"> 你的浏览器不支持WebM视频格式,请更换浏览器重试。 </video>
- 必须加
muted:现代浏览器要求静音才能自动播放,否则视频会停在初始状态 - 替换
你的Ubuntu机器IP:比如你的Ubuntu机器局域网IP是192.168.1.100,就填这个,不要用localhost(浏览器的localhost指的是自己的机器,不是Ubuntu服务器) - 加
controls:方便你手动播放/暂停,调试时更直观
最后几个排查小细节
- 开放防火墙端口:Ubuntu20.04默认启用UFW,记得开放8090端口:
sudo ufw allow 8090 - 检查FFmpeg的VP9编码支持:如果推流失败,可能是缺编码库,安装这个:
sudo apt install libavcodec-extra - 解决gphoto2卡顿:如果捕获视频时丢帧,试试增大缓存:
gphoto2 --capture-movie --stdout --buffer-size=2048
内容的提问来源于stack exchange,提问作者Doglas A. Dembogurski Feix
相关产品推荐
相关产品推荐

