问题:
我在带有 raspbian os lite 的树莓派 4 上运行 gphoto2。我将它与连接到 USB 的佳能 EOS 100d 一起用作照相亭。摄像机实时取景通过 ffmpeg 和运动传递到 http 地址。到目前为止效果很好。为此运行了两个组件:一个运动网络服务器,它从发送到 /dev/video0 的任何内容中获取视频源,以及启动实时取景源的实际 gohoto 命令。为此,我使用以下命令:
sudo gphoto2 --stdout --capture-movie | ffmpeg -i - -vcodec rawvideo -pix_fmt yuv420p -threads 0 -f v4l2 /dev/video0
这让我在https://localhost:8081/上获得了不错的实时预览,我将其用作 photobooths Web 界面的背景,因此人们可以在按下“拍照”按钮之前看到自己。
问题是实时取景现在阻止了与相机的 USB ptp 连接:所以当我点击我的网络应用程序上的“拍照”按钮时,它会触发这个 gphoto 命令:
sudo gphoto --capture-image-and-download
这将产生一些错误,例如:
Cannot execute: error connecting, ptp already in use
所以 gphoto 实时取景流会阻止捕获图像命令。看来您一次只能使用一个 gphoto 功能。我能做些什么?
想法:
显而易见的是从不同的网络摄像头运行实时取景,但我不希望这样,因为它不能准确反映人们在摄像头前的实际位置。
我的第二个想法是将实时视图命令作为 systemctl 服务启动。所以我可以轻松启动和停止实时取景:
# /lib/systemd/system/mygphoto.service
[Unit]
Description=gphoto2 live view service
After=multi-user.target
[Service]
Type=simple
ExecStart=/usr/bin/sudo /bin/bash -lc 'gphoto2 --stdout --capture-movie | ffmpeg -i - -vcodec rawvideo -pix_fmt yuv420p -threads 0 -f v4l2 /dev/video0'
Restart=on-abort
[Install]
WantedBy=multi-user.target
但是这个服务只在第一次工作,然后在几次停止和启动后它崩溃并且永远无法再次运行,直到重新启动。
所以我认为最好的是一个长终端捕获命令,它一次执行以下操作:
- 停止 gphoto 实时取景流
- 抓图并下载
- 再次启动实时取景流
重要的是,在拍照时可以不断地做到这一点。
我将非常感谢此命令的任何解决方案想法,甚至是一些完全不同的解决方案方法。以前有人做过类似的事情吗?
非常感谢您的帮助和建议!