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
|