传输协议
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那么就存在扩展时间戳。