在嵌入式系統(tǒng)開(kāi)發(fā)領(lǐng)域,虛擬視頻設(shè)備技術(shù)正成為實(shí)現(xiàn)多媒體功能創(chuàng)新的關(guān)鍵技術(shù)支撐。v4l2loopback作為一款功能強(qiáng)大的Linux內(nèi)核模塊,可以為視頻流處理提供靈活的路由架構(gòu),在遠(yuǎn)程協(xié)作、實(shí)時(shí)流媒體傳輸及AI視覺(jué)處理等場(chǎng)景展現(xiàn)出顯著應(yīng)用價(jià)值。本文將以ELF 2開(kāi)發(fā)板為載體,系統(tǒng)闡述v4l2loopback模塊的工程化部署全流程。
一、設(shè)置環(huán)境
首先需配置交叉編譯工具鏈路徑,確保系統(tǒng)能夠正確識(shí)別ARM64架構(gòu)的編譯工具。打開(kāi)終端,執(zhí)行以下命令:
elf@ubuntu:~/work/ELF2-linux-source$ export PATH=/home/elf/aarch64-buildroot-linux-gnu_sdk-buildroot/bin:$PATH
二、配置內(nèi)核
elf@ubuntu:~/work/ELF2-linux-source$ ./build.sh elf2_desktop_defconfig
三、編譯內(nèi)核頭文件
內(nèi)核頭文件是編譯內(nèi)核模塊的關(guān)鍵依賴,包含了內(nèi)核 API 的定義。執(zhí)行以下命令編譯內(nèi)核頭文件:
elf@ubuntu:~/work/ELF2-linux-source$ ./build.sh kernel linux-headers
四、獲取并編譯v4l2loopback
4.1克隆v4l2loopback倉(cāng)庫(kù)
通過(guò)Git工具從官方代碼倉(cāng)庫(kù)獲取v4l2loopback的最新源代碼。在終端中執(zhí)行以下命令:
elf@ubuntu:~/work/ELF2-linux-source$ git clone https://github.com/umlaeute/v4l2loopback.git
4.2進(jìn)入v4l2loopback目錄
克隆完成后,使用cd命令進(jìn)入v4l2loopback源代碼目錄:
elf@ubuntu:~/work/ELF2-linux-source$ cd v4l2loopback/
4.3修改v4l2loopback.c文件
由于不同開(kāi)發(fā)板的內(nèi)核架構(gòu)和配置存在差異,需對(duì)v4l2loopback的源代碼進(jìn)行適當(dāng)修改以確保兼容性。使用文本編輯器打開(kāi)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-
參數(shù)說(shuō)明:
KERNEL_DIR=$(pwd)/../kernel:指定內(nèi)核源代碼目錄,用于獲取編譯所需的內(nèi)核頭文件和編譯配置。
ARCH=arm64:指定目標(biāo)架構(gòu)為ARM64,與ELF 2開(kāi)發(fā)板的硬件架構(gòu)匹配。
CROSS_COMPILE=aarch64-buildroot-linux-gnu-:指定交叉編譯工具前綴,確保生成的模塊適用于ARM64架構(gòu)的開(kāi)發(fā)板。
編譯過(guò)程完成后,將在當(dāng)前目錄下生成名為v4l2loopback.ko的內(nèi)核模塊文件,這是后續(xù)需要部署到開(kāi)發(fā)板上的核心文件。
五、測(cè)試驗(yàn)證
5.1拷貝v4l2loopback.ko文件到開(kāi)發(fā)板
將生成的v4l2loopback.ko文件通過(guò)U盤拷貝到開(kāi)發(fā)板/root目錄下。
5.2加載模塊
在開(kāi)發(fā)板上加載v4l2loopback模塊,創(chuàng)建2個(gè)設(shè)備并指定設(shè)備號(hào)
root@elf2-desktop:~# insmod v4l2loopback.ko devices=2 video_nr=21,22 card_label=VirtualCam1,VirtualCam2
參數(shù)說(shuō)明:
devices=2:指定創(chuàng)建2個(gè)虛擬視頻設(shè)備。
video_nr=21,22:手動(dòng)指定設(shè)備號(hào)為/dev/video21和/dev/video22,避免與系統(tǒng)已有的視頻設(shè)備號(hào)沖突。
card_label=VirtualCam1,VirtualCam2(可選):為虛擬設(shè)備設(shè)置易識(shí)別的標(biāo)簽,方便后續(xù)使用中區(qū)分不同設(shè)備。
5.3列出已加載的模塊
執(zhí)行以下命令查看已加載的內(nèi)核模塊,確認(rèn) v4l2loopback 模塊是否成功加載:
root@elf2-desktop:~# lsmod

