基于Linux系统的H.264标准的实时视频压缩及传输系统设计
2015-12-02刘溶剑王赵玺
刘溶剑+王赵玺
摘 要: 随着计算机网络媒体的迅猛发展,研究时视频压缩及传输技术具有十分重要的意义。首先建立基于Ubuntu Linux操作系统的H.264实时视频压缩及传输系统,并详细介绍该系统相关软、硬件实现方法和系统结构的设计思想。然后通过实时视频的采集和编码模块设计系统,并采用系统的实现代码具体实现系统的各个模块。结果表明,使用该设计系统进行传输,可以获得较好的图像质量以及较低传输的延时,能满足实时性应用的需求。
关键词: H.264; 视频压缩; 传输系统; Ubuntu Linux
中图分类号: TN919?34; TP391.4 文献标识码: A 文章编号: 1004?373X(2015)22?0078?02
近年来,视频压缩技术和网络传输技术发展迅速,实时视频通信技术已渐渐进入人们的生活。H.264视频压缩标准的日趋成熟,RTP 协议的出现进一步推动了视频通信的发展,视频压缩技术和视频通信技术一直是人们所关心的重要问题,对原始的视频数合理有效的压缩和网络传输中的拥塞控制始终是研究的热点[1]。笔者通过对大量文献资料的学习[2],对H.264视频压缩标准,实时传输协议RTP/RTCP等相关知识梳理和研究,建立了一种基于Ubuntu Linux系统的H.264实时视频压缩及传输系统。
1 系统的的软硬件环境及整体结构
1.1 系统的软、硬件环境
整个系统的设计目标是完成通过经路由器建立的局域网,在两台加入相同多播组的计算机间,进行实时视频的压缩及传输。在编解码模块使用的是基于开放源代码的RTP库——libccrtp设计的一种软件。硬件方面,需要现在广泛使用的PC机及一般的USB接口数码摄像头一个,网络连接方案如前所述,通过经路由器建立的局域网。
选用的操作系统是Ubuntu 10.10。视频的获取通过Video4Linux2(简称V4L2),是Linux中关于视频设备的内核驱动。视频编解码部分使用的是VLC或Mplayer及Mencoder,VLC多媒体播放器(最初命名为VideoLAN客户端)是VideoLAN计划的多媒体播放器。视频的传输部分使用的是开放源代码的RTP库——libccrtp,以及基于libccrtp而编写的实时流媒体传输软件。
1.2 系统的整体结构
系统采用了客户机/服务器设计模式,服务器端(发送端)采集发送视频,客户端(接收端)接收回放视频,系统可分为5个功能模块:视频采集模块、视频编码模块、包处理模块、网络传输模块和视频解码模块,总体结构如图1所示。
2 系统各个模块的具体实现
2.1 系统实时视频采集及编码模块的设计
2.1.1 编码器的选择
与其他视频压缩技术相比,H.264的压缩码率能降低一半以下,但这种高效率的压缩性能是以运算复杂度为代价的,对机器的处理能力有很高要求[3]。因此需要根据实际需要选择一个好的H.264编码器,目前H.264的开源编码器主要有三个:JM,X264,T264。通过比较:T264(fast mode)、T264(high quality mode)的编码性能和X264性能相比有一定劣势; X264的编码速度也相当快,完全可以达到实用的要求。本设计选用X264编码器。
2.1.2 基于VLC的实时视频采集及编码
VLC是一款功能强大的视频编码及播放软件,使用它对视频流编码的一般格式如下:
vlc input_stream ??sout
"#module1{option1=parameter1{parameter?option1},option2=parameter2}:module2{option1=...,option2=...}:..."
其中module表示各个模块,本系统所使用的两个模块为transcode(编码)模块和std(标准)模块,将在下文中进行介绍。
在Ubuntu系统下安装了VLC并连接了摄像头后在终端中运行以下命令即可完成实时视频的获取及压缩编码:
vlc ?vvv v4l2:// :v4l2?vdev="/dev/video0" :v4l2?adev="/dev/dsp " :v4l2?norm=3 :v4l2?frequency=?1 ??run?time 600 ??sout
′#transcode{vcodec=h264,vb=300,scale=1,acodec=mpga,ab=128,channels=2}:std{access=file,mux=ts,dst=pipe}′
2.1.3 基于mencoder的实时视频采集及编码
整体代码如下,功能依然是通过V4L2视频设备内核驱动,对设备文件/dev/video0及/dev/dsp进行设置,进而完成实时视频的采集和编码:
tv:// ?tv driver=v4l2:width=320:height=240:device=/dev/video0:forceaudio:adevice=/dev/dsp ?ovc x264 ?x264encopts bitrate=300 ?oac mp3lame ?lameopts cbr:br=64:mode=3 ?o pipe
2.2 系统网络传输模块的设计
2.2.1 RTP封装及传输前的准备
在经过编码的实时视频流进行RTP封装并进入网络传输之前,还有几件事情需要完成。
首先,要更改工作目录,以便后续命令的编写和执行。更改工作目录只需一条简单Ubuntu的命令即可实现,代码如下:
cd myworks/trunk/build/Debug/bin;
其次,由于本系统采用组播技术作为IP网络数据传输方式,故要将多播地址添加到传输方及接收方计算机的IP路由表当中;
最后,还要先利用Mplayer测试编码后的视频流,然后方能调用相关程序进行封装及传输。如果经过以上三步均未出现问题,那么就可以进入视频流的封装及网络传输阶段。
2.2.2 网络传输模块软件libccrtp核心思想
本系统的传输模块所用到的libccrtp软件,是基于开放源代码的RTP库——libccrtp设计的,它的核心思想是在发送端完成编码后实时视频流的RTP封装及接收端原始视频流的恢复,即在发送端软件先对媒体类型进行检查,根据不同的媒体类型确定RTP数据包的负载类型以及RTP时间戳增量[4]。封装好RTP数据分组后将数据进行UDP发送[5];接收端在接收到RTP包后分析RTP包头,判断其版本、长度和负载类型等信息的有效性,然后按照RTP时间戳和包序列号等进行同步,整理RTP包顺序,重构视频帧[6]。
2.2.3 系统发送端及接收端的软件实现
发送端所要实现的目标是通过libccrtp软件实现已编码实时视频流的应用层RTP封装然后进行UDP发送,实现代码为:cat pipe|./rtpcat 224.0.1.2 5004。接收端根据RTP包头信息重构视频帧,最后恢复出视频流,代码如下:
./rtprecv 224.0.1.2
2.3 整个系统的实现代码
整个系统使用Ubuntu Linux下的bash进行编写,编码模块以VLC为例,代码如下:
sender:
$ cd myworks/trunk/build/Debug/bin
$ mkfifo pipe
$ sudo route add ?net 224.0.0.0 netmask 240.0.0.0 dev eth0
$ vlc ?vvv v4l2:// :v4l2?vdev="/dev/video0" :v4l2?adev="/dev/dsp " :v4l2?norm=3 :v4l2?frequency=?1 ??run?time 600 ??sout ′#transcode{vcodec=h264,vb=300,scale=1,acodec=mpga,ab=128,channels=2}:std{access=file,mux=ts,dst=pipe}′
$ mplayer ?cache 1024 pipe
$ cat pipe | ./rtpcat 224.0.1.2 5004
receiver:
$ cd myworks/trunk/build/Debug/bin
$ sudo route add ?net 224.0.0.0 netmask 240.0.0.0 dev eth0
$./rtprecv 224.0.1.2
3 结 语
实验结果表明,使用本设计系统进行传输,不仅能够获得较好的图像质量以及较低传输的延时,同时也能够满足实时性应用的需求。本系统具有硬件条件需求低,通用性强等优点,但还存在不足之处之处:由于传输模块设计目标仅为完成基本实时传输功能,故在系统传输的拥塞、差错控制方面没有考虑的太多;本系统采用端到端的设计,并没有把多用户的情况考虑进去。因此,拥塞控制机制以增强接收端解码视频的质量和多点传输的考虑及网络拓扑的支持将是进一步的研究方向。
参考文献
[1] Joint Video Team (JVT). H.264/MPEG?4 AVC reference software manual [R]. London: ISO/IEC, 2005.
[2] WIEGAND T. Overview of the H.264/AVC video coding standard [J]. IEEE Transactions on Circuits and System for Video Technology, 2003, 13(7): 560?576.
[3] 毕厚杰,王健.新一代视频压缩标准:H.264/AVC[M].北京:人民邮电出版社,2009.
[4] 楼剑,虞露.新一代的视频编解码标准:H.264[J].当代通信,2003(5):27?31.
[5] 姜蓉蓉,周建江.基于TMS320DM355的MAV机载视频传输系统的设计与实现[J].电光与控制,2013,20(1):56?60.
[6] 胡鹏.嵌入式的网络视频传输系统的设计与实现[J].电脑知识与技术,2010(22):6321?6323.