【RTMP协议分析与抓包实测】

传输协议

RTMP基本通讯

RTMP基于TCP之上传输

TCP三次握手,相关文章链接,TCP三次握手流程

进行握手

c- --> s 发送 c0+c1 ,消息中只携带版本号3

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

c ---> s 发送c2

 

建立RTMP连接

真实建立连接的场景

c- --> s RTMP发送connect建立连接,fmt使用了00,后6位置是CSID为(00 0011)3,MessageHeader携带11个字节

s ---> c 协商(滑动窗口)大小,控制CSID必须为2

s ---> c 协商(带宽)大小,控制CSID必须为2

s- --> c 设置块大小

s ---> c   返回_result

创建RTMP流

C ---> S  释放以前的流

 C ---> S 发送FCPublish

 

C ---> S createStream 创建流

 

S ---> C  返回_Status信息

 

推RTMP流

C ---> S  发送 publish

 S ---> C 返回onStatus

 C ---> S 发送setDataFrame和metaData等信息,其中包括流的相关信息

metaData存放音视频基本信息(视频宽高,帧率等;音视频采样率,通道数等等)

作用:1.S端不做解释,原封不动给订阅者转发,订阅者收到后进行解码器初始化。2.S端想要操作流可以做解码设置。

C ---> S Video Data 

C ---> S Audio Data 

播RTMP流

C ---> S paly 指定播放具体频道的音视频

C ---> S set Buffer Size 设置缓冲区大小,使播放更加平滑

S ---> C Stream Begin 流开始

S ---> C onStatus 响应消息

S ---> C 服务端发送数据

RTMP消息格式

Basic Header基本头信息

基本头信息是动态变化的,占用大小主要和fmt(chunk type , chunk的类型)的后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那么就存在扩展时间戳。

相关推荐文章

流媒体协议之RTMP详解

RTMP协议详解及Wiresahrk抓包分析

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

༄yi笑奈何

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值