基于SIP的H.264视频电话终端设计
扫描二维码
随时随地手机看文章
1 引 言
视频电话终端系统的实现是个很复杂的过程,涉及多方面知识。其目的是利用互联网或固定电话网等为彼此通讯的双方不但能提供实时的语音交流而且可以实现视频信息的即时传输。由于丰富的视频数据和网络可用带宽的矛盾,视频电话的发展经历了漫长的发展过程,早在上世纪20年代就有人对他进行探索和研究。
SIP(Session initiation Protocol)[1]协议是IETF于1999年提出的一种新的网络多媒体通信的交互信令,他相对于市场主体的H.323协议具有简单、扩展性好、便于实现等优点,但当构建电信级的大网时也相当复杂,此协议也在不断的补充和完善中[2]。目前市场上出现越来越多支持SIP的智能多媒体终端及相关软件和软交换设备,SIP将成为IP视频电话业务的主流协议之一。
H.264视频编码标准[3]与其他视频编码标准如H.263,MPEG-4等相比,其更高的压缩效率和网络亲和性的优点正是视频电话及其各种应用所需要的。
本文基于SIP协议、以H.264为视频编码标准、采用TI的高速数字信号处理芯片TMS320DM643和三星的ARM9芯片S3C2410为主体设计并实现了一款视频电话终端。
2视频电话终端的硬件系统设计
视频电话终端依据其使用方式的不同,大体上可分为"PC到PC"型和"电话到电话"型2大类。"PC到PC"型产品适合计算机用户,如MSN,QQ视频等,主要依赖用户双方的计算机加上合适的软件实现。"电话到电话"型产品两端都不需要计算机,电话终端本身包含音视频处理器及相应的软件完成音视频即时通讯功能。由于此类产品使用简单、安装方便、便于控制、性价比合珲等优点,市场前景广阔,是目前国内外研究的热点。他实现的方案有多种,如采用DSP,ARM芯片,专用的会议电视芯片等。考虑到生产成本、实现的难易程度、货源、市场推广、产品的升级更新等因素,本文确定的视频电话终端系统的硬件方案为:使用TI公司的通用DSP芯片TMS320DM643利用纯软件实现音视频编解码、用三星的ARM9芯片S3C2410实现各种接口、嵌入式操作系统和传输控制协议等。这样既不存在芯片多成本高的问题,又能保持很高的性能,可通过简单的程序下载实现软件升级或增加新的编解码标准。系统的硬件结构框图如图l所示。
系统硬件主要由TI公司的TMS320DM643和三星公司的S3C2410组成。其中TMS320DM643完成音频压缩编解码G.711/G.729/G.723.1和视频压缩编解码H.264;S3C2410完成SIP协议和嵌入式OS及各种接口如RS232、复合视频输入/输出、数字CCD摄像头、LCD、RJ45、以太网、键盘等。音频信号的输入/输出通过TI公司的TLV320AIC23送入TMS320DM643进行压缩编码。
3视频电话终端系统的软件设计
3.1 系统软件结构
在系统硬件完成后,剩下的需要大量丁作来编写代码实现各个功能模块,最终实现整个系统。系统的软件结构如图2所示。嵌入式OS是采用ARM-Linux内核,硬件驱动模块主要是基于ARM 9的介于硬件和Linux内核之间的软件接口,为特定的硬件响应定义好编程接口从而操作硬件,这2大模块的技术目前已相当成熟,相关的文献非常多;音频编码采用G.711/729/723.1,是为了让终端能适应音频编解码的非对称操作,有良好的兼容性,他可直接选用TI公司第三方提供的语音开发软件包。本文根据视频电话终端的特点和当前实现的技术难点主要讨论视频编码H.264和SIP协议栈2大核心技术的硬件实现。
3.2 H.264的实现
H.264视频编码标准虽然在设计时考虑到各种不同的应用和传输环境,其高的压缩效率和网络亲和性是以大的运算量为代价的,而在视频电话应用中虽然带宽有限却实时性要求高,所以考虑到实现的难易程度和技术本身必须对H.264编码方案进行精心选择(这里理所当然选用基本级),在利用DSP芯片实现时对程序要进行优化[4]。这里用C语音编程,利用TI公司的集成开发环境CCS2.2进行开发和调试,为了降低H.264编码算法的复杂性,适合视频电话的实时应用,主要从一下几个方面对其进行优化:
(1)运动估计算法的简化
在视频编码中,运动估计算法起着非常关键的作用,通常约占一个压缩方案总计算量的60%以上,所以这里采用一种快速的运动估计算法来降低运算复杂度[5]。在H.264编码标准中根据宏块(MB)的不同划分方式其对应的预测误差不同的特点,将编码模式简化为4组,先根据预测误差判断当前MB属于哪一组,然后在用拉格朗日率失真算法选取该组中最佳的编码模式,根据文献[5]的实验结果,这样做编码时间会缩短3倍左右而解码后图像的PSNR只有略微下降(最坏的情况不会超过0.5 dB)。对于帧内预测,如从预测块P的9种可选预测模式选取使P块和当前编码块I之间最小的预测模式也太费时间。对I帧中每个4×4编码模式的概率进行计算,只选取其中出现概率最高的4种模式用于帧内预测[6]。
(2)对程序结构进行优化
首先对程序中的条件判断语句、循环语句和函数调用等进行优化调整减少这类耗费较多时钟周期的指令。对视频数据的变换和逆变换、SAD的计算、运动预测的计算等尽量使用软件流水线。其次利用CCS2.2中C编译器提供的优化选项对程序进行优化,并对程序中浪费时间较多的代码用汇编优化器来优化这些代码。
(3)优化存储器 由于视频数据量较大,对数据的存取浪费的时间较多。这里使用DMA方式进行数据的存取以减少存储器延时,即在CPU对数据处理前用DMA方式将所需数据传送到内部缓存中,这样不但节约处理时间还便于使用软件流水线。
3.3 SIP协议的实现
基于SIP的通信协议有多个开源版本,本文采用OS-IP2(V2.2.2)[7]。OSIP2使按照RFC3261(SIP)和RFC2327(SDP)标准并使用标准C编写的一个公开源码的免费协议栈。其结构简单小巧,专注于底层解析,效率较高。Osip2协议栈大致可以分为3部分:SIP协议的语法分析、SIP协议的过程分析和协议栈框架。
(1)SIP协议的语法分析
支持RFC.3261和RFC3265定义的SIP协议消息,包括INVITE,ACK,OPTIONS,CANCEL,BYE,SUB-SCRIBE,NOTIFY,MESSAGE,REFER和INFO等。不支持RFC3262定义的PRACK。遵循RFC3264关于SDP的offer/answer模式。带有SDP的语法分析。支持MD5加解密算法,Authorization,www_authenticate和proxy-authenticate等。
(2)SIP协议的过程分析
基于RFC3261,RFC3264和RFC3265的SIP协议描述过程,围绕transaction这一层来实现SIP的解析。Transaction是指一个发送方和接收方的交互过程,由请求和应答组成。请求分为Invite类型和Non-Invite类型。应答分为响应型的应答和确认型的应答。响应型的直答是指这个应答仅代表对方收到请求。请求经过处理后都必须返回确认型的应答。响应型的应答有1xx,确认型的应答包括2xx,3xx,4xx,5xx和6xx。一个transaction由一个请求和一个或多个响应型应答、一个确认型应答组成。Transaction根据请求的不同和发送/接收的不同可以分为4类:ict(会话邀请的发起方)、nict(非邀请会话的发起方)、ist(会话邀请的接收方)和nist(非邀请会话的接收方)。
(3)协议栈框架
主要有3部分:底层套接字接收/发送,模块问通信管道,上层调用api接口。OSIP2并不实现底层套接字的接收俊送,其由eXOSIP实现,现在只支持UDP的链路连接。
本文利用下载的用C语言编写()SIP2源码在LINUX环境下编译后下载到ARM9 芯片S3C2410中。
4结语
根据以上的设计,研制了一套视频电话终端样机,完成的功能有:具有以太网,RJ45,JTAG,数字CCD摄像头、键盘和复合视频输入/输出、以语音输入/输出接口,支持音视频双向同步传送,在固话网和Internet网上测试,CIF格式视频传送率25帧/s,支持G.711/G.729/G.723.1语音编码。
本文设计的视频电话终端就目前来说市场化每台成本能控制在1500元以下,因采用通用的DSP芯片和ARM芯片,对产品的进一步神经非常方便,只需更改相关软件即可。
通过Internet或固话网实现语音和视频传输的应用需求越来越多,技术应用也将趋于成熟,视频电话机随着费用的降低也将走入千家万户,具有广阔的市场前景。