国产!全志T113-i 双核Cortex-A7@1.2GHz 工业开发板—视频开发案例

前  言

本文主要介绍基于创龙科技TLT113-EVM评估板的视频开发案例,适用开发环境如下。

Windows开发环境:Windows 7 64bit、Windows 10 64bit

虚拟机:VMware15.5.5

Linux开发环境:Ubuntu18.04.4 64bit

U-Boot:U-Boot-2018.07

Kernel:Linux-5.4.61、Linux-RT-5.4.61

LinuxSDK:T113_Tina5.0-V1.0(Linux)

我司提供的视频开发案例位于产品资料“4-软件资料\Demo\platform-demos\”目录下,案例具体功能说明如下:

 

 

评估板文件系统默认已支持GStreamer和OpenCV库,可执行如下命令查看。

Target# gst-inspect-1.0 -h

Target# ls /usr/lib/libopencv*

 

图 1

 

OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,实现了图像处理和计算机视觉方面的很多通用算法。

GStreamer是用来构建流媒体应用的开源多媒体框架,其目标是要简化音视频应用程序的开发,目前可被用于处理MP3、Ogg、MPEG1、MPEG2、AVI、Quicktime等多种格式的多媒体数据。


v4l2_enc_udp案例

案例说明

案例功能:使用Linux子系统V4L2实现视频采集和显示,并将视频进行JPEG硬件编码后,实现视频文件保存和推流。

案例支持list、save、display、dis-save、udp五种功能模式,通过命令行参数传入主程序进行选择。功能模式简要说明如下:

  1. list模式:查询摄像头设备,并打印设备相关信息,比如分辨率、帧率、格式等。
  2. save模式:采集摄像头的图像数据,进行JPEG编码后将图像数据保存至文件。
  3. display模式:采集摄像头图像数据,写入至framebuffer生成图像并显示,格式为NV12。
  4. dis-save模式:采集摄像头图像数据,然后输出至指定显示设备,同时进行JPEG编码并保存至文件。
  5. udp模式:采集摄像头图像数据,经JPEG编码,最后通过UDP协议发送至上位机。

 

图 2

 

案例使用LinuxSDK开发包所提供的libvencoder.so库文件,支持输入像素格式为NV12、NV21、I420、YV12,支持输出编码格式为JPEG。本案例使用输入像素格式为NV12,输出编码格式为JPEG。

案例测试

本案例使用逸森(Eviresn)公司的倒车后视高清CCD摄像头,NTSC制式,帧率可达30fps。

评估板断电,通过网线将评估板ETH0(RGMII)网口与PC机连接至同一个路由器,将一路CCD摄像头接入评估板CVBS IN0或CVBS IN1接口,并将HDMI OUT接口连接至HDMI显示屏。硬件连接如下图所示。

备注:CCD摄像头需连接DC 12V电源。

 

图 3

 

请将案例bin目录下的v4l2_enc_udp可执行程序拷贝至评估板文件系统任意目录下,并进入可执行程序所在目录,执行如下命令查看程序参数信息。

Target# ./v4l2_enc_udp --help

 

图 4

 

参数解析:

-m:设置运行模式。

-d:设置目标设备。

-t:设备接口类型选择。

-F:设置采集格式。

-f:设置采集帧率,若摄像头不支持帧率设置,则设为0。

-i:设置摄像头分辨率。

-I:设置显示设备分辨率。

-a:设置与评估板进行UDP通信的上位机IP和端口号。

-o:设置输出目标,display/dis_save模式下为"/dev/disp"设备节点。

-e:save/dis_save模式下,设置保存文件路径。

-c:设置CVBS IN的通道,0为评估板CVBS IN0接口,1为CVBS IN1接口。

-v:版本信息。

--help:帮助信息。

请根据分辨率、帧率等信息查询结果进行程序参数设置,否则程序无法正常执行。分辨率与帧率需与查询信息一一对应,如无帧率信息,则说明摄像头不支持设置帧率,无需在命令中指定"-f"参数。

本次测试使用CVBS IN0接口实现一路CCD摄像头的视频采集,设备节点为"/dev/video4"。

 

图 5

 

进入评估板文件系统执行如下命令,关闭Qt程序,初始化framebuffer。

Target# killall Launcher //关闭Qt程序

Target# fbinit //初始化framebuffer

 

图 6

 

在Ubuntu系统中执行如下命令,在线安装Gstreamer相关软件包,搭建Gstreamer环境。如提示安装失败,请尝试更换源再重新在线安装。

