RTP时间戳相关

来源:互联网 发布:java断点续传上传例子 编辑:程序博客网 时间:2024/06/06 09:33

通过RTSP建立好会话之后,就可以开始传输RTP数据和RTCP SR包了(用来同步音视频)。

这两者涉及到很重要的问题:时间戳。下面是《rtp_audio_and_video_for_the_internet》上的一个时间图。


TimeStamp的初始值是随即生成的,然后每一帧数据固定增加一个增量,客户端在接收到数据时,根据这个时间戳就能以正确的时间恢复(其中被分包的视频桢是没有时间戳增加的)。RTCP的SR包里面除了这个时间戳,还有一个NTP时间,这是距1900年1月1日的秒数,允许每个系统存在差异,只要同一个系统不同流的该值的生成方式相同就行。以时钟频率为90KHz的视频为例,若其帧率为30帧,则每一帧的时间戳增量为90000/30=3000;RTCP的SR包的时间戳也可以相应计算出来:增量=(现在时间-上一次RTP包发送时间)*单位时间增量,其中单位时间增量=90000*1000000/(2^32),因为SR包中的微秒时间形式是NTP_frac,因此要做“/(2^32)”这样一个转化。


RFC中说时间戳增量需要满足线性增长,实际上没必要严格按照诸如3000增量来增长,我是按照实际的帧的时间间隔来打的这个时间戳:

时间戳 = 上一次时间戳 + 采样频率(典型值为90000)*0.000001 *  两帧时间差(单位毫秒)来计算的