时间戳计算理解

发送数据时需要设置的时间单位:时间戳单位(timestamp)时间戳增量(timestamp increment)

时间戳单位:时间戳计算的单位不为秒之类的单位,而是由采样频率所代替的单位,这样做的目的就是为了是时间戳单位更为精                            准。比如说一个音频的采样频率为8000HZ,那么我们可以把时间戳单位设为1/8000。
时间戳增量相邻两个RTP包之间的时间差(以时间戳单位为基准)
时间戳以赫兹的倒数为单位,即1秒有赫兹个时间戳

时间戳增量 = 一帧所需的时间 X 赫兹
       如何设定时间戳之间的增量呢?
       按照刚才时间戳单位来看,1秒钟按照时间戳单位就是8000,那么一秒钟如果可以播放20帧,也就是发送20帧(帧率),那么可以求出相邻两帧之间的时间差,也就是时间戳增量,那么显而易见是用8000/20,那么这个时间戳增量就为400.
       网上大多数列举的一个例子是: 

        例如MPEG,每帧20ms,采样频率8000Hz,设定时间戳单位1/8000,而每个包之间就是160的增量
    这里又该如何理解呢?可以轻易地看出增量是直接8000与20ms相乘的结果,我们可以知道这里两帧之间的时间为20ms,也就是0.02s,这个单位是以秒来衡量的,那么我们要用时间戳单位来表示那么就是8000*0.02=160.所以时间戳增量为160.

        还有一点为什么一般都用90000作为视频采样频率呢?
        90k是用于视频同步的时间尺度(TimeScale),就是每秒90k个时钟tick。为什么采用90k呢?目前视频的帧速率主要有25fps、29.97fps、30fps等,而90k刚好是它们的倍数,所以就采用了90k。 (注:这个说的不太对,27KMHZ ,300分频)

时间戳的初始值应当是随机的,就像序号一样几个连续的RTP包如果(逻辑上)是同时产生的,如:属于同一个视频帧的RTP包,将有相同的序列号。如果数据并不是以它采样的顺序进行传输,那么连续的RTP包可以包含不是单调递增(或递减)的时间戳(RTP包的序列号仍然是单调变化的)。

使用rtp发送视频数据时,时间戳的单位时1/90000,可以理解为1秒时间被分成了90000份

如果是1秒25帧的数据,那么一帧数据占用了90000/25=3600,即一帧的时间增量是3600份单位

如果是1秒15帧的数据,那么一帧数据占用了90000/15=6000,即一帧的时间增量是6000份单位
 


视频同步中90KHz相关概念:

1、90K*300=27MHz是所有时钟、定时器的根本。

2、90KHz是用于视频同步的时间尺度(timescale),就是每秒90K个时钟TICK。为什么采用90K呢?目前视频的帧频率主要有25fps、29.97fps、30fps等,而90K刚好是他们的倍数,所以就采用了90K.

3、关于时间戳的计算:对于语音来讲,时间戳是封包间隔和采样速率的乘积的递增,比如,如果封包时间是20ms,而采样率是8Khz,则每一块的时间递增是160,即使由于某些原因包被丢弃。另外要注意的是,真实的采样速率和预定的采样速率有一些小的变化,但是发送一般没有可靠的办法察觉这些区别。对于视频来讲,时间戳的生成依赖于应用程序是否能够分辨其帧速率,则时间戳可以使用一个固定的速率增加,如对于30fps的视频,时间戳就每一帧增加3000,而对于25fps的视频就增加3600,如果一个帧被几个RTP包携带,则这些包应当有相同的时间戳。而如果应用程序并不能识别帧数,或者采样频率是变化的,现在很多编码器都是这样做的。那么时间戳就必须由系统时钟来获得,如gettimeofday()
 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Xshell并不提供直接的时间计算功能。然而,你可以使用Linux的命令行工具来进行时间计算。一个常用的命令是`date`,它可以显示当前的日期和时间。你可以使用`date`命令的不同选项来格式化输出,以满足你的需求。例如,要获取当前时间时间,你可以使用`date +%s`命令。这将以秒为单位返回当前时间时间。如果你想计算两个时间之间的时间差,你可以将两个时间相减。例如,要计算两个时间之间的秒数差,你可以使用`expr`命令,如下所示:`expr 时间1 - 时间2`。请注意,这里的时间是以秒为单位的整数值。希望这可以帮助到你。\[1\] #### 引用[.reference_title] - *1* [【Xshell】xshell本地指令以及常用命令大全](https://blog.csdn.net/zsq520520/article/details/91971905)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [使用xshell需要了解的Linux系统命令](https://blog.csdn.net/just_listen5/article/details/85043651)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值