随着英特网的普及,人们可以从网络上得到的信息越来越多。以前,人们只能得到文字和一些简单的图形信息,能够得到的视频信息是很少的。造成这种现象的主要原因是视频信息的数据量是非常巨大的,如果想传输它,就必须有很大的网络带宽,而如此大的网络带宽在现实中是需要耗费巨大的成本才能完成的。视频的编码标准就是在这个前提下被提出来的。
视频编码技术到现在为止已发展了很多年了,各种研究机构和标准化组织也已经提出了很多解决办法,但到现在为止视频编码的标准主要分为两大类:一类是国际标准化组织和国际电工委员会第一联合技术组制定的MPEG系列标准;另一类是ITU针对多媒体通信制定的H.26x系列视频编码标准。H.264只是视频编码标准,它对音频方面没有任何的规定,但是它的压缩效率高、图像质量好并且传输码率很低,所以它非常适合于视频的网络传输。
在本文中,首先描述的是设计的硬件系统,它是H.264算法和网络协议对应的C代码运行的平台。核心器件是TMS320 DM642,它是TI公司专门针对多媒体传输或网络视频的监控设计并生产的一款DSP芯片。在此硬件平台下对于EDMA和网络接口的高效使用是极其重要的;其次描述的是H.264编码器的优化。由于H.264算法是极其复杂的,所以要实现视频编码的实时性也就成为一件难事。因此,就必须对代码进行优化,以达到视频序列能够在网络中实时传输的目的;最后描述的是H.264编码码流的网络传输。在此部分主要介绍H.264编码器中的NAL层和RTP传输层的对接,将NAL层的数据按照RFC3984协议的规定对数据进行打包。
1 硬件平台
视频监控系统的硬件是H.264算法和网络传输协议运行的基本硬件平台,图1所示为本系统设计的硬件系统框图。
图1 系统设计的硬件系统框图
设计中用到的RTP协议是主要针对于H.264编码码流进行处理的RFC3984协议。至于UDP和IP,由于,TI提供的各种类型的DSP套件是支持Socket套接字的,所以,在得到RTP层的打包数据后,就可以直接利用套接字对RTP层以后的数据流进行处理。
系统中的TMS320DM642是TI公司C6000系列DSP,它的处理核心是C64x型的高性能数字信号处理器,具有极强的处理性能,这里用的DSP的核心频率是600Mhz。它在使用时具有高度的灵活性和可编程性,而且外围集成了非常完整的音频、视频和网络通信等设备及接口,特别适用于网络视频监控、数字广播以及基于数字视频/图像处理的消费类电子产品等高速DSP应用领域。本系统中用到的外围接口主要有:视频接口、存储器接口、网络接口和串口。
图像A/D转换芯片用的是SAA7115,它负责将模拟视频信号转换成为数字视频信号。NORFLASH用的是spansion公司的Am29LV033C,它的作用是负责永久性的存储完成H.264编码算法和网络传输协议的C代码。在硬件系统刚刚上电启动时,NOR FALSH中引导程序先被加载到DSP内,然后,引导程序被执行,引导程序会将应用程序加载到SDRAM中,最后,应用程序会在SDRAM中被执行。SDRAM用的是三星的HY57V28162 0E,它的作用主要有两个:一是存储要执行的应用程序,二是临时存储要被处理的图像数据。串口在这里主要是辅助调试用的。EMAC接口是非常重要的,它是传输已经处理的H.264编码码流的,这里用的是intel公司研发的LXT971A。
硬件系统的工作过程如下:首先是模拟COMS摄像头采集PAL制式的模拟视频信号。然后图像A/D转换芯片SAA7115HL会将模拟视频信号转换成数字视频信号并传输给TMS320DM642。TMS320DM642中的EDMA控制器会先将从A/D转换器得到的视频图像存储到SDRAM中,等到TMS320DM6 42处理器已经准备好处理图像的时候,再从SDRAM中将图像取出来进行H.264格式的编码压缩。编码完成之后,会得到H.264的编码码流,这个时候,再利用RTP/UDP/IP的协议栈将H.264的编码码流进行逐层打包并通过EMAC接口发送到因特网上。
2 H.264编码器的优化
H.264的编码器是非常复杂的,所以,当我们用C代码实现其功能的时候,往往会面临实时性的问题,即处理器无法在1s内完成所要求的数据处理量。为了使视频远端显示连续,必需使处理器在1s内能够压缩编码并通过网络传输20帧以上的图像。但是,在写出第一版代码时,会发现处理器根本就无法达到要求,在1s钟之内,它只能处理5-6帧的图像,因此就必须对编码器进行优化,以求能够达到实时性。
一般来说,如果在DSP中实现H.264的编码器优化,那么优化过程主要分为四个阶段,分别是算法优化、C代码优化、线性汇编的优化、CCS编译器下的选项优化,它们被顺序的完成。在DSP中实现H.264编码器的优化过程见图2。
图2 在DSP中实现H.264编码器的优化过程框图
H.264的编码算法主要有:帧内预测编码、帧间预测编码、DCT变换和量化、熵编码,其中最消耗时间的是帧间预测编码,它用的时间要占到整套算法运行时间80%左右,因此,帧间预测编码算法的优化也就成为H.264编码器算法优化的重点。
实现编码器C代码的优化,主要是注意在写C代码的时候要写出高效简洁的代码,使在能够保持算法基本功能的前提下,占用的处理器运算资源最少。如果C代码级优化完了之后,还不能满足实时性,就必须用到线性汇编的优化。线性汇编代码是对影响速度的关键C代码进行重写。线性汇编代码与C6000的汇编代码类似,不同的是线性汇编代码并不用像汇编代码那样要给出所有的信息,它可以对这些信息进行一些选择,也可以由汇编优化器确定,如指令使用的寄存器,指令使用的功能单元等,汇编优化器会根据代码的情况确定这些信息,并产生汇编文件。
在优化过程中,一般都会借助于编译器自带的优化功能进行优化。CCS中有优化选项,来帮助我们对代码进行进一步的优化。优化选项共有四个:o0、o1、o2、o3。o0级别的优化内容有:简化控制流图、分配变量到寄存器、进行循环旋转、删除未使用的代码、简化表达式和代码;o1级别的优化除了包括o0的内容外还有:执行局部复制/常量传递、删除未使用的赋值语句、删除局部共有表达式:o2级别的优化除了包括o1的内容外还有:进行软件流水、进行循环优化、删除全局共有子表达式、删除全局未使用的赋值语句、把循环中对数组的引用转变为递增的指针形式、进行循环展开;o3级别的优化除了包括o2的内容外还有:删除未使用的所有函数、内联小的函数、重新对函数声明进行排序、识别文件变量的特征。
3 H.264编码码流的网络传输设计
3.1 H.264编码器NAL层和VCL层的分离
在H.264的编码中,网络抽象层和视频编码层是分开的。H.264编码器NAL和VCL的分层结构如图3。视频编码层负责视频序列的压缩编码,网络抽象层负责使H.264的编码码流能够适应各种网路。这种分层结构可以使设计出来的系统即拥有高效率的编码特性又拥有良好的网络适应性。
图3 H.264编码器NAL和VCL的分层结构
3.2 RFC3984协议的包头格式及使用
图4 RTP固定头字段格式
图4为RTP固定头字段格式,具体描述如下:
版本V:2 bits此处的值为2.
填充标识P:1 bit
如果在分组的末尾包含填充字节,那么此处的值为1,注意,填充并不是有效载荷的内容。
贡献源(CSRC)数目CC:4 bits
标识位M:1 bit
标识位可以用来表示特定层面的某些重要事件。
载荷类型PT:7bits
不同的音视频编码标准对应不同的音视频编码标准,有些已经被完全规定好了,例如G.723音频的RTP载荷类型定义为4,H.263定义为34。对于H.264的RTP载荷媒体类型,目前还没有规定,可以根据需要自行定义。表1描述了媒体类型各种载荷类型。
表1 媒体类型各种载荷类型
序号:16 bits
每发送一个RTP数据分组,序号加1。接收者可以用它来检测分组丢失和恢复分组顺序。
时间戳:32 bits
时间戳反映了RTP数据分组中第一个字节的采样时间。采样时间必须来源于一个单调线性增长的时钟。
同步源SSRC:32 bits
同步源应随机选择,但要确保同一个RTP会话中的唯一性。如果一个源改变了源传输地址,必须选择一个新的SSRC标志符。
4 结束语
本文首先给出了用于运行H.264算法和网络协议的硬件平台,然后介绍了H.264的优化方法,最后在研究了RTP协议RFC3984的基础上介绍了H.264编码码流的网络传输方法。总之,本文主要就是完成H.264编码码流的实时网络传输。由于时间和精力有限,只是用到了RTP协议,为了提高可靠性。还可加入RTCP协议,使其能够得到更好的服务质量。另外,若在此基础上再去研究速率控制和差错控制方法,并应用于本系统,可以进一步提高视频显示质量。
|