在嵌入式系统开发领域,虚拟视频设备技术正成为实现多媒体功能创新的关键技术支撑。v4l2loopback作为一款功能强大的Linux内核模块,可以为视频流处理提供灵活的路由架构,在远程协作、实时流媒体传输及AI视觉处理等场景展现出显著应用价值。本文将以ELF 2开发板为载体,系统阐述v4l2loopback模块的工程化部署全流程。
一、设置环境
elf@ubuntu:~/work/ELF2-linux-source$ export PATH=/home/elf/aarch64-buildroot-linux-gnu_sdk-buildroot/bin:$PATH
二、配置内核
elf@ubuntu:~/work/ELF2-linux-source$ ./build.sh elf2_desktop_defconfig
三、编译内核头文件
elf@ubuntu:~/work/ELF2-linux-source$ ./build.sh kernel linux-headers
四、获取并编译v4l2loopback
4.1克隆v4l2loopback仓库
elf@ubuntu:~/work/ELF2-linux-source$ git clone https://github.com/umlaeute/v4l2loopback.git
4.2进入v4l2loopback目录
克隆完成后,使用cd命令进入v4l2loopback源代码目录:
elf@ubuntu:~/work/ELF2-linux-source$ cd v4l2loopback/
4.3修改v4l2loopback.c文件
由于不同开发板的内核架构和配置存在差异,需对v4l2loopback的源代码进行适当修改以确保兼容性。使用文本编辑器打开v4l2loopback.c文件:
elf@ubuntu:~/work1/ELF2-linux-source/v4l2loopback$ vi v4l2loopback.c
4.4编译v4l2loopback模块
elf@ubuntu:~/work1/ELF2-linux-source/v4l2loopback$ make KERNEL_DIR=$(pwd)/../kernel ARCH=arm64 CROSS_COMPILE=aarch64-buildroot-linux-gnu-
参数说明:
KERNEL_DIR=$(pwd)/../kernel:指定内核源代码目录,用于获取编译所需的内核头文件和编译配置。
ARCH=arm64:指定目标架构为ARM64,与ELF 2开发板的硬件架构匹配。
CROSS_COMPILE=aarch64-buildroot-linux-gnu-:指定交叉编译工具前缀,确保生成的模块适用于ARM64架构的开发板。
编译过程完成后,将在当前目录下生成名为v4l2loopback.ko的内核模块文件,这是后续需要部署到开发板上的核心文件。
五、测试验证
5.1拷贝v4l2loopback.ko文件到开发板
将生成的v4l2loopback.ko文件通过U盘拷贝到开发板/root目录下。
5.2加载模块
在开发板上加载v4l2loopback模块,创建2个设备并指定设备号。
root@elf2-desktop:~# insmod v4l2loopback.ko devices=2 video_nr=21,22 card_label=VirtualCam1,VirtualCam2
devices=2:指定创建2个虚拟视频设备。
video_nr=21,22:手动指定设备号为/dev/video21和/dev/video22,避免与系统已有的视频设备号冲突。
card_label=VirtualCam1,VirtualCam2(可选):为虚拟设备设置易识别的标签,方便后续使用中区分不同设备。
5.3列出已加载的模块
执行以下命令查看已加载的内核模块,确认 v4l2loopback 模块是否成功加载:
root@elf2-desktop:~# lsmod
5.4检查生成的视频设备
通过以下命令列出系统中的视频设备文件,检查是否成功创建了指定的虚拟视频设备:
root@elf2-desktop:~# ls /dev/video*
可以看到/dev/video21和/dev/video22两个设备文件。
5.5查看设备信息
使用v4l2-ctl工具查看虚拟视频设备的详细信息
root@elf2-desktop:~# v4l2-ctl --device=/dev/video21 --info
5.6视频流传输
说明:
ELF 2开发板连接屏幕;
登录两个终端,一个使用串口登录,一个使用网络登录;
5.6.1在终端1推送测试视频流(FFmpeg)
FFmpeg会持续生成SMPTE测试条视频流,并写入/dev/video21。
root@elf2-desktop:~# ffmpeg -f lavfi -i smptebars=size=1024x600 -pix_fmt yuv420p -f v4l2 /dev/video21
root@elf2-desktop:~# gst-launch-1.0 v4l2src device=/dev/video21 ! autovideosink
屏幕弹出一个窗口显示SMPTE测试条:
通过以上步骤,我们完成了在ELF 2开发板上部署v4l2loopback的全过程。从事嵌入式开发的工程师与高校师生可基于此构建各种视频应用场景,如视频会议系统、智能监控系统等。如果在实践中遇到问题,欢迎随时交流探讨!
1429
