【问题标题】:How to simulate a webcam device [closed]如何模拟网络摄像头设备[关闭]
【发布时间】:2016-02-18 11:20:46
【问题描述】:

我正在做一个项目,我需要从现有帧合成视频,然后将其完全格式化为网络摄像头设备,并使其可供外部计算机使用。 换句话说,这个 USB 输出应该看起来就像是由网络摄像头生成的一样。 有人可以提供一些关于任何现有库或任何方法的提示吗? 通过 USB 创建“网络摄像头”输出的目标系统是 UBUNTU。

谢谢

【问题讨论】:

标签: python opencv usb video-streaming webcam


【解决方案1】:

网络摄像头通常通过库或操作系统访问,而不是作为低级 USB 设备访问。在 python 中,读取网络摄像头框架的一种选择是https://github.com/gebart/python-v4l2capture 或使用我的跨平台 fork(包括 windows):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/提供的工具

【讨论】:

  • 感谢您花时间回答我的问题。抱歉,我没有强调操作系统和连接类型是我的疏忽。目标系统是 UBUNTU,我的输出必须是 USB 2。Linux 的信息是否也适用于 UBUNTU?
  • 是的,ubuntu 在这种情况下是等价的。您似乎想要模拟原始 USB 设备而不是通过 v4l2 访问它? (因此“USB 连接器看起来像第二台计算机的网络摄像头”)这将是一些我没有尝试过的相当密集的内核接口。要让 ubuntu 充当 USB 设备,不妨试试:superuser.com/questions/334990/linux-acting-as-usb-device
  • 感谢您提供更多信息。您提供的链接看起来很有用并且方向正确。但是这个难题的另一部分是在将图像提供给 USB 之前将图像转换回 RAW 图像(相同格式的网络摄像头将其发送到主机)。我使用 openCV 来捕捉帧,所以我可以使用 RGB 帧。
  • 如果它像照相机,每种 RAW 格式都是特定于供应商的。你用的是什么网络摄像头?试试usb调试看看是怎么回事? wiki.ubuntu.com/Kernel/Debugging/USB我认为网络摄像头可以支持多图像编码以进行图像传输-您确定要RAW吗?
  • TimSC 感谢您的意见。我正在尝试使用 USB 相机。查看 USB 活动(使用设备监控)时,我收到许多 USB 数据包,并且十六进制内容与其捕获的 avi 文件不近似。此外,图像数据的数量远远多于存储在捕获文件中的数量。所以我认为相机正在发送RAW。可能不是。我需要知道 USB 相机使用什么格式,这样我才能以编程方式生成这样的输出。
【解决方案2】:

更新您的要求后确定,我想以下内容会有所帮助

首先你创建一个准备框架的程序

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输出。但我希望这就是你想要的。

更多信息您可以查看thisthis


更新

您始终可以创建另一个程序来捕获来自/dev/video1 的输出,然后使用libusb 将其写入另一个 USB 端口,这将实现您想要的(网络摄像头输出到 USB 端口

查看this 示例

【讨论】:

  • 感谢您的回复,如果我的问题没有完全定义我正在寻找的内容,我们深表歉意。问题是如何从我已经在 UBUNTU 中拥有的帧合成 USB 输出,这样这个 USB(它必须是 USB)输出看起来就像一个网络摄像头输出到外面。
  • Thesane,感谢您抽出宝贵的时间和有用的信息来创建虚拟网络摄像头(以设备的形式)。但这不是我想要做的。我认为您的回复的虚拟网络摄像头看起来就像一个网络摄像头来托管。然后,您可以将其视频定向到与网络摄像头接口的任何程序,例如 Skype。我需要做的是将视频定向到 UBUNTU 系统中的 USB 端口,使 USB 连接器看起来像第二台计算机的网络摄像头。
  • 使用 USB 摄像头进行测试可能无法正常工作,除非您有此摄像头的开源驱动程序。驱动程序负责与相机接口并从中提取图像。相机将发送具有特定速率和许多其他参数的页眉和页脚。因此,仅读取 USB 输出不会有太大帮助。尝试查看此链接以了解如何捕获相机供稿github.com/ktossell/libuvc
  • Thesane,这个 libuvc 的链接非常有用。我仍在尝试了解 UVC 的组织方式。实际上是非常复杂的。我在文档中看到某处说您可以生成视频流以及捕获,但我还没有完全弄清楚如何。谢谢
猜你喜欢
  • 2012-04-24
  • 1970-01-01
  • 2012-02-18
  • 1970-01-01
  • 1970-01-01
  • 2011-02-02
  • 2019-09-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多