在嵌入式系统开发领域,虚拟视频设备技术正成为实现多媒体功能创新的关键技术支撑。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
四、获取并编译v4l2loopback
4.1克隆v4l2loopback仓库
通过Git工具从官方代码仓库获取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

输出包含v4l2loopback相关信息,则表明模块加载成功。
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

终端1输出:



5.6.2在终端2查看视频流(GStreamer)
root@elf2-desktop:~# gst-launch-1.0 v4l2src device=/dev/video21 ! autovideosink

屏幕弹出一个窗口显示SMPTE测试条:

通过以上步骤,我们完成了在ELF 2开发板上部署v4l2loopback的全过程。从事嵌入式开发的工程师与高校师生可基于此构建各种视频应用场景,如视频会议系统、智能监控系统等。如果在实践中遇到问题,欢迎随时交流探讨!
-
单片机
+关注
关注
6064文章
44932浏览量
647493 -
嵌入式
+关注
关注
5142文章
19561浏览量
315368 -
Linux开发
+关注
关注
0文章
37浏览量
7255
发布评论请先 登录
ElfBoard技术贴|如何在NXP源码基础上适配ELF 1开发板的UART功能

ElfBoard技术贴|ELF 1开发板适配摄像头详解

学习笔记分享|ElfBoard开发板初识
飞凌ElfBoard ELF 1板卡-如何在ELF 1开发板上实现对java的支持
【ELF 2学习板试用】ELF2开发板开箱体验及基本使用环境搭建
rk3399是怎样使用v4l2loopback实现虚拟camera开发的
ELF技术贴|如何在开发板上实现对Java的支持

ElfBoard技术贴|在NXP源码基础上适配ELF 1开发板的按键功能

ElfBoard技术贴|如何在ELF 1开发板上搭建流媒体服务器

ElfBoard技术贴|如何在ELF 1开发板上交叉移植Qt

评论