RTP时间映射及同步

RTP包中的时间戳字段是说明数据包时间的同步信息,是数据能以正确的时间顺序恢复的关键。时间戳的值给出了分组中数据的第一个字节的采样时间。为了计算各个数据流的播放时间以及同步处理,仅有RTP包中的时间戳信息是不够的。

在整个播放过程中,包括这样几种时间,1)RTP包中的rtp time

                                                           2)PLAY请求的Response中的rtp time和npt

                                                           3)RTCP的SR中的rtp和ntp时间戳对

一、时间戳映射关系

首先介绍PLAY请求的Response里的两个域:

(1)npt

npt顾名思义Normal PLay Time,正常播放时间,指出了流相对与播放开始时的绝对位置。播放开始时的之间定义为0.0s。这个特殊的常量now被定义为现场事件的当前时刻。“now”常数允许客户端请求接收实时反馈而不是存储或者延时的版本。因为对于这种情况而言,既没有绝对时间,也没有 0 时间,所以需要该参数。

(2)rtptime

rtptime是发送PLAY请求后将收到的第一个RTP包的时间戳值。

npt和rtptime的区别在于npt是影片开始的相对时间,而rtptime是会话开始的相对时间。因此在client端,需要对这两者进行map处理。

在client端计算播放时间戳的公式如下:

nptUs = (current_rtpTime - start_rtptime) / scale + srart_npt;

其中:

start_rtptimesrart_npt分别是PLAY请求的Response中的rtptime和npt。

current_rtpTime是当前收到的RTP包头中的rtp time。

scale为PLAY请求的Response中的scale值。在正常播放的情况下为1,快速播放时大于1,当处于反向扫描模式时小于-1.

二、媒体间同步方法

上面的处理仅仅实现了媒体内的同步,在实现媒体间同步时,还需要进行其他的处理工作。这就需要用到RTCP的SR。在SR中包含一个<rtp,ntp>时间戳对,通过这个时间戳对可以将音频和视频准确的定位到一个绝对时间轴上。

<rtp,ntp>时间戳对的必要性在于不同流的 RTP 时间戳有不同的随机偏移量,因此无法直接进行同步。

<rtp,ntp>中的ntp是网络时间协议格式表示的绝对时间值。

<rtp,ntp>中的rtp与数据包中的 RTP 时间戳具有相同的单位和偏移量,但在大多数情况下此时间戳不等于任何临近的 RTP 包中的时间戳。

根据不同stream中的<rtp,ntp>时间戳对,可以将一个stream中的时间戳值映射为另一个stream的时间戳值,从而实现媒体间的同步。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值