ChinaFFmpeg

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6281|回复: 0

RTMP(5) - Timestamp

[复制链接]
发表于 2014-10-16 12:20:54 | 显示全部楼层 |阅读模式
Adobe有点太小气,为了省这么1个字节,还整这么一套复杂的的定义。

基本时间戳 timestamp
  在Type 0的Msg Header中含有一个3字节的时间字段, 称为timestamp, 指明一个时间
  在Type 1, 2的Msg Header中含有一个3字节的时间字段, 称为timestamp delta, 记录与上一个Chunk的时间差值
  在Type 3的Msg中没有时间字段, 与上一个Chunk时间值相同
例如, 连续几个Chunk, 其类型和时间为
#0  Type=1,  TimeStamp=1000
#1  Type=3,
#2  Type=3,
#3  Type=3
上面4个Chunk中,
    Chunk#1的时间为1000ms,   Chunk#1, #2, #3的时间与#0的相同 --往往表示这几个包属于同一个Msg,因此发生时间相同

扩展时间戳 Extended Timestamp
       当时间值很大 (>= 0x00FFFFFF)时, 上述的Timestamp字段不能传递这样的数值, 因为Timestamp字段只有3个字节,此时需要使用扩展字段Extended Timestamp, 该字段是4个字节。在需要带Extened Timestamp时,必须在Timestamp字段置为FF FF FF。Extened Timestamp如果存在的话,将位于Msg Header之后, Chunk Data之前。
+-------------+----------------+-------------------+--------------+
| Basic header|Chunk Msg Header|Extended Time Stamp| Chunk Data |
+-------------+----------------+-------------------+-------------+
  
     
       理论上Type 0, 1, 2的Chunk都可以使用Extended Timestamp来传递时间, Type 3由于严禁携带Extened Timestamp字段。但实际上只有Type 0才需要带此字段。这是因为,对Type 1, 2来说,其时间为一个差值,一般肯定小于0x00FFFFFF。
       对于除Audio, Video以外的基它Message,其时间字段都可以是置为0的,似乎没有被用到。只有在发送视频和音频数据时,才需要特别的考虑TimeStamp字段。基本依据是,要以HandShake时为起始点0来计算时间。一般来说,建立一个相对时间,把一个视频帧的TimeStamp特意的在当前时间的基础上延迟3秒,则可以达到缓存的效果。

依然不关我事。
http://blog.sina.com.cn/s/blog_8cfe05150100ubkz.html

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|Archiver|ChinaFFmpeg

GMT+8, 2024-4-27 07:38 , Processed in 0.055929 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表