我正在做一个机器人项目,我将 2 个网络摄像头用于 EYE。
我有两个网络摄像头通过 USB 连接到我的 PC,它创建 /dev/video0 和 /dev/video1,现在的问题是当某些软件(如 Skype 或其他软件)使用摄像头时,它有时会失败。因为 Linux 本身的制造商驱动程序可能是使 /dev/video0 或 /dev/video1 消失的问题(除非手动将其物理拔出并重新插入,在某些情况下它是不可能的,例如远程/机器人项目,我需要 100% 的相机可用性才能将其用作眼睛)。
所以要修复它,我做了一个脚本:
### Logitech camera lost
target="/dev/video99"
foundon="none"
warn="[WARNING]:"
ok="[OK]:"
for i in 0 1 2 3 4
do
tmp="/dev/video$i"
if [ -e $tmp ]
then
foundon="/dev/video$i"
else
echo "no $i"
fi
done
b="none"
if [ "$foundon" = "$b" ]
then
echo "$warn No camera is found"
echo "$warn Auto restarting /var/tmp/runme.sh"
/var/tmp/runme.sh &
else
echo "$ok ln -s $foundon $target"
echo password | sudo -S ln -sf $foundon $target
echo password | sudo -S chmod -R 777 $target
fi
ls /dev/vid*
但仍然不够,我需要制作一个基于虚拟 1 图像或空图像的虚拟视频设备接口,该接口永久位于 /dev/video9 中。一旦我有了那个虚拟视频设备,我就可以调试/识别导致原始相机突然丢失的原因。
问:当任何应用程序将其用作视频源输入时,我如何制作一个真正充当显示一个 jpeg 或视频剪辑的摄像机源的虚拟 /dev/video9?(例如:Skype 或其他..)