輸出包含v4l2loopback相關(guān)信息,則表明模塊加載成功。
5.4檢查生成的視頻設(shè)備
通過(guò)以下命令列出系統(tǒng)中的視頻設(shè)備文件,檢查是否成功創(chuàng)建了指定的虛擬視頻設(shè)備:
root@elf2-desktop:~# ls /dev/video*

可以看到/dev/video21和/dev/video22兩個(gè)設(shè)備文件。
5.5查看設(shè)備信息
使用v4l2-ctl工具查看虛擬視頻設(shè)備的詳細(xì)信息
root@elf2-desktop:~# v4l2-ctl --device=/dev/video21 --info

5.6視頻流傳輸
說(shuō)明:
ELF 2開(kāi)發(fā)板連接屏幕;
登錄兩個(gè)終端,一個(gè)使用串口登錄,一個(gè)使用網(wǎng)絡(luò)登錄;
5.6.1在終端1推送測(cè)試視頻流(FFmpeg)
FFmpeg會(huì)持續(xù)生成SMPTE測(cè)試條視頻流,并寫(xiě)入/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

屏幕彈出一個(gè)窗口顯示SMPTE測(cè)試條:

通過(guò)以上步驟,我們完成了在ELF 2開(kāi)發(fā)板上部署v4l2loopback的全過(guò)程。從事嵌入式開(kāi)發(fā)的工程師與高校師生可基于此構(gòu)建各種視頻應(yīng)用場(chǎng)景,如視頻會(huì)議系統(tǒng)、智能監(jiān)控系統(tǒng)等。如果在實(shí)踐中遇到問(wèn)題,歡迎隨時(shí)交流探討!
-
單片機(jī)
+關(guān)注
關(guān)注
6072文章
45267瀏覽量
661158 -
嵌入式
+關(guān)注
關(guān)注
5177文章
20003瀏覽量
325566 -
Linux開(kāi)發(fā)
+關(guān)注
關(guān)注
0文章
40瀏覽量
7568
發(fā)布評(píng)論請(qǐng)先 登錄
ElfBoard技術(shù)貼|如何在NXP源碼基礎(chǔ)上適配ELF 1開(kāi)發(fā)板的UART功能
來(lái)自資深工程師對(duì)ELF 2開(kāi)發(fā)板的產(chǎn)品測(cè)評(píng)
ElfBoard技術(shù)實(shí)戰(zhàn)|ELF 2開(kāi)發(fā)板本地部署DeepSeek大模型的完整指南
ElfBoard技術(shù)貼|如何在ELF 2開(kāi)發(fā)板中適配 AX200NGW WiFi模塊
ElfBoard技術(shù)貼|如何在【RK3588】ELF 2開(kāi)發(fā)板上進(jìn)行根系統(tǒng)的定制
【ELF 2學(xué)習(xí)板試用】ELF 2開(kāi)發(fā)板開(kāi)箱測(cè)評(píng)
【ELF 2學(xué)習(xí)板試用】ELF2開(kāi)發(fā)板開(kāi)箱體驗(yàn)及基本使用環(huán)境搭建
如何在米爾TI AM62開(kāi)發(fā)板上部署流媒體服務(wù)實(shí)現(xiàn)監(jiān)控功能
rk3399是怎樣使用v4l2loopback實(shí)現(xiàn)虛擬camera開(kāi)發(fā)的
這么簡(jiǎn)單!G2L開(kāi)發(fā)板安裝Docker
ELF技術(shù)貼|如何在開(kāi)發(fā)板上實(shí)現(xiàn)對(duì)Java的支持
ElfBoard技術(shù)貼|在NXP源碼基礎(chǔ)上適配ELF 1開(kāi)發(fā)板的按鍵功能
ElfBoard技術(shù)貼|如何在ELF 1開(kāi)發(fā)板上搭建流媒體服務(wù)器
ElfBoard技術(shù)貼|如何在ELF 1開(kāi)發(fā)板上交叉移植Qt
ElfBoard技術(shù)貼|【RK3588】ELF 2開(kāi)發(fā)板開(kāi)機(jī)自啟動(dòng)詳解

ElfBoard技術(shù)貼|如何在ELF 2開(kāi)發(fā)板上部署v4l2loopback
評(píng)論