在嵌入式系统开发领域,虚拟视频设备技术正成为实现多媒体功能创新的关键技术支撑。v4l2loopback作为一款功能强大的Linux内核模块,可以为视频流处理提供灵活的路由架构,在远程协作、实时流媒体传输及AI视觉处理等场景展现出显著应用价值。本文将以ELF 2开发板为载体,系统阐述v4l2loopback模块的工程化部署全流程。
首先需配置交叉编译工具链路径,确保系统能够正确识别ARM64架构的编译工具。打开终端,执行以下命令:
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
内核头文件是编译内核模块的关键依赖,包含了内核 API 的定义。执行以下命令编译内核头文件:
elf@ubuntu:~/work/ELF2-linux-source$ ./build.sh kernel linux-headers
通过Git工具从官方代码仓库获取v4l2loopback的最新源代码。在终端中执行以下命令:
elf@ubuntu:~/work/ELF2-linux-source$ git clone https://github.com/umlaeute/v4l2loopback.git
克隆完成后,使用cd命令进入v4l2loopback源代码目录:
elf@ubuntu:~/work/ELF2-linux-source$ cd v4l2loopback/
由于不同开发板的内核架构和配置存在差异,需对v4l2loopback的源代码进行适当修改以确保兼容性。使用文本编辑器打开v4l2loopback.c文件:
elf@ubuntu:~/work1/ELF2-linux-source/v4l2loopback$ vi v4l2loopback.c
做如下修改:
修改完成后,保存并退出编辑器。
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的内核模块文件,这是后续需要部署到开发板上的核心文件。
将生成的v4l2loopback.ko文件通过U盘拷贝到开发板/root目录下。
在开发板上加载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(可选):为虚拟设备设置易识别的标签,方便后续使用中区分不同设备。
执行以下命令查看已加载的内核模块,确认 v4l2loopback 模块是否成功加载:
root@elf2-desktop:~# lsmod
输出包含v4l2loopback相关信息,则表明模块加载成功。
通过以下命令列出系统中的视频设备文件,检查是否成功创建了指定的虚拟视频设备:
root@elf2-desktop:~# ls /dev/video*
可以看到/dev/video21和/dev/video22两个设备文件。
使用v4l2-ctl工具查看虚拟视频设备的详细信息
root@elf2-desktop:~# v4l2-ctl --device=/dev/video21 --info
说明:
ELF 2开发板连接屏幕;
登录两个终端,一个使用串口登录,一个使用网络登录;
FFmpeg会持续生成SMPTE测试条视频流,并写入/dev/video21。
root@elf2-desktop:~# ffmpeg -f lavfi -i smptebars=size=1024x600 -pix_fmt yuv420p -f v4l2 /dev/video21
终端1输出:
root@elf2-desktop:~# gst-launch-1.0 v4l2src device=/dev/video21 ! autovideosink
屏幕弹出一个窗口显示SMPTE测试条:
免责声明:本文为转载,非本网原创内容,不代表本网观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
如有疑问请发送邮件至:bangqikeconnect@gmail.com