1 个不稳定版本
0.1.0 | 2023年6月9日 |
---|
#13 在 #v4l2
200KB
6K SLoC
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