如何模拟摄像头设备
我正在研究一个项目,我需要从现有帧合成视频,然后将其格式化为网络摄像头设备,并将其提供给外部计算机。 换句话说,这个USB输出应该看起来就好像它是由网络摄像头产生的一样。 有人可以提供关于任何现有图书馆或任何方法的暗示吗? 通过USB创建“网络摄像头”输出的目标系统是UBUNTU。
谢谢
通常通过库或操作系统访问网络摄像头,而不是低级别的USB设备。 在python中,阅读摄像头帧的选项是https://github.com/gebart/python-v4l2capture或使用我的跨平台分叉(包括窗口):https://github.com/TimSC/libvideolive
如果您想创建可供其他计算机访问的视频流,则需要模拟网络摄像头或IP摄像头。 通过创建自定义媒体源,可以在Windows上模拟摄像头。 https://msdn.microsoft.com/en-us/library/windows/desktop/ms700134%28v=vs.85%29.aspx在Linux上,您需要将数据流传输到v4l2loopback https://github.com/umlaeute / v4l2loopback。 要模拟IP摄像机,一个好的起点是将其基于http://live555.com/上提供的工具。
确定更新您的要求后,我猜以下可以帮助
首先你创建一个准备框架的程序
Mat frame = imread('<file>');
std::vector<uchar> buff;
cv::imencode(".jpg", frame, buff);
for (auto i = buff.begin(); i != buff.end(); ++i)
std::cout << *i ;
那么你可以使用v4l2loopback
结合ffmpeg
来模拟网络摄像头并管理上述程序的输出./app | ffmpeg -re -i pipe:0 -f v4l2 /dev/video1
./app | ffmpeg -re -i pipe:0 -f v4l2 /dev/video1
现在/dev/video1
是一个虚拟摄像头(视频设备)。 请注意,不是USB输出。 但我希望这就是你想要的。
欲了解更多信息,你可以检查这个和这个
UPDATE
你总是可以创建另一个程序来捕获/dev/video1
的输出,然后使用libusb
将它写入另一个USB端口,这将实现你想要的(网络摄像头输出到USB端口
检查这个例子
链接地址: http://www.djcxy.com/p/14241.html