采样率计算方法
1.音频RTP包时间戳增量计算,设为x
2.计算封包间隔,取200包时的时间,然后/200即得封包间隔y
若采样率为a(Hz),则有 a / 1000 * y = x;
如果封包时间是20ms,而采样率是8000Hz,则每一块的时间戳递增是160
时间戳是怎么计算的呢?
对于语音来讲,时间戳是封包间隔和采样速率的乘积的递增的,
比如,如果封包时间是20ms,而采样率是8000Hz,则每一块的时间戳递增是160,
即使由于某些原因包被丢弃,另外要注意的是,真实的采样速率和预定的速率有一些小的变化,
但是发送着一般没有可靠的办法察觉这些区别。
对于视频来说,时间戳的生成依赖于应用程序是否能够分辩其帧数。
如果能够分辩帧速率,则时间戳可以使用一个固定的速率增加,
如对于30f/s的视频,时间戳就每一帧增加3000,而对于25f/s的视频就增加3600f/s,
如果一个帧被几个RTP包携带,则这些包应该有相同的时间戳。
而如果应用程序并不能够识别帧数或者采样是变化的,现在很多编码器都是这样做的,
那么时间戳就必须由系统时钟来获得,如gettimeofday()。
时间戳的处理
时间戳字段是rtp首部中说明数据包时间的同步信息,是数据能以正确的时间顺序恢复的关键。
时间戳的值给出了分组中数据的第一个字节的采样时间 (sampling instant),
要求发送方时间戳的时钟是连续、单调增长的,即使在没有数据输入或发送数据时也是如此。
在静默时,发送方不必发送数据,保持时间戳的增长,
在接收端,由于接收到的数据分组的序号没有丢失,就知道没有发生数据丢失,
而且只要比较前后分组的时间戳的差异,就可以确定输出的时间间隔。
rtp规定一次会话的初始时间戳必须随机选择,但协议没有规定时间戳的单位,
也没有规定该值的精确解释,而是由负载类型来确定时钟的颗粒,
这样各种应用类型可以根据需要选择合适的输出计时精度。
在rtp传输音频数据时,一般选定逻辑时间戳速率与采样速率相同,
但是在传输视频数据时,必须使时间戳速率大于每帧的一个滴答。
如果数据是在同一时刻采样的,协议标准还允许多个分组具有相同的时间戳值。