5

问题:

我在带有 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

但是这个服务只在第一次工作,然后在几次停止和启动后它崩溃并且永远无法再次运行,直到重新启动。

所以我认为最好的是一个长终端捕获命令,它一次执行以下操作:

  1. 停止 gphoto 实时取景流
  2. 抓图并下载
  3. 再次启动实时取景流

重要的是,在拍照时可以不断地做到这一点。

我将非常感谢此命令的任何解决方案想法,甚至是一些完全不同的解决方案方法。以前有人做过类似的事情吗?

非常感谢您的帮助和建议!

4

0 回答 0