实现主设备和备用设备倒换后RTP流连续性的方法 【技术领域】
本发明涉及数据通讯领域,特别涉及一种实现主设备和备用设备倒换后RTP流连续性的方法。
背景技术
RFC1889规定的实时传输协议(,Real-Time Transport Protocol简称RTP)提供了实时信息的端对端传输业务,如交互的语音和图象;这些业务包括负载类型识别、序列编号、加入时间标志及传输监视。典型的应用是在用户数据报协议UDP(User Datagram Protocol)层上传输RTP包,实现IP电话或传真等。一个典型的RTP传输语音的应用如图1所示。
RTP协议报文头的格式如表1所示:
表1 RTP协议报文头0 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0V=2 P X CC M PT sequence number timestamp synchronization source(SSRC)identifier contributing source(CSRC)identifiers
SSRC域是一个32位的随机数,用来唯一标识一个RTP流的发送端。体现实时性的两个域为sequence number(16位)和timestamp(32位),它们的含义如下:
sequence number(序列号):发送端每发送一个RTP包,序列号累加1。接收端可以据此检测包损和重建包序列。序列号的初始值是随机的(不可预测)。
timestamp(时戳):时戳标识RTP数据包中第一个字节的采样时刻。采样时刻必须由随时间单调线形增长地时钟得到,以进行同步和抖动计算。时钟的分辨率必须满足要求的同步准确度,足以进行包到达抖动测量。若RTP包周期性生成,时戳可以使用由采样时钟确定的额定采样时刻,而不是读系统时钟。例如,对于固定速率语音,时戳可以每个采样周期加1。若语音设备从输入设备读取覆盖了160个采样周期的数据包,那么这个数据包中的时戳增加160,无论此数据包被发送还是被静音压缩。时戳的起始值也是随机的,如同序列号。
这两个域在接收方被用来确认RTP包的连续性,时戳随时间的等间隔增加,表示RTP包是发送方均匀采样得到的,并且按照时间顺序连续发送到接收方。
如果发送端设备发生了重启或者主设备和备用设备倒换,那么发出的同一个RTP流(即SSRC相等)的数据包的timestamp就有可能发生突变,造成接收端无法正确处理RTP报文。反之,如果在主设备和备用设备倒换前后,同一个RTP流(即SSRC相等)的数据包中的时戳和序列号是连续的,接收端就会正确处理。
【发明内容】
本发明的目的在于提供一种实现主设备和备用设备倒换后RTP流连续性的方法,通过本发明实现发送端在主设备和备用设备倒换发生后同一个RTP流的时戳和序列号与倒换前连续,从而保证接收端能正确处理RTP报文。
本发明采用主设备和备用设备同时运转,使该主设备和备用设备至少进行下述步骤:
A、主设备和备用设备启动后,根据主设备的系统时间和设备通讯的时延确定备用设备的系统时间;
B、主设备建立RTP流后至少将RTP报文中的同步源标识(SSRC)和时戳起始值发送给备用设备,由备用设备保存;
C、主设备倒换到备用设备时,备用设备根据继续主设备发送RTP流时的系统时间和时戳起始值计算出使倒换前后RTP流保持连续的时戳,并依据该时戳及同步源标识发送RTP流
根据上述技术方案:
主设备和备用设备至少时钟精度和处理性能相同。
备用设备的系统时间和主设备的系统时间误差不大于系统RTP包的发送时间间隔。
同步源标识可以是任意生成的随机数,时戳为主用设备系统时间的毫秒数。
步骤A进一步包括下述步骤:a.备用设备主动向主设备申请系统时间;b.
主设备向备用设备下发自己的系统时间;c.备用设备根据主设备的系统时间
和设备通讯的时延设定自身的系统时间。
主设备和备用设备间定时进行系统时间校准。
步骤B中主设备还将发送RTP流的序列号初始值发送给备用设备保存;步骤C中备用设备根据该序列号初始值计算出当前RTP包的序列号值。
步骤C中备用设备计算时戳包括步骤:a.根据时戳起始值、备用设备继续主设备发送RTP流时的系统时间和系统RTP包的发送时间间隔计算出主设备倒换前已发送RTP包的数量;b.根据时戳起始值、倒换前已发送RTP包的数量和系统采样频率计算出时戳;c.根据序列号起始值和已发送RTP包的数量,计算出序列号。
序列号起始值可以是任意生成的随机数。
本发明方法的效果是:利用发送端主设备和备用设备协同工作,主设备倒换到备用设备后进行时戳平滑计算,使得接收端得到连续的RTP流。
【附图说明】
图1为RTP传输语音示意图。
【具体实施方式】
本发明要求RTP流发送端有主设备和备用设备同时在上电运转,至少保证两设备的处理性能和时钟精度相同,最佳方案为软硬件系统完全相同。主设备做业务处理,发送和处理RTP报文时,备用设备不做业务处理,但与主用设备实时交互信息。
本发明的实现包括下述步骤:
1)根据主设备的系统时间和设备通讯的时延确定备用设备的系统时间。
主设备和备用设备启动后,备用设备主动向主设备申请系统时间,根据主设备的系统时间和设备通讯的时延设定备用设备的系统时间。经过反复的时间校准过程,使主设备和备用设备的系统时间误差小于RTP包的发送时间间隔Δt毫秒。为了保证时间的精确,主设备和备用设备间可以定时进行时间校准。
系统时间可以是设备上电以后的毫秒数,也可以是相对于某个公元标准时间的毫秒数差值。只要主设备和备用设备间统一定义并校准就可以了。
2)主设备建立RTP流后至少将RTP报文中的同步源标识(SSRC)和时戳起始值发送给备用设备,由备用设备保存,使主设备和备用设备信息保持同步。
主设备在建立一个RTP流后,选用随机数作为SSRC标识。在发送第一个RTP包时,取系统时间的毫秒数,作为时戳,假定时戳起始值为T1。同时,主设备发送SSRC标识信息和时戳起始值T1到备用设备,由备用设备记录这些信息。
考虑到不同网络厂商设备之间的互通,有些设备对RTP流连续性的检测同时需序列号。因此,最佳的方案是主设备将序列号起始值也发送给备用设备保存。序列号的起始值为一随机数。
3)主设备倒换到备用设备时,备用设备根据继续主设备发送RTP流时的系统时间和时戳起始初值计算出使倒换前后RTP流保持连续的时戳,即进行时戳平滑计算,并依据该时戳及同步源标识发送RTP流。对需要序列号对设备同时还计算出序列号。
主设备上,每发送一个RTP包,时戳等间隔的递增,序列号加1。假定时戳起始值为T1,语音包的采样次数(系统采样频率)为F次/秒,语音包的打包时长为Δt毫秒,那么按照时戳的含义,RTP流中第N个包的时戳为:
T1+(N-1)×F×Δt/1000 (式1)
其中:N是从1开始的自然数。由于RTP包的发包间隔就是Δt,所以上式的实际意义是,每发送一个RTP包,时戳增加F×Δt/1000。
当主设备故障,备用设备开始业务处理时。继续主设备发送某一个RTP流时的系统时间的毫秒数为T2,那么它的时戳可以通过下式计算获得:
T1+〔(T2-T1)/Δt〕×F×Δt/1000 (式2)
由于每发送一个RTP包序列号加1,所以序列号可以通过下式计算获得:
S1+〔(T2-T1)/Δt〕 (式3)
式2和式3中的中括号是取整的意思,也就是计算出这个流发送了多少个RTP包。备用设备利用计算出的时戳和序列号继续主设备发送RTP流,这样在接收方看来,这个RTP流就是连续的了。