在线咨询: 点击这里给我发消息

负责人:郝先生
电话:010-82345725
010-62973161-6008
邮箱:sales@sokuda.com
传真:010-62973161-6100
主页 > 企业博客 > 公司新闻 > RTP协议在IP会议电话系统中的应用
RTP协议在IP会议电话系统中的应用
发布日期:2015-12-14 15:00    浏览次数:     作者:admin    

RTP协议在IP会议电话系统中的应用

  IP网络电话泛指在以IP(Internet Protoco1)为网络层协议的计算机网络中进行语音通信的系统,它采用的技术统称为V0IP( r0ice over IP)【1l。如今IP电话已成为因特网多媒体通信的一个典型业务,其中基于IP的会议电话系统更具有组网和管理方便灵活的特点,有很好的应用前景。本文对多媒体实时输协议RTP/RTCP[2J进行了深入的研究,使用开放源代码的RTP库JRTPLIB进行RTP实时流媒体编程;采用客户端一服务器模式,实现了局域网内IP会议电话实时语音传输,并在此基础之上实现了IP会议电话功能。

  1 基于IP的会议电话系统设计概述

  使用PC机作为IP会议电话的语音终端,用户之间的互相连接通常可采用两种方法,见图1。第一种方法是客户端~服务器模式:各客户端通过服务器互相连接。这种连接方式常见于大型音频视频会议系统,其优点是软件控制简单,用户连接方便;缺点是需要专门构建一个服务器。第二种方法是客户端一客户端模式,各个客户端之间只要知道对方的IP地址就可以互相连接,不需要服务器,即每台计算机既是服务器又是客户端,其优缺点与前一种

  方案相反。

  

yi yi

  本文采用客户端一服务器模式,在局域网内基于PC机设计和实现一套实时会议电话系统。其中客户端提供用户界面、实时语音传输和工作方式控制功能;局域网内的公共服务器负责建立连接,实时记录和更新各个终端的工作状态,实现对终端的管理:服务器还完成会议功能,包括建立并维护会议通话群,实现多方通话的语音合成等。

  2 RTP TCP(实时传输协议/实时传输控制协议)及其实现

  由于IP会议电话技术属于分组语音通信的范畴,分组网络传送实时音频、视频的能力较差;故需要为系统选择合适的多媒体实时流网络传输协议,以保证语音的连贯性。RTP/RTCP(实时传输协议/实时传输控制协议)是一套基于会话层的实时连续媒体传输协议,该协议包括RTP和RTCP两个部分;其中RTP负责传输实时数据,RTCP协议负责接收方和发送方交换控制信息。RTP包由具有固定格式的包头和数据部分组成,RIP 包头的定义格式如图2所示:

  

er yi

  RTP数据包头中较为关键的字段有:

  序列号(SequenceNumber)16bit,每发送一个RTP数据包,序列号加1。接收端根据I P包的序列号来对包进行排序。时间戳(TimeStamp)反映了I 数据包中第一个比特的抽样瞬间,若RTP包周期性生成,则可以使用由抽样周期确定的额定抽样瞬间代替系统时钟。序列号和时间戳在通信过程中实现下述功能[6]:实现R1]P数据包的正确排序、丢包判断、进行

  同步和抖动计算。

  同步源识别符(SSRC)用以识别同步源;SSRC标识符随机生成,在同一个I 会话期中没有任何两个同步源有相同的 C识别符。

  贡献源识别符(CSRC)用于识别在此RTP包负载中的有贡献源,识别符的数目在cC(CSRC计数)域中给定。在会议电话过程中,若由多路语音合成产生新的语音数据包,则所有源的SSRC标识符都被在此陈列,以便在接收机处正确指示交谈者。

  RTP 数据包头中的版本号(Version)、填充指示(Pad)、扩展位(eXtend)、标志(Mark)、负载类型(PayloadType)等域的具体含义可参见RFC3550 (2)。

  RTP协议本身不提供流量或拥塞控制,它依靠RTCP提供这些服务。RTCP是RTP的伴随协议,RTCP信息由若干堆栈式的包组成,每个包有其自己的类型码和长度指示,格式和RTP数据包类似。常用的RTCP包包括:发送方报告(SR);接收者报告(I );源描述包(SDES)等。RTCP包中含有已发送的数据包数量、丢失的数据包数量等统计资料,服务器可以利用这些信息完成QoS监测、制定流量控制策略和会话控制策略。

  本文使用RTP协议实现了IP会议电话系统的实时语音传输。RTP协议的实时传输模块运行在LK)P传输协议之上,可以直接利用LK)P提供的多点投递和数据校验等功能。其数据装载格式如图3所示:

  

