SDV 媒体:使用摄像头

SDV Media 支持通过 Linux V4L2 API 使用摄像机。您可以直接使用 V4L2 API,但我们建议应用开发者使用用户空间帮助程序库。例如:

  • libv4l-rs 适用于 Rust 的 crate(推荐),
  • libv4l2 适用于 C++。SDV Media 默认提供此库。

支持的缓冲区模式

上游 V4L2 维护人员认为 USERPTR 缓冲区模式已废弃,因此 SDV Media 不支持此模式。请改用 MMAPDMABUF 模式 。

使用摄像机

虚拟机监控程序公开的每个视频设备(摄像机、编码器和解码器)都将显示为名为 /dev/videoN(N 为数值)的单独设备。

应用可以使用 VIDIOC_QUERYCAP ioctl 查询 视频设备的功能。摄像机设备 报告支持 V4L2_CAP_VIDEO_CAPTUREV4L2_CAP_VIDEO_CAPTURE_MPLANE

如需详细了解视频捕获流程,请参阅 Linux API 的视频:输入/输出

请考虑以下代码示例:

配置视频环回设备

为了进行测试,SDV Media 提供了一个 v4l2loopback 内核模块,该模块可用于在 guest 虚拟机中完全模拟摄像机。默认情况下,它会初始化单个虚拟摄像机设备。如需添加更多设备,请通过内核命令行将配置参数传递给该模块。例如,如需初始化 4 个设备,请添加:

v4l2loopback.devices=4

如需查看可用模块选项的完整列表,请参阅 v4l2loopback README或 Android 内核 代码库中的模块源代码