IR-UWB 系统数据链路层高速传输方案设计

2013-03-13 07:02赵丽娟
电子科技 2013年9期
关键词:链路层信令音视频

陈 琛,赵丽娟

(1.陕西省人防(民防)指挥信息保障中心,陕西 西安 710061;2.西安雷信科技有限责任公司 研发部,陕西 西安 710061)

演示系统要求能够在两台计算机之间通过高速UWB 通信设备传输流媒体。发送端通过音视采集设备采集音视频数据,然后通过UWB 通信系统传输,并能够在一定距离之内的另一台计算机上将发送端采集到的音视频数据实时、流畅的播放。其需求分为:

(1)因为UWB 演示系统的物理层是建立在单工通信的模式上的,所以发送端得不到接收端的任何应答消息,通信双方无法进行握手应答。针对这种单工通信,需要设定一种通信协议,来实现并且保证可靠的通信传输。

(2)由于无线UWB 通信系统无线链路的不稳定性,在传输过程中可能会出现丢帧或误码,所以需要设计适合信道传输的数据链路层帧格式,保证传输的可靠性。

(3)由于高速UWB 通信系统具有高数据传输速率,在音视频数据传输与接收端音视频回放过程中,会产生与其速率不匹配的问题。系统需要提高音视频数据处理的速率,保证音视频数据实时、流畅的播放。

1 通信协议过程分析与实现

(1)系统对象和协议流程的分析与实现。

通信协议是指通信双方的一种约定。约定包括对数据格式、同步方式、传送速度、传送步骤、检纠错方式以及控制字符定义等问题做出统一规定,通信双方必须共同遵守。因此,也叫做通信控制规程,或称传输控制规程[1-2]。本文在物理层设备单工通信的要求下,根据协议工程的开发方法,制定了适合无线UWB 通信系统的通信协议。

首先发送信令帧建立发端与收端的通信链路,当通信链路建立成功后,按照协议规定的帧结构发送音视频格式信息与音视频数据。这种协议机制可以完成演示系统的信令传输以及音视频数据传输,建立稳定通信链路,保证收端可以接收到发端音视频数据,并且在接收机上回放。

(2)消息交互过程分析。

根据上述协议流程,以MSC 图的形式给出发送端与接收机之间消息交互的过程,如图1 所示。

图1 信息交互MSC 图

前面曾经提到,因为上层流媒体的传输是基于底层的单向信道,也就是说,发送端向接收机无论是传输信令消息还是音视频的数据消息,接收机无论是接收成功或者接收失败都不会反馈响应信号给发送端,通信双方无法进行握手应答。这样就给建立链路连接以及传输数据带来了很大的困难。本设计采取的解决方案是,发送端每隔一定时间重复发送通信控制信令帧,接收机采用状态机控制接收流程。接收机在某一个状态监听链路,当收到通信链路传来的该状态对应的信令帧时,进行数据处理。若接收机在该状态收到其他的信令帧,接收机不接收该信令帧,将之抛弃,原地等待属于它自己的信令帧。

2 IR-UWB 数据链路层方案的关键技术

(1)多线程控制设计。

流媒体,包括音视频数据是连续的大量数据,需要保证其传输的连续性、可靠性,要求播放数据的流畅性。由于无线UWB 通信系统无线信道自身环境的特点,会使得数据传输突然中断,或者丢失数据帧。这时会中断应用层传输链路,使终端软件死机。终端软件采取多线程控制机制解决这个问题。

线程是进程中的一个实体,是被系统独立调度和分派的基本单位。线程有就绪、阻塞和运行3 种基本状态[3]。当通信链路发生故障时,终端软件会因此被Windows 操作系统挂起,只有人为的在Windows 任务管理器中结束进程,才能退出程序。采用多线程控制机制,当出现这一问题时,接收或者发送线程在等待一定时间后会自动退出,或者通过父线程去中止子线程,终端程序不会终止。这时通信系统会要求重新发送或者接收一帧数据,继续流媒体的传输。用这种方式可以避免因为链路层传输阻塞而导致的程序完全瘫痪。

