问题标签 [uvc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
1014 浏览

android - 使用 Android Pie 的 *native* UVC 网络摄像头驱动程序?

多年来,许多人制作了 Android 应用程序/库,例如UVCCamera来查看 UVC 网络摄像头视频流。然而,Android Pie 的发行说明似乎表明它现在包含一个原生 UVC 驱动程序:

外接摄像头支持:Android 9 现在支持某些设备上的外接 USB/UVC 摄像头。[资源]

由于所有的非官方库都非常错误,我对尝试新的官方驱动程序非常感兴趣。但是,我根本找不到任何示例来展示如何使用它。谁能指点我的样本?

0 投票
0 回答
856 浏览

python - 运行 python opencv 脚本时出现“选择超时”错误

我正在尝试从 USB 3.0 网络摄像头捕获视频/图像馈送。每当我尝试运行此代码时,代码都会运行并捕获提要。但是,过了一会儿我得到“选择超时”。错误不会被异常捕获。有人可以帮我解决这个问题吗?

我也试过编辑'uvcvideo'驱动参数

还有,启用模块跟踪,

在“dmesg”图像上观察到这些错误

我遵循的链接: 在 Ubuntu 中选择超时错误 - Opencv

0 投票
0 回答
588 浏览

camera - 使用 uvc-gadget 和 g_webcam 闪烁和失败的视频流

从 4.4.143 开始,我正在将uvc-gadget 的这个提交与 g_webcam 一起用于 Rockchip。此版本的 uvc-gadget 仅传输静态 mjpeg 图像(并且比早期的 uvc-gadget 源代码编写得更好)。

观察主机笔记本电脑上的有趣行为,它正在接收来自小工具的流guvcview:一段时间后,帧开始像旧电视一样闪烁(V4L2_CORE: (jpeg decoder) error while decoding frame),然后最终流在主机上中断:V4L2_CORE: Could not grab image (select timeout): Resource temporarily unavailable。在主机下方继续轮询([75290.124695] uvcvideo: uvc_v4l2_poll),主机的 dmesg 和设备上的 uvc-gadget 都没有错误。事实上,重新打开 guvcview 流后再次工作,无需 uvc-gadget 重启,但很快以同样的方式崩溃。

我正在使用库存的 USB3.0 电缆,既可用于流式传输也可用于为设备供电。AFAIK,没有任何噪声源可能导致这种物理层面的奇怪闪烁。

此外,我注意到较小的 USB 数据包大小从 1024 下降到 256,流存活的时间更长(高达 50,000 帧左右),但最终仍然崩溃。

知道这里发生了什么吗?

更新

在我从 MJPEG 压缩流切换到未压缩流后,不再闪烁,但几秒钟后仍然失去联系:V4L2_CORE: Could not grab image (select timeout): Resource temporarily unavailable

0 投票
1 回答
630 浏览

usb - 如何限制 UVC 小工具的 FPS?

g_webcam我正在开发一个基于git://git.ideasonboard.org/uvc-gadget.git. 我注意到 USB 设备配置结构中提供的 FPS 设置不受尊重。事实上,小工具会尝试尽可能快的帧速率。此外,由于机会主义 FPS 选择可能导致低级 USB 接口泛滥,主机往往会松动到 UVC 设备的管道。

那么,我们如何为 UVC 小工具设置 FPS 的硬限制?

谢谢!

内核模块源码:

UVC小工具来源:

通用标题:

0 投票
0 回答
310 浏览

windows - 检测 UVC 视频设备断开连接 (WM_DEVICECHANGE) 在 Windows y 上有效,但在 Windows 10 上失败

我正在使用与此完全相同的代码来处理视频设备丢失。我正在使用 Logitech C920 网络摄像头测试我的应用程序。

当网络摄像头插入 Windows 7 上的 USB2 端口时,代码按预期工作,并检测到摄像头拔出。

但是,当相机连接到 Windows 10 下的 USB3 端口时,相同的代码会失败。

问题是 pDi->dbcc_name 的值仅部分匹配 g_pwszSymbolicLink 的值。

我强调下面的区别。

L"\\?\USB#VID_046D&PID_082D&MI_00#7&E9B492F&0&0000#{ E5323777-F976-4F5B-9B55-B94699C46E44 }\GLOBAL"

L"\\?\USB#VID_046D&PID_082D&MI_00#7&E9B492F&0&0000#{ 65E8773D-8F56-11D0-A3B9-00A0C9223196 }\GLOBAL"

有谁知道这是为什么?是否应该更正代码以忽略这部分字符串?

0 投票
0 回答
130 浏览

usb - DirectShow 需要哪些 USB 描述符字段才能识别 UVC 相机?

我正在自定义 USB 网络摄像头上调试 UVC 固件。相机枚举,我可以使用 guvcview 在 Ubuntu 上流式传输视频。但是在 Windows 10 中,设备会枚举并在设备管理器中显示为相机,但 DirectShow 无法识别(即它不会显示在 CLSID_VideoInputDeviceCategory 设备列表中)。因此,任何使用 DirectShow 接口的应用程序(例如 openCV 或 VLC)都无法使用该相机。需要在相机固件中实现哪些描述符,以便 DirectShow 使用 windows UVC 驱动程序识别我的 UVC 相机?固件实现 UVC 1.0 版。

0 投票
0 回答
747 浏览

video - Microsoft Media Foundation / UVC ReadSample() 回调

我正在编写一个媒体基础应用程序,以从 60Hz 的 UVC 相机获取和显示 1920x1080 YUV2 图像。

我的问题是 ReadSample() 回调仅以非常低的速率(1 FPS 左右)在几帧的突发中被不规律地调用。

这发生在两台笔记本电脑上,但到目前为止我还没有尝试过台式机。我正在运行 Windows 10,并且我运行测试的所有机器都是最新的。

但是,我注意到,如果我让 CPU 忙于我的应用程序,那么回调会按预期以 60Hz 的频率调用。

编辑

注意:当 CPU 因防病毒启动而忙碌时,回调率也会增加。虽然没有达到完整的 60Hz。

所以,如果我改变我的消息循环:

至:

然后 FPS 回到 60Hz;但当然 CPU 使用率接近 100%...

同上,在第一个消息循环的窗口上移动鼠标会导致 FPS 增加一点(~10FPS)。

将相机的帧速率降低到 30Hz 会导致 ReadSample() 回调以 30Hz 的频率发生。

我从 Microsoft 提供的示例('Windows-classic-samples')中重现了与 MFCaptureD3D 示例相同的问题。

请注意,我稍微修改了示例以测量 ReadSample() 回调中的帧速率。

在我的笔记本电脑上,该示例的测量速度约为 25FPS(因此丢了很多帧)。这是因为色彩空间转换是基于 CPU 的,效率非常低(一个内核的 75%)。但是,它仍然管理 25PFS!

注释掉转换(没有其他代码更改),导致帧速率下降到几乎为零!.. CPU 使用率为 0%。所以回调不会发生。

在这两个应用程序中,COM 库在应用程序的主线程(运行窗口的消息循环)中初始化如下:

为了方便起见,我从 Microsoft 的示例中复制了 ReadSample() 回调:

编辑

如下所示的窗口程序(尽可能简化);MF 对象在 OnCreate() 中创建:

想知道它是否与COM线程模型有关;我不明白页面底部的注释。

多线程单元旨在供非 GUI 线程使用。多线程单元中的线程不应执行 UI 操作。这是因为 UI 线程需要消息泵,而 COM 不会为多线程单元中的线程泵送消息。

这是否意味着我不应该在我的 UI 线程中创建 COM 对象?

我尝试在另一个线程中创建它们,并使用它自己的 msg 循环,但得到的结果完全相同。

编辑 已经使用基于 DirectShow 的 VLC 运行测试并且没有看到这些问题。它在 Win7 下运行良好,FPS 达到预期的 60Hz。注意到 VLC 将定时器中断降至 1ms(timeBeginPeriod ())。试过在我身上做同样的事情,但无济于事。

这里的想法用完了......看起来我可能不得不放弃 MF 并编写一个 DirectShow 应用程序,如果只是为了仔细检查它是否正常工作。

0 投票
1 回答
473 浏览

c# - 如何将 USB 视频类 (UVC) 转换为原始 USB 设备数据?

我们的视频桥设备从我们的 FPGA 输入原始非视频数据,然后将其作为视频类 (UVC) 输出。

我们的主机软件如何从接收到的 UVC 流中读取相同的原始数据?

主机是 Windows 10 上的 C# .NET 应用程序。视频桥设备是 FTDI FT602 (USB 3.1 Gen 1)

0 投票
1 回答
1317 浏览

windows - 如何在 Windows 上使用 Gstreamer 获取来自 UVC 的编码流

我想使用 Gstreamer 在 Windows 上获取来自罗技高清网络摄像头 (UVC) 的编码流。我知道在 Linux 上您可以通过 /dev/video1 等访问。但是,我不知道如何在 Windows 上执行此操作。

我可以通过 Windows 上的 ksvideosrc 获取原始缓冲区,但这并不能解决我的问题。我必须得到硬件编码流。如果您知道任何其他库而不是 Gstreamer,请指导我。

我希望这样的输出,但对于 Windows 版本。
gst-launch-1.0 v4l2src device=/dev/video0 !解码器!ximagesink

0 投票
1 回答
1491 浏览

python - USB 摄像头:OpenCV VideoCapture 返回部分帧

我正在开发一个程序来处理来自 Ubuntu 上的 USB 摄像头的帧。目前我在 python 中使用 OpenCV。当我尝试使用cv2.VideoCapture对象读取帧时,我只会得到部分帧

我使用的相机是Kayeton GS1M2812 USB 相机,它声称符合 UVC 标准。大多数应用程序(例如奶酪)在可用的网络摄像头中列出相机,但不显示任何帧。另一方面,Google Hangouts 可以毫无问题地显示来自相机的实时帧。

我还可以使用streamer. 例如:

最初,当我尝试使用时cv.VideoCapture,我得到了选择超时并且没有图像。经过一番研究,我发现重新启动 uvcvideo 模块nodrop=1允许我至少从 opencv 获取部分帧(如上面链接的那个)。

我尝试将 uvcvideo 超时参数设置为一个大得离谱的值,并弄乱了所有其他参数和各种怪癖,但无济于事。

我确实发现在每次调用之前将分辨率 ( cv.CAP_PROP_FRAME_WIDTHand ) 更改为 320x240 或更小会导致捕获完整帧,但任何更大的都不会。cv.CAP_PROP_FRAME_HEIGHTread()

我也试过用 改变各种参数v4l2-ctl,但这也没有奏效。

我能做些什么来解决这个问题?

这是我的python代码:

当我使用笔记本电脑的内置网络摄像头(通常/dev/video0)时,此代码可以正常工作,但在我使用 USB 摄像头时会显示部分帧。

我在 Ubuntu 16.04 上使用 python 2.7.12 和 opencv 3.3.1