冯 浩,管 鲍
(1.武汉邮电科学研究院,湖北 武汉 430074;2.武汉虹信通信技术有限责任公司,湖北 武汉 430074)
衡量无线视频质量的重要指标是流畅性和实时性。无线网络传输的上行带宽有限,传输的视频图像往往容易出现马赛克和延迟等现象。传统的无线视频通信系统主要是单卡的模式,通过一张卡传输。这样利用的网络带宽资源大概在300 kbit/s左右,如果网络状况好可以达到400 kbit/s左右,这样得到的视频图像也容易出现马赛克等现象,不能很好地解决无线网络带宽不足的问题。本文针在双模无线视频通信的基础上,通过高性能的ARM9芯片控制MC8630无线模块,这样将无线网络资源提高到600 kbit/s,如果网络状况好可以达到800 kbit/s左右,很大程度上能避免无线视频传输过程中出现的马赛克和视频画面延时,基本保证了视频的流畅性和实时性。
SIP是一个应用层的控制协议,可以用来建立、修改、和终止多媒体会话的协议。在多媒体通信中完成信令的交互,SIP协议栈主要由eXosip模块、osip2模块、osipparser2模块组成。其中osipparser2主要完成SIP和SDP消息的文本解析器和文本生成器。osip2模块主要实现事务状态机的维护和运行,eXosip模块实现底层socket传送/接收以及上层的数据处理。SIP协议完成会话还需要和SDP协议配合使用,SDP协议是会话描述协议,主要描述会话名称和意图,构成会话的媒体等信息[1]。
实时传输协议(Realtime Transport Protocol,RTP),是针对Internet上多媒体数据流的一个传输协议,由IETF作为RFC1889发布,现在最新版为RFC3550。RTP被定义为在一对一或一对多的传输情况下工作,其目的是提供时间信息和实现流同步。RTP本身只保证实时数据的传输,并不能为按顺序传送数据包提供可靠的传送机制,也不提供流量控制或拥塞控制,它依靠RTCP提供这些服务。RTCP协议负责管理传输质量,在当前应用进程之间交换控制信息,提供流量控制和拥塞控制服务。
本方案主芯片采用TMS320DM368处理器,主频432 MHz,芯片内部集成有DSP处理器,TI开放其DSP接口,可以支持H.264/MPEG-4的高清编解码。CY7C65640A的驱动可以直接参考LinuxUSB的驱动,选择CY7C65640A芯片扩展DM365的USB接口,连接两个MC8630。本系统采用中兴通讯的MC8630芯片,如图1所示。该芯片是1个CMDA20001x/EVDO Rev.A的3G无线模块,上行通信速度理论值为1.8 Mbit/s。由于其资料广泛可以参考该芯片Linux的驱动程序,从而可大大减小软件开发周期,满足应用需求。本文重点阐述软件设计部分[2]。
图1 系统结构示意图
软件设计包括嵌入式软件设计和客户端软件设计。其中嵌入式软件设计包括对MC8630芯片驱动设计和信令交互数据发送软件设计部分。客户端软件设计部分包含解包部分和解码部分。组帧协议如图2所示。嵌入式软件设计按照此协议采集视频数据并按照H.264组帧,通过USB接口将视频数据发送给客户端。客户端接收双模发送过来的数据,并将该数据通过FFmpeg解码库显示播放出来。
图2 组帧协议示意图
其中B代表byte,帧开头以B1C1B2C2来区分。Playload定义8为音频,77为视频。码流类型为:0x01代表H.264压缩,0x02代表MPEG-4压缩,0x81代表G.711压缩,0x82代表G.729压缩,0x83代表MP3压缩。
双卡定义的视频发送策略如图3所示。双网卡分别传送I帧和P帧数据[3]。
图3 视频发包示意图
MC8630作为块设备,该芯片提供Linux内核源码驱动程序,通过移植工作,将该驱动加载到内核当中。经过AT指令配置之后即可使用,当模块状态为可用时,通过Linux块设备操作流程向发送端发送数据。
CY7C65640的驱动设计可以参考通用USB驱动程序设计,大部分配置任务都在驱动程序中完成。驱动程序加载到内核当中,系统上电即可使用[4]。
DM368芯片是ARM+DSP双核结构,利用DSP强大的运算功能,实现对视频信号的编码,编码之后的视频从DSP传送到ARM中,经过组帧协议之后等待客户端的链接,一旦接收到视频请求就将视频发送出去。无线视频服务器还需接收客户端发送过来的云台控制,OSD参数查询和视频分辨力、码率修改等信令。这些信令控制着终端运行的参数。信令的交互采用的是SIP协议,消息体格式采用的是SDP方式或XML方式,通过SDP协议传递RTP视频流信息;通过XML消息体传递云台控制等信息。
当视频服务器接收到客户端发送视频请求SIP信令时,解析SDP消息体,从m参数中获取RTP端口,Playload值等信息,然后调用RTP协议根据指定端口将数据发送到客户端。同时,当视频服务器接收到客户端发送的云台控制等信令时,解析XML消息体,完成对相应结构体的赋值,从而控制着终端运行的参数。
由服务器处理流程得知,应用程序设计包含视频缓冲区设计部分和信令交互部分。视频缓冲区完成采集的数据缓存和视频数据的发送。信令交互部分完成SIP信令交互和RTP信令交互。
4.2.1 视频缓冲区设计
DM368芯片上运行的是Linux实时操作系统,利用Linux线程间通信的同步与互斥机制和Linux信号量机制来实现视频缓冲队列。视频缓冲队列定义结构体如下:
队列相关函数说明包含在sendqueue.c文件当中,QueueInit()函数主要完成缓冲队列的初始化,客户端关掉视频时调用QueueEmpty()函数清空接收队列,客户端申请视频时调用QueueOutput()函数取出队列数据进行发送,接受客户端RTCP统计的丢包率如果丢包率大时调用drop_packet()函数丢包,丢弃P帧和紧随P帧之后的I帧,以降低发送码流。
4.2.2 信令交互部分设计
主程序在完成初始化之后,主动向客户端发送1个SIP注册消息,并开通心跳包线程,每隔2 min发送1次心跳包,心跳包只包含时间信息,客户端接收到心跳包会返回1个心跳包回应,当心跳包线程超过2 min未收到心跳包,则重新注册。与此同时在主程序中开启SIP线程接收客户端发送过来的SIP信令,定义eXosip_event_t*stEvent接收事件,如果该事件类型为EXOSIP_CALL_INVITE,表示客户端视频请求消息,此时调用osipparser2库函数解析SDP的内容,获取RTP发送端口,向客户端的该端口发送RTP数据流。由于RTP库支持1500的包长度,此处传输的长度为1362。同时开启RTP监听线程,监听客户端发送过来的RTCP包,根据收到的包信息,动态调整发送的码流大小,当码流过大时候,此时采取丢包策略调用drop_packet()函数,丢掉P帧和紧随其后的I帧数据。
嵌入式软件设计部分主要处理客户端发送过来的SIP消息、包括云台控制消息、视频请求消息,消息的处理如下:
初始化RTP会话,建立RTP连接,开始发送数据。发送SIP回应消息。
客户端软件设计部分包括解码部分和信令交互部分。
信令交互部分采用的SIP信令控制协议由点击客户端界面按钮来触发,此处用到的SIP格式有MESSAGE消息和INVITE请求。MESSAGE消息用来处理控制消息和视频服务器参数获取、设置消息。INVITE请求用于RTP请求等。消息的组包流程为:1)初始化消息头、设置消息头域的值;2)判断是否带有消息体,带有消息体判断是SDP消息体还是其他消息体,否则进行步骤4);3)初始化SDP消息体,非SDP消息体的时候初始化XML消息体;4)完成SIP字符串的生成,完成SIP协议的发送。其中Content-Type的值是XML的时候设置为application/global_eye_v10+xml。是SDP的时候设置为application/sdp。
举例RTP请求SIP协议发送的例子[5]。
在客户端也要开启SIP监听消息进程,监听线程主要监听CALL消息的回应消息、注册消息和SIP回应消息。客户端获取相应的参数之后,完成界面的更新操作。
客户端采用VC++6.0开发,客户端发送CALL消息申请视频之后,收到SIP的EXOSIP_CALL_ANSWERED回应消息,然后发送ACK,服务器在接收到ACK之后,开始调用RTP协议发送视频流。客户端监听RTP端口接收数据流设置。定义rtp_event*e接收事件,当e->type=RX_RTP时,将双模接收到的数据送入inputdata()函数进行组包解码显示。由于接收的数据是双模发送过来的,则需要对接收的数据进行组包、排序处理。根据RTP包的特性,同一帧的数据时间戳TS相等,RTP小包序列号(seq)是连续的。
1)主任务入口函数
当前链表指向下一个节点;
本文基于TI公司的DM368芯片,采用双卡传输,采用多链路捆绑技术实现视频数据的安全可靠传输,显著提高了无线网络传输带宽[4]。文中信令协议采用SIP协议,视频流的传输采用RTP/RTCP协议,该程序框架具有很好的兼容性,只需要简单的改动就能够组建大的视频监控网络,具有很强的可扩展性,目前该系统已投入使用。
[1]胡栋,刘峰,朱秀昌.实时多模式无线视频传输原型系统的实现[J].通信学报,2006,27(10):110-116.
[2]孙天泽,袁文菊,张海峰.嵌入式设计及 Linux驱动开发指南:基于ARM9处理器[M].北京:电子工业出版社,2005.
[3]尤盈盈.基于嵌入式系统的无线多媒体传输系统终端的研究[D].杭州:浙江工业大学,2005:30-34.
[4]吴长树.一种基于公共移动通信的视频包多链路接收和播放方法:中国,200910241583.6[P].2010-05-12.
[5]翁睿.基于GPRS网络的自适应码率视频传输[D].上海:复旦大学,2008.