(2)多信道传输设计。

发送端与接收机双方的控制命令数据量很小,因此PC 端直接调用API 接口通过USB 接口传输设备来发送或者接收信令帧。为了让USB 接口上传输的数据简单化或者说提高传输的效率,程序将音频数据传输和视频数据传输分离,分别为它们创建不同的通信信道。在音视频各自不同的信道上可以同时进行多媒体数据的发送和接收。

演示系统在数据链路层将建立3 个通信信道,它们分别是:

BYTE mSignalChno 用来传输通信信令的信道

BYTE mAudioChno 用来传输音频数据的信道

BYTE mVideoChno 用来传输视频数据的信道

(3)接收状态机控制设计。

状态机是一个有向图形,由一组节点和一组相应的转移函数组成软件开发的形式化方法。状态机通过响应一系列事件而“运行”。每个事件都在属于“当前”节点的转移函数的控制范围内,其中函数的范围是节点的一个子集。函数返回“下一个”(也许是同一个)节点。这些节点中至少有一个必须是终态,当到达终态,状态机停止[4]。

由于UWB 通信系统采用单工通信机制,发送端得不到接收端的任何反馈信号。为解决这一问题,终端程序采用状态机来控制接收流程。终端程序有4 种转换状态,分别是IDLE、CONNECTING、CONNECTED、MEDIAOPENED。

IDLE 表示接收机处于初始化状态。

CONNECTING 表示接收线程首次收到了流媒体数据连接信令,但尚未完成视频回放初始化工作。

CONNECTED 表示主线程完成了视频回放初始化工作,等待流格式。

MEDIAOPENED 设定了流格式,等待流数据。

接收机初始化后处于IDLE 状态,当接收机收到音视频流连接信令帧后,接收机触发媒体数据流连接,且状态由IDLE 状态转换为CONNECTING 状态(由于接收端可能连续收到多次音视频流连接信令帧,为防止造成多次初始化,并且防止接收线程在主线程重初始化过程中,使用Filter 导致出错,增加了CONNECTING 状态)。当媒体数据流建立连接后,接收机构建本地用于接收与播放用的Filter,并将其状态改为CONNECTED 状态。当接收机收到音视频数据格式帧,并且接收机状态为CONNECTED 时,将其状态转换为MEDIAOPENED 状态。当接收机收到音视频数据帧,并且接收机状态为MEDIAOPENED 时,将数据以Sample 的形式传递给下一级Filter 进行渲染与播放。为了避免音频数据和视频数据的相互干扰,演示程序将音频的接收与视频的接收分离。

(4)数据链路层帧结构。

数据链路层的帧格式分为两种:一种是建立通信的信令帧;一种是携带流媒体的数据帧。无论是信令帧还是数据帧都具有同步帧头、帧头、同步帧尾这3 个部分。由于无线UWB 通信系统无线信道的特点,在传输过程中可能会丢失数据。为解决这一问题,给音视频数据加入同步帧头以及同步帧尾,从而保证数据在传输过程中严格帧同步,提高系统性能,减少误码。

帧同步头的格式为:

Const UCHAR pLnkPacketBegin[LEN_LINKSYNHEADER]={0x12,0x34,0x56,0x78};

帧同步尾的格式为:

Const UCHAR pLnkPacketEnd[LEN_LINKSYNEND]={0x09,0x87,0x65,0x43};

帧头格式为:

typedef struct{

BYTE chno;信道号

BYTE type;分组类型

DWORD length;分组PAYLOAD 长度

}PacketHeader,*pPacketHeader

数据链路层通信信令有

cmd_DeviceConfig 传输发送端采集设备配置信息;

cmd_VideoStreamConnect 建立视频流连接;

cmd_AudioStreamConnect 建立音频流连接;

cmd_DisconnectRequest 取消连接。

信令帧格式如图2 所示。

图2 信令帧结构

数据帧格式如图3 所示。

图3 数据帧结构

数据帧携带音视频媒体格式信息,以及音视频数据流。其类型定义如下所示:

组帧函数为:

