rtmp协议中的timestamps
使用rtmp协议做实时流,timestamps是一个非常关键部分,timestamps的正确性可以提升实时流的流畅性和实时性。
timestamps的介绍翻译自rtmp协议的英文介绍版(PS:英文水平有限,有失误的地方敬请见谅)
timestamps 用来表示rtmp流包的一个时间点,是以毫秒为单位的32位的整数。一般情况下,一个流开始的timestamps值从0开始,但是这不是必须的,只要保证在两个数据包之间达成一致的时间就可以了。这就意味着数据块同步需要一些额外的机制,来保证数据的一致性。
timestamps **必须**是单边增长的必须是一个线型的时间,这样做是为了程序可以处理同步,带宽,测量,抖动检测和流量控制。
因为timestamps通常情况下只有32位表示,所以,在不到50天的时间就会形成一个循环。因为实时流要求要连续不断的运行,运行的时间可能是一年或许更久,所以就需要应该程序采用一些算法去处理。只要两个块之间是一致的,任何的方法都可以接受。假设有一个这样的应用。例如:所有相邻包的timestamps差在2^31毫米以内,所以4000000000在10000的后面,在3000000000的前面。
相对上一个timestamps,timestamps增量也是一个以毫秒为单位的整数。timestamps增量的长度可能是24bit或者是32bit的数据。