RTMP是由RTMP Header 和RTMP Body组成的。
RTMP Header 包括 Basic Header, Message Header, Extened TimeStamp
Basic Header
Basic Header的第一个字节分为两部分fmt(占2位)和后面的数字x(占6位)
如果x是0 就在增加一个字节CSID,标识的范围是2^6 -------2^6 + 2^8
如果x是1 就在增加3个字节CSID1 CSID2 CSID3,标识的范围是 2^6 + 2^8 -----2^6 + 2^8+2^24 (云服务用到)
如果x是2-63(我们自己实际使用过程中,2-63已经够用)一个字节就已经够用。
Message Header
如果fmt = 10b,Message Header 有3个字节 TimeStamp
fmt == 01b, MessageHeader 有7个字节 . TimeStamp MsgLength TypeID
fmt == 00b, MessageHeader 有11个字节 TimeStamp MsgLength TypeID StreamID
数据太大,拆成多个块(chunk),
第一个块的MessageHeader有TimeStamp MsgLength TypeID StreamID
第二个块的MessageHeader有TimeStamp MsgLength TypeID (因为StreamID是一样的)
如果MessagId一样,就可以省略掉TypeID StreamID
如果MessagId MsgLength都一样就可以省略MsgLength TypeID StreamID
如果是同一个流中的同一个包MessageHeader可以省略
Extended TimeStamp
当MessageHeader中的TimeStamp是0XFFFFFF时,启用了扩展Extended TimeStamp
TypeId