Host# sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-doc gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio -y

 

图 7

 

(1)list模式测试

在v4l2_enc_udp可执行程序所在目录下,执行如下命令,查看评估板CVBS IN0接口的摄像头信息。如需查看CVBS IN1接口,请将命令中的"-c 0"修改为"-c 1",CVBS IN1接口设备节点与CVBS IN0接口一致。

Target# ./v4l2_enc_udp -m list -c 0 -d /dev/video4

 

图 8

 

备注:目前摄像头仅支持NV12格式的图像。由于官方Linux系统驱动存在缺陷,上图查询摄像头的信息不准确。

 

(2)save模式测试

执行如下命令采集图像,经JPEG编码后,将图像数据保存为test.jpeg文件。按"Ctrl + C"停止运行。

参数"-m save"设置运行模式为save,"-d /dev/video4"设置设备节点"/dev/video4","-F NV12"设置采集图像格式为NV12,"-i 720*480"设置摄像头分辨率为720x480,"-f 30"设置采集帧率为30fps,"-I 720*480"设置显示设备分辨率720x480,"-e ./test.jpeg"设置保存文件路径。

Target# ./v4l2_enc_udp -m save -c 0 -d /dev/video4 -F NV12 -i 720*480 -I 720*480 -f 30 -e ./test.jpeg

 

图 9

 

(3)display模式测试

执行如下命令采集图像,并输出至显示设备。

参数"-m display"设置运行模式为display,"-o /dev/disp"设置显示设备节点。

Target# ./v4l2_enc_udp -m display -d /dev/video4 -c 0 -F NV12 -i 720*480 -I 720*480 -f 30 -o /dev/disp

 

图 10

 

图 11

 

(4)dis_save模式测试

执行如下命令采集图像输出至显示设备,同时进行JPEG编码后,将图像数据保存为test.jpeg文件。

参数"-m dis_save"设置运行模式为dis_save,"-o /dev/disp"设置显示设备节点,"-e ./test.jpeg"设置保存文件路径。

Target# ./v4l2_enc_udp -m dis-save -d /dev/video4 -c 0 -F NV12 -i 720*480 -I 720*480 -f 30 -o /dev/disp -e ./test.jpeg

 

图 12

 

图 13

 

(5)udp模式测试

在Ubuntu系统中执行如下命令,通过gst-launch-1.0工具将评估板发送的图像进行显示。

Host# gst-launch-1.0 -v udpsrc port=50000 ! jpegparse ! jpegdec ! videoconvert ! xvimagesink sync=false

 

图 14

 

执行如下命令采集图像,经JPEG编码后,通过UDP协议发送至上位机。

参数"-m udp"设置运行模式为udp,"-a 192.168.13.66:50000"设置上位机IP地址和端口号。

Target# ./v4l2_enc_udp -m udp -c 0 -d /dev/video4 -F NV12 -i 720*480 -f 30 -a 192.168.13.66:50000

 

图 15

 

此时,评估板程序运行成功后,上位机将会弹出gst-launch-1.0显示窗口并显示评估板发送的图像。

 

图 16

案例编译

将案例src源码目录拷贝至Ubuntu工作目录下,进入源码目录,执行如下命令修改Rules.mk配置文件,将SDK_DIR路径修改为LinuxSDK开发包实际路径,将SDK_OUT_SYS路径修改为buildroot实际路径。

Host# vi Rules.mk

 

图 17

 

修改内容如下:

备注:若为eMMC配置评估板,请将路径"tlt113-evm-nand"修改为"tlt113-evm-emmc"。

 

SDK_DIR = /home/tronlong/T113/tina5.0_v1.0 //设置LinuxSDK包安装路径

SDK_OUT_SYS = $(SDK_DIR)/out/t113_i/tlt113-evm-nand/buildroot/buildroot/

 

图 18

 

修改完成,继续执行如下命令,使用LinuxSDK开发包目录下的GCC编译器进行案例编译,编译完成将会在同一个目录下生成可执行程序。

Host# make

 

图 19

 

关键代码

本案例src目录下为工程源文件,具体说明如下表所示。

 

(1)解析命令行参数。

 

图 20 main.c

 

(2)编码模块初始化。

 

图 21 main.c

 

(3)摄像头初始化。

 

图 22 main.c

 

(4)图像采集、编码、显示、保存和UDP发送。

 

图 23 main.c

 

(5)释放资源。

 

图 24 main.c

 

posted @ 2025-08-26 15:04  创龙科技-黄工  阅读(3)  评论(0)    收藏  举报