创龙TL5708-EVM 之GStreamer视频应用测试
作者:大信 8125036
通过创龙的技术文件介绍得知,TL5708有强大的视频功能,本次测试实验主要测试一下TL5708开发板的视频功能和视频开发方法。在其所带文档 GStreamer视频开发案例.pdf 一文中有较为详细的技术介绍,本测试主要参照了该文档进行了视频功能的开发与测试,为了解TL5708开发板上的视频的支持情况。
一、测试目标介绍
根据开发板资源以及所带的视频案例软件,结合视频开发案例文档,本次设定几个视频测试目标:
1.测试本地摄像头视频图像的采集、编码、播放。测试采集数据支持的格式以及回放,编码格式。
2.测试视频网络通信协议、网络视频收发功能,测试支持的网络协议,以及时延。 3.测试视频图像处理功能,实时视频图像内容处理,并显示播放
4.测试视频内容识别功能,对图像中的条形码进行识别
二、测试环境准备
此次主要配合测试的设备有Logitech, Webcam C270 USB摄像头,和大华iCAMERA 网络监控摄像头,相关的网络连接设备。笔记本主机,运行Ubuntu系统。
将开发板带的四个GStreamer程序源代码,在Demotl-video-demos目录下,分别为
gst-v4l2-vpe-iva-udp
tl-gst-mjpeg-dec-edge
tl-gst-rtsp-dec-edge
tl-v4l2-capture
复制到 Ubuntu 下,准备好 TL5768交叉编译环境,交叉编译环境见上一章测试报告,可以直接复用编译环境
图1 Logitech, Webcam C270 USB摄像头
图2 大华iCAMERA 网络监控摄像头
三、安装GStreamer主机开发SDK
为了更好的配合测试GStreamer功能,需要在主机上也安装相应的软件和开发包,在主机上只要在ubuntu终端中运行以下命令安装相应的库即可,同时在主机上的gPlayer播放器也需要一些gstreamer的编解码库,安装之后就能够播放更多的格式的音视频了。
apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-devlibgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-basegstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-uglygstreamer1.0-libav gstreamer1.0-doc gstreamer1.0-tools gstreamer1.0-xgstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5gstreamer1.0-pulseaudio
另外需要的开发环境是主机gcc编译器和文本编辑器。为了编译需要GStreamer 并使用 GStreamer 核心库的代码,在编译的时候需要在末尾加上以下字符串。
pkg-config --cflags --libs gstreamer-1.0
在主机Ubuntu环境下输入
gst-launcher –verson
pkg-config --cflags --libs gstreamer-1.0
可以看到gst软件工具和开发SDK已经成功安装
图3 主机上Gstreamer工具和SDK安装
四、编译TL5708 GStreamer测试程序
先在Ubuntu下切换到交叉编译环境,即在ti-PSDK 目录运行以下命令,即进入目标板编译环境。 再进入各个工程目录下的源码目录,直接make 即可,分别如下图:
图4检测摄像头的控制文件
图5检测摄像头的控制文件
图6检测摄像头的控制文件
再分别把编译后的可执行文件通过 ssh 传输到板子目录下。
五、检测摄像头参数
上面的测试程序很多需调用摄像头,需要一些摄像头的参数,如果参数不正确,会导致无法获取到采集图像,造成测试失败,摄像头参数主要确定有,插入开发板摄像头的设备文件,以及摄像头采集图像的大小,帧率参数。
首先通过如下命令可以查看到摄像头的文件号,当摄像头插入不同的USB口时,这个号会变,有时重启后文件号也会变,因此在测试前需要检测摄像头的文件,而且这个控制文件是动态的,必须先插入摄像头才会有这个文件。
ls -l /sys/class/video4linux/video*
图7检测摄像头的控制文件
如上面所示,接入的摄像头的控制文件为 /dev/video1, 检测完控制文件后,在检车这个摄像头支持的捕捉的图像尺寸以及帧率,检查通过开发板所带的tl-video-capture 程序完成,输入以下命令即列出摄像头支持不同模式下的各种分辨率和帧率。
图8.检测摄像头支持的图像尺寸和帧率
从监测的结果看,该摄像头支持以下的分辨率和帧率:
- Supported Formats:
- V4L2_CAP_VIDEO_CAPTURE: pixelformat = YUYV, description = 'YUYV 4:2:2'
- resolution: 640x480 fps: 30, 25, 20, 15, 10, 5,
- resolution: 160x120 fps: 30, 25, 20, 15, 10, 5,
- resolution: 176x144 fps: 30, 25, 20, 15, 10, 5,
- resolution: 320x176 fps: 30, 25, 20, 15, 10, 5,
- resolution: 320x240 fps: 30, 25, 20, 15, 10, 5,
- resolution: 352x288 fps: 30, 25, 20, 15, 10, 5,
- resolution: 432x240 fps: 30, 25, 20, 15, 10, 5,
- resolution: 544x288 fps: 30, 25, 20, 15, 10, 5,
- resolution: 640x360 fps: 30, 25, 20, 15, 10, 5,
- resolution: 752x416 fps: 25, 20, 15, 10, 5,
- resolution: 800x448 fps: 25, 20, 15, 10, 5,
- resolution: 800x600 fps: 20, 15, 10, 5,
- resolution: 864x480 fps: 20, 15, 10, 5,
- resolution: 960x544 fps: 15, 10, 5,
- resolution: 960x720 fps: 10, 5,
- resolution: 1024x576 fps: 10, 5,
- resolution: 1184x656 fps: 10, 5,
- resolution: 1280x720 fps: 10, 5,
- resolution: 1280x960 fps: 7, 5,
- V4L2_CAP_VIDEO_CAPTURE: pixelformat = MJPG, description = 'Motion-JPEG'
- resolution: 640x480 fps: 30, 25, 20, 15, 10, 5,
- resolution: 160x120 fps: 30, 25, 20, 15, 10, 5,
- resolution: 176x144 fps: 30, 25, 20, 15, 10, 5,
- resolution: 320x176 fps: 30, 25, 20, 15, 10, 5,
- resolution: 320x240 fps: 30, 25, 20, 15, 10, 5,
- resolution: 352x288 fps: 30, 25, 20, 15, 10, 5,
- resolution: 432x240 fps: 30, 25, 20, 15, 10, 5,
- resolution: 544x288 fps: 30, 25, 20, 15, 10, 5,
- resolution: 640x360 fps: 30, 25, 20, 15, 10, 5,
- resolution: 752x416 fps: 30, 25, 20, 15, 10, 5,
- resolution: 800x448 fps: 30, 25, 20, 15, 10, 5,
- resolution: 800x600 fps: 30, 25, 20, 15, 10, 5,
- resolution: 864x480 fps: 30, 25, 20, 15, 10, 5,
- resolution: 960x544 fps: 30, 25, 20, 15, 10, 5,
- resolution: 960x720 fps: 30, 25, 20, 15, 10, 5,
- resolution: 1024x576 fps: 30, 25, 20, 15, 10, 5,
- resolution: 1184x656 fps: 30, 25, 20, 15, 10, 5,
- resolution: 1280x720 fps: 30, 25, 20, 15, 10, 5,
- resolution: 1280x960 fps: 30, 25, 20, 15, 10, 5,
六、测试视频图像捕捉
在开发板环境下,运行以下命令,开始测试视频捕捉,目的是从摄像头里获取视频图像,再把原始视频图像数据保存到文件里。然后把保存的文件传到windows下,使用播放器播放,检验视频图像捕捉正确。
启动视频图捕获命令,其中命令参数 –m为选择模式,这里选择保存文件,–d 为打开的摄像头设备,-F为视频色彩空间,这里采用YUYV ,-w.-h 分别为视频的宽高,-f 为帧率,-n 为捕获多少帧:
./tl-v4l2-capture -m save -d /dev/video1 -t usb -F YUYV -w 320 -h 240 -f 15-o /home/root/test.yuv -n 100
图9.开发板捕获视频图像到文件
运行完成后,在开发板/home/root/ 目录下,即可看到生成的 test.yuv 文件了。将这个文件传输到windows系统上,通过开发板带的yuvview.exe 工具就可以播放该文件的内容了,在yuvview.exe选择该文件后,color 下设置yuyv 格式,尺寸设置 320x240 即可,然后点播放即可以看到视频内容了。测试视频捕获成功。
图10.windows下播放摄像头捕获的视频文件
同样在开发板上,使用tl-v4l2-capture程序也可以直接播放采集到的视频图像。输入下面命令即可:
./tl-v4l2-capture -m display -d /dev/video1 -t usb -F YUYV -w 1280 -h 720-f 10 -o /dev/fb0
–m选择模式选择显示模式即可。
图11.开发板捕获视频图
图12.HDMI直接播放摄像图捕获的视频
另外还可以通过 GStreamer的程序来捕获视频,并且进行图像尺寸变换处理,然后显示出来,可以看到GStreamer更加灵活。运行程序命令如下:
./tl-gst-v4l2-vpe-iva-udp -mdisplay -d /dev/video1 -i 1
280*720 -o 1920*1080
图13.使用GStreamer捕获视频并变换尺寸
捕获的摄像头原始尺寸是 1280x720,通过GStreamer程序拉伸到1920x1080,后在显示器上可以满屏的显示。
图14. GStreamer捕获视频并拉伸后显示效果
七、测试视频的解码与视频编码
同样通过 tl-gst-v4l2-vpe-iva-udp 继续测试视频的编码,前面捕获到的视频是YUYV的原始视频图像,可以看到视频文件非常大,通过编码压缩后,文件将变的很小吗,测试视频编码输入命令如下:
./tl-gst-v4l2-vpe-iva-udp –m save-d /dev/video1 -i 1280*720 -o 1920*1080 –f test.264
即可以通过GStreamer对捕获的视频进行H264编码,并把H264编码文件保存到test.264文件中。
图15.视频H264编码
图16.对比YUV视频数据与编码后的H264视频数据
输入以下命令完成对视频h264文件的解码,并把视频每帧解码成jpeg图片
./gstreamer –m dech264 -i ./test.h264-o ./temp
图17解码H264视频文件
图18 解码H264视频文件
图19 解码H264视频生成的图片
八、测试视频网络收发
这里进一步测试摄像头连接开发板,通过GStreamer进行视频采集编码并且进行网络发送,将视频流实时发送到主机网络上,在主机上接收并且显示视频内容。
在开发板上输入命令如下,测试视频编码并发送到主机地址:
./tl-gst-v4l2-vpe-iva-udp -m udp -d /dev/video0 -i 1280*720 -o 1280*720 -a192.168.50.165:3345 //将摄像头画面使用 UDP 传出去
图20.开发板通过网络发送视频
主机上输入命令如下,进行接收开发板采集编码发送来的视频,并进行解码播放。
gst-launch-1.0 -v udpsrc port=3345 ! 'application/x-rtp,media=(string)video,payload=(int)96'! rtph264depay ! h264parse ! avdec_h264 ! videoconvert ! ximagesink
图21.主机接收开发板发送的视频
这里一个重要测测试,即视频时延,指从开发板采集端到网络传输到主机播放出视频画面时的视频时延,这里测试方法是,将摄像头对着将要播放视频画面的显示器,同时在显示器边上放上一个计时器画面,这里用手机做计时器,这样摄像头采集到手机上时间画面会显示到显示器上,对比显示器里的画面上的计时器和实际手机上显示的计时,这样就可以方便的计算出整体的时延,如下图。整个测试过程录制了视频放文末供参考。 图22.测试视频编码传输解码的时延
从测试的结果看,时延在400ms左右,这个时延与软件内设置的缓冲区大小以及网络速度等都有关系,这里测试的数据巾为当前下的情况。
九、测试监控摄像机视频编实时处理
这里再测试开发板接收网络监控摄像机的rtsp实时视频,并对视频进行边缘检测,将边缘检测输出的画面显示在显示器上,首先连接好监控摄像机的电源与网线,并且检查监控摄像机的IP地址,一般在局域网的网上邻居里可以看到网络监控摄像机,并且获得它的IP地址,通过相关文档获得网络摄像机输出的rtsp流地址,如果没有输出,可以进入网络摄像机的设置里,打开rtsp输出选项即可。 这个测试的网络摄像机的rtsp流地址如下,通过vlc等视频工具测试,确认网络摄像机能够正确的输出rtsp视频服务。在开发板上输入以下命令开始接收rtsp流,并且对rtsp流进行解码并调用opencl sobel edge算法,进行画面边缘检测,最后将边缘检测的结果显示到显示器上,如下图所示,整个测试过程的视频,见文章开头的视频。
监控摄像机的rtsp流地址:
开发板上输入命令如下:
./tl-gst-rtsp-dec-edge -u "rtsp://admin:12345678@192.168.3.168:80/cam/realmonitor?channel=1&subtype=0"-i 1920*1080
图23 读取监控摄像机视频并实时处理
十、图像条形码识别
最后测试开发板接对视频中的条码进行检测识别的过程,将条码识别例程编译完成,并把 detect_barcodecopy 到开发板主目录下,这个程序是QT程序,因此需要先打开QT桌面,然后在执行如下命令:
/etc/init.d/weston start
detect_barcode 1 1 1
图24 运行摄像头条码识别测试程序
即可在显示器上看到上摄像头的画面内容,然后拿一个条形码在摄像头前,可以发现条码的位置,并且对条码区域进行加框显示效果如下图:
图25条码识别测试效果
十一、视频应用测试总结
通过对TL5708-EVM开发板的视频应用测试,了解了TL5708视频的采集设备接入方法,通过V4l2采集视频。也了解了GStreamer这个强大的视频框架,从视频采集,编码,解码,网络协议支持,以及支持插件方式,支持对视频内容画面的处理等功能。基本涵盖了视频应用从采集、编码到网络以及视频图像处理的各个方面。
从测试可以看到TL5708对GStreamer支持非常好,基本上常见的视频应用组件都支持了,使得视频应用开发很简便,开发高效。同时利用其内带DSP核的优势,很容易整合OpenCL的图像视觉算法的加速,完成高级的图形图像处理功能。从而提供一些高级的视频应用功能,可以为视频内容检测、滤镜,特效,图像拼合等提供可行性。也为各种视频智能应用提供的很好的硬件平台。