long conFrame(UCHAR* frame,UCHAR* pAyload,SignalingPack* pSignal,long len,UCHAR cno,UCHAR type)

3 数据链路层传输流程

3.1 信令帧传输流程

如图4 所示,用户在发送端演示程序界面上点击“Call”按钮,程序中定义一个信令帧数据变量sig,发送端调用CallServer()函数发起对接收机的呼叫请求。

图4 发送信令帧流程图

(1)配置信令,将信令消息cmd_DeviceConfig 与发送端设备的配置信息,按照信令帧格式组帧处理。调用接口函数CUSBBase::UsbSnd()将信令帧通过USB接口设备向接收机发出。若发送错误,则在应用层显示界面提示用户发送失败,请用户重新发送。

(2)视频连接信令,将信令消息cmd_VideoStream-Connect 按照信令帧格式组帧。调用接口函数CUSBBase::UsbSnd()将信令帧通过USB 接口设备向接收机发出。

(3)音频连接信令,将信令消息cmd_AudioStreamConnect 按照信令帧格式组帧。调用接口函数CUSBBase::UsbSnd()将信令帧通过USB 接口设备向接收机发出。

3.2 音视频数据帧发送流程

音视频数据帧发送流程如图5 所示。

图5 音视频数据帧发送流程图

判断发送端是否发送过流媒体的格式消息,若没有发送过,说明没有建立通信链路,这时发送一次信令帧与音视频格式帧,建立通信链路。然后每发送10 帧音视频数据,重复发送一次信令帧与音视频格式帧,确保单向通信链路的畅通。

判断当前传输的流媒体格式,如果是视频格式数据,则将视频格式数据组帧,调用USB 接口CUSBBase::UsbSnd()在视频传输信道上传输。如果是音频格式数据,则将音频格式数据组帧,调用USB 接口CUSBBase::UsbSnd()在音频传输信道上传输。发送端将流媒体格式数据发送成功后,同理按照上述机制向接收机传输视频、音频数据。

3.3 音视频数据帧接收流程

音视频数据帧接收流程如图6 所示。

图6 音视频数据帧接收流程图

当接收机的本地音视频Filter 构建完成后,将用于USB 连接的句柄mpUsbFrame 通过Filter 的公共接口设置给USB Receiver,启动接收线程CUSBBase::XferInloop(),监听视频传输信道,接收视频数据,同时将接收机的状态更改为VIDEO CONNECTED,表示主线程完成了视频回放初始化工作,等待视频流格式数据。再将mpUsbFrame 设置给发送本地视频数据的USB Sender。使得USB Sender 与USB Receiver 都指向mpUsbFrame。同理,实现音频数据的接收。

4 结束语

IR-UWB 物理层通信设备只能进行单工通信。为了支持该通信模式,本文给出了IR-UWB 演示系统数据链路层通信协议设计方案及音视频数据传输方案。实现了在两台计算机之间通过高速UWB 通信系统传输流媒体。

[1] CHEN K.Performance evaluation and enhancement of the CSMA/CA MAC Pro-tocol for 802.11 wireless LAN[C].TaiPei,Taiwan:Proc IEEE PIMRC,1996.

[2] 谢希仁.计算机网络[M].4 版.北京:电子工业出版社,2005.

[3] WILLIAM S.操作系统-精髓与设计原理[M].陈渝,译.5 版.北京:电子工业出版社,2006.

[4] 古天龙.软件开发的形式化方法[M].北京:高等教育出版社,2005.

猜你喜欢
链路层信令音视频
基于多空间内存共享的数据链路层网络包捕获方法
Microchip推出首款车载以太网音视频桥接(AVB)全集成解决方案
卫星网络中的TCP 跨层技术研究
一种基于PCI接口的1394B总线的设计与实现
SLS字段在七号信令中的运用
3KB深圳市一禾音视频科技有限公司
移动信令在交通大数据分析中的应用探索
WIFI音视频信号传输的关键问题探究
基于信令分析的TD-LTE无线网络应用研究
高速公路整合移动音视频系统应用