san yi

  应用程序开始一个RTP会话时需使用两个LK)P端口:一个给RTP,一个给RTCP。RTP/RTCP实时传输的关系如图4:

  

si yi

  本文以开放源代码的RTP库JRTPLIB(4)为基础进行RTP实时流媒体编程。JRTPLIB使用C+

  +语言和面向对象的技术实现,提供了三个主要的类供开发者实现RTP/RTCP协议:类RTPSeSSion,主要负责会话的建立、取消,数据的发送、接收,会话管理,本地信息维护等功能;类RTPPacket,主要负责某个数据包相关信息的获得,如净荷,时间戳等;类RTPSourceData,主要负责维护会话参与者的相关信息,如SSRC,RTCP统计数据。

  调用JRTPLIB进行RTP数据的发送时,工作流程如图5:

  

wu yi

  RTP数据包的发送目标保存于发送目标列表,可以一次加入多个,每个发送循环都会向所有目标发送RTP数据包。利用类RTPSession的成员函数可以实现发送参数设定功能。发送过程中的RTCP数据统计工作是在JRTPLIB库内部完成的,并由JRTPLIB自动判断以及发送SR(发送者报告)。

  调用JRTPLIB实现数据接收的工作流程如图6:

  

liu yi

  在接收RTP数据过程中,每次接收到一个新的源发来的数据包,JTRPLIB会将这个源的IP和端口信息存入会话参与者列表。利用类IHPPacket的成员函数可以得到RTP数据包各个域的值,如负载类型标识、时间戳、序列号等、同步源标识等信息。应用程序可利用这些信息尽可能地解决语音实时传输过程中不可预测的延迟、抖动等问题。将RTCP报告交由RTCP报告统计模块,以及发送接收者报告(RR)的工作同样是在JRTPLIB库内部完成的。利用RTCP提供的传输监控服务,可大大提高RTP对网络的自适应能力。

  3 RTP协议在IP会议电话系统中的应用

  本文中系统设计的IP会议电话包括两种方式:广播形式和讨论形式。

  广播形式的会议是通过服务器将单个会议发言人的语音信号发送到所有会议成员客户端。在此过程中,发言客户端的语音数据通过RTP实时传输协议传送到服务器,服务器直接将承载着语音数据的RTP数据包透明传输到所有会议成员客户端;会议成员客户端在JRTPLIB基础之上实现RTP数据顺序接收,RTP包头中的SSRC字段可以用来标示语音数据源信息。讨论形式的会议允许多个客户端同时发言,在这种工作模式下,多个发言客户端A1至An通过RTP协议,实现到服务器的实时语音传输;服务器将从多个数据源接收到RTP包分别拆解,得到实时多路音频数据,然后进行实时会议混音处理;会议混音采用线性衰减叠加的方法防止音频信号叠加后可能出现的溢出。服务器将混音合成后的音频数据作为RTP包的净荷,重新组织RTP数据包;混音数据RTP包头中的CSRC字段标示该RTP包负载中的有贡献源。服务器通过IP协议将组好的新RTP包广播发送到会议的所有成员客户端,如图7所示。

  

qi yi

  上述两种形式的会议过程中,基于RTP的语音实时传输是保证会议通话质量的一个关键环节。在JRTPLIB基础之上实现RTP数据顺序接收后,不论是客户端还是服务器,都需要考虑语音的防抖动处理。本文通过设置静态抖动缓冲区实现去抖动,当会话开始时,接收方延迟回放。接收端将语音包根据RTP序列号和时间戳排列在缓存队列中,当缓冲语音数据到达预先定义的阈值K时,开始进行回放。数据回放时,数据分组继续到达。如果数据分组有抖动延迟,回放可继续保持K时间单位不被打断。

  ITU—T建议电话业务的时延应小于或等于300ms,综合考虑局域网传输时延以及音频数据编解码时延,本文设置阈值K为100 Ins,能较好地去除抖动,且不影响听觉效果。

  客户端的语音数据回放过程是:引入定时器,每20ms定时向声卡设备写入语音数据,当缓存队列为空,即100 Ins的阈值K不足以消除抖动时,可重复读取上20ms数据,或加入舒适噪声。

  工作于讨论会议模式下的服务器同时接收并分路缓存多路RTP语音数据,为了尽量减小延时,设计其语音数据回放过程是:当有一路数据缓存到达阈值K时,即开始数据回放:将该路语音数据每20ms定时输出到会议混音模块;在此过程中,当每次定时器溢出时,其他陆续缓存到达阈值K的各路数据加入混音的过程,直至所有各路语音均开始回放。在回放过程中,若出现某路语音数据缓存区为空,则混音模块读取该路语音的上20ms数据,或加入舒适噪声。