【问题标题】:Capturing USB type C video through software通过软件采集 USB type C 视频
【发布时间】:2018-03-27 23:34:22
【问题描述】:

所以,我只是在想一些事情: 理论上是否有可能能够将带有 USB-C 的 Switch 等东西连接到 PC 并做类似于通过软件模拟采集卡的事情。我对 C 型的规范做了一些阅读,但我不确定这样的事情是否可行。我认为这样的事情也必须是相当低级的。

【问题讨论】:

  • 理论上可以做任何事情。

标签: usb video-capture


【解决方案1】:

USB 协议按设备类组织,即大容量存储设备类、通信设备类 (CDC) 以及 USB 视频设备类 (UVC) 几乎所有现代相机设备都实现了这个 UVC 类,而您可以用vlc等软件捕捉UVC设备流

https://en.wikipedia.org/wiki/USB_video_device_class

https://ubuntuforums.org/showthread.php?t=143732 - 如何:使用 VLC 将视频从网络摄像头捕获到文件中

USB-C 标准是连接器的物理布局,它不改变 USB 标准的基本组织结构,如其在设备类中的区分,因此存在带有 USB-C 连接器的 UVC 设备,在互联网上搜索即 'webcam USB-C' 但是 USB-C 通过 Alternate Modes 扩展了端口的功能,因此也使用具有不同固件和内核模块的不同端口控制器

Alt Mode 是 USB-C 的功能扩展,它使 USB 连接能够传输非 USB 信号

来源:https://blog.startech.com/post/tech-talk-using-usb-c-and-displayport-over-alt-mode/

https://en.wikipedia.org/wiki/USB-C

我不完全理解的是,如果您想通过 USB-C HDMI 备用模式https://en.wikipedia.org/wiki/HDMI#HDMI_Alternate_Mode_for_USB_Type-C)通过 USB-C 捕获 HDMI 流。这种情况下没有USB Video Device协议(HDMI是不同的协议),情况比较复杂,见https://superuser.com/questions/1218848/hdmi-input-through-usb-chttps://superuser.com/questions/1192638/whats-up-with-hdmi-and-displayport-over-usb-c

有活动的 HDMI 转 USB 视频采集卡可将 HDMI 流转换为视频格式,然后通过 USB 视频类协议传输或直接转换为原始像素数据。此原始像素数据也包含在 USB 视频类协议 (https://devtalk.nvidia.com/default/topic/970330/how-to-handle-raw-from-usb-cameras/?offset=2) 中:

其他视频捕获解决方案将您的视频压缩到一个容器中 像 H.264 或 Motion JPG,所以它足够小,可以通过 USB 2.0 总线(一种最大数据传输速率为 60 MB/s 的介质)。当它 到达您的计算机上,CPU 和/或 GPU 需要工作 解压缩此图像,然后使用您的编码设置对其重新编码。 使用这种类型的预压缩视频,永远不可能得到 恢复压缩中丢失的全部细节。

相比之下,我们的 AV.io 系列 HDMI 采集卡发送原始像素 通过 USB 3.0 将数据传输到您的计算机(最大传输速度为 640 MB/s)。 当你的软件接收到这个流时,它不需要解码它, 因此减少了繁重的工作。

来源:https://www.epiphan.com/blog/easiest-hdmi-to-usb-converter/

原始像素数据可以在 HDMI 备用模式下通过 USB-C 传输,这应该可以直接从 USB-C 捕获 HDMI 流,但是有一个主要缺点:

问题在于,在 USB(-C) 协议中,一台机器既可以是 主机设备双重角色

设备可以是主机(DFP:面向下游的端口)或外围设备 (UFP:面向上游的端口)。有些,比如手机,可以带 任一角色取决于在另一端检测到的类型。这些 端口类型称为双角色数据 (DRD) 端口,已知 在之前的规范中作为 USB On-The-Go。[12]

在 USB 树中只能是一个主机,并且在大多数情况下,一台计算机充当主机的角色。 USB-C 输入或外围设备(如显示器)处于设备或外围设备模式。如果您无法将计算机设置为设备或外围设备模式,则由于 USB 协议,您将无法通过 USB-C 捕获 HDMI 信号

关键是USB-C口控制器的固件和内核模块/驱动

linux USB-C内核模块在https://github.com/torvalds/linux/blob/master/drivers/usb/host/xhci.chttps://cateee.net/lkddb/web-lkddb/TYPEC_TCPM.html中定义为USB-C host仅面向下游的端口,因此无法将其用作 HDMI 接收器或面向上游的端口,因此无法将其用作输入并从中捕获...

无法将 USB-C 端口设置为设备模式或面向上游的端口模式是必须使用外部适配器的原因

作为 USB 外围设备或上游端口模式的 USB-C 设备的示例是 https://9to5mac.com/2016/06/04/lg-27ud88-w-usb-c-4k-monitor-macbook-review/,因此在此设备中运行通过 USB-C 连接器处理 HDMI 流的固件,但在 USB 协议中它实现面向上游的端口,由于硬件限制,计算机或笔记本电脑无法实现 USB 主机或面向下游的端口 ..

【讨论】:

  • 不错的答案,但我不清楚你是否说:1)当前软件无法做到这一点,你需要一个新的内核 USB-C 驱动程序或 2)PC 硬件可以不要这样做。你能详细说明一下吗?
猜你喜欢
  • 2011-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多