我正在开发一个项目,我需要从现有帧中合成视频,然后将其格式化为网络摄像头设备,并将其提供给外部计算机。 换句话说,此USB输出应该看起来就像是由网络摄像头生成的。 有人可以提供有关任何现有库或任何方法的一些提示吗? 用于创建网络摄像头的目标系统"通过USB输出是UBUNTU。
由于
答案 0 :(得分:3)
网络摄像头通常通过库或操作系统而不是低级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/
提供的工具答案 1 :(得分:0)
更新您的要求后确定我猜以下内容可以提供帮助
首先创建一个准备帧的程序
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
现在/dev/video1
是虚拟网络摄像头(视频设备)。请注意,这不是USB输出。但我希望这就是你想要的。
更新
您总是可以创建另一个程序来捕获/dev/video1
的输出,然后使用libusb
将其写入另一个USB端口,这将实现您想要的功能(网络摄像头输出到USB端口
检查this以获取示例