1 个不稳定版本

0.1.0 2023年6月9日

#13#v4l2

MIT 许可证

200KB
6K SLoC

C 5.5K SLoC // 0.1% comments Rust 227 SLoC // 0.0% comments Shell 181 SLoC // 0.1% comments Bitbake 19 SLoC // 0.1% comments

v4l2loopback-rs

v4l2loopback 交互的安全绑定。

v4l2loopback 允许您在 Linux 上管理虚拟视频设备。应用程序可以将视频内容传递给这些设备,这些视频流将作为摄像头可用。

⚠️ 注意:

此crate基于 v4l2loopback 的未发布版本。要使用此crate,您需要从源代码构建和安装 v4l2loopback。(如果您使用的是archlinux,您可以从aur安装 v4l2loopback-dkms-git

使用方法

请注意,您需要打开 /dev/v4l2loopback 的权限。因此,在您的应用程序中使用此crate之前,请确保它以root身份运行。

为了避免在开发期间以root身份运行cargo,您可以更改控制设备的权限(请参阅构建和测试

use std::path::Path;
use v4l2loopback_rs::{add_device, delete_device, query_device, DeviceConfig};

// Device configuration
// Here you declare informations about the camera device that will be created.
// It should be matching the content that you will want to pass through
let device_config = DeviceConfig {
    label: "Test Device".to_string(),
    min_width: 100,
    max_width: 4000,
    min_height: 100,
    max_height: 4000,
    max_buffers: 9,
    max_openers: 3,
};
// Create a device
let device_num =
    add_device(None, device_config.clone()).expect("Error when creating the device");

// Querying informations about a device
// This returns the matchin device's configuration
let cfg =
    query_device(device_num).expect("Error when querying the device");

// When you are done with you processing, don't forget to delete the device, otherwise the
// device `/dev/videoN` will not be removed.
delete_device(device_num).expect("Error when removing device");
assert!(!Path::new(&format!("/dev/video{}", device_num)).exists());

构建和测试

要测试此crate,您需要克隆此存储库及其子模块,因为生成绑定需要 v4l2loopback/v4l2loopback.h

执行测试时,您需要确保可以打开 /dev/v4l2loopback。为此,您可以更改 /dev/v4l2loopback 的权限

# Allow anyone to read the control device
sudo chmod o+r /dev/v4l2loopback

依赖项

~1.8–4MB
~86K SLoC