传输协议

RTMP基本通讯


RTMP基于TCP之上传输
TCP三次握手,相关文章链接,TCP三次握手流程

进行握手

c- --> s 发送c0+c1


c ---> s 发送c2

s ---> c 发送s0+s1+s2

建立RTMP连接

真实建立连接的场景

c- --> s RTMP发送connect建立连接

s ---> c 协商(滑动窗口)大小以及(带宽大小)


s- --> c 设置块大小

s ---> c result

创建RTMP流

C ---> S 释放以前的流>>创建流
S ---> C 返回Status信息
推RTMP流

metaData存放音视频基本信息(视频宽高,帧率等;音视频采样率,通道数等等)
作用:1.S端不做解释,原封不动给订阅者转发,订阅者收到后进行解码器初始化。2.S端想要操作流可以做解码设置。
播RTMP流

C ---> S paly 指定播放具体频道的音视频
C ---> S set Buffer Size 设置缓冲区大小,使播放更加平滑
S ---> C Stream Begin 流开始
S ---> C onStatus 响应消息
S ---> C 服务端发送数据
RTMP消息格式

Basic Header基本头信息
基本头信息是动态变化的,占用大小主要和fmt的后6位数值有关,后面保存CSID(Chunk Stream ID)。
占一个字节,fmt占用两位,后面6位是(2 - 63)
占二个字节,fmt占用两位,后面6位是(0)
占四个字节,fmt占用两位,后面6位是(1)
RTMP消息类型,用于Message Header中的TypeID

Message Header消息头信息(可有可无,与Basic Header设置有关)
由fmt控制有无:
(1).TimeStamp 3字节 时间戳
(2).MsgLength 3字节 数据长度
(3).TypeID 1字节 消息类型
(4).StreamID 4字节
fmt:两个比特位的四种组合
00 ---> 包含(1)(2)(3)(4)
01 ---> 包含(1)(2)(3)
10 ---> 包含(1)
11 ---> 不要Message Header
Extended Timestamp扩展时间戳(可有可无,与Basic Header设置有关)
与Message Header中的TimeStamp的值有关,如果值为0xFFFFFF那么就存在扩展时间戳。



