RTMP协议分析

2024-01-03 14:21:08

说明:
一、开发流程
1、创建链接
2、发送音视频数据

二、创建链接
1、创建TCP Socket链接

2、创建RTMP链接
RTMP握手主要是客户端发送C0、C1、C2,服务端发送S0、S1、S2完成握手,几个数据包发送的顺序满足以下要求即可
服务端收到C0后,才能发S1
客户端收到S1后,才能发C2
服务端收到C1后,才能发S2
实际实现时为了减少数据发送的次数,通常按照下面的顺序发送:
客户端发送C0+C1
服务端收到后回复S0+S1+S2
客户端回复C2
参考链接:handshake-diagram

1、Send Handshake C0+C1
在这里插入图片描述
C0 是一个字节的数据包,表示客户端请求的RTMP版本号,服务端选择该版本号,或结束握手。
version目前定义的值是0x3,0-2是早期专用版本(已废弃),4-31是保留版本号,32-255不允许被使用。
参考链接https://rtmp.veriskope.com/docs/spec/#522c0-and-s0-format

在这里插入图片描述

C1 是1536字节的数据包。
time是一个时间戳,用来同步多个流,通常是0,根据自己的业务选择
zero必须是0,random是1528自己的随机数。

C0+C1的抓包数据展示:
C0+C1的抓包数据

2、Recv Handshake S0+S1+S2
S0同C0,S1同C1

在这里插入图片描述

S2是1536字节的数据包
time是C1中的时间戳
time2是S1中的时间戳
random必须包含对端发送是随机值,对S2来说是C1中的随机值

S0+S1+S2抓包展示:
在这里插入图片描述

3、Send Handshake C2
C2同S2一样,只是time中是S1的时间戳,time2是C1中的时间戳,random是S1中的随机值。

C2抓包展示:
在这里插入图片描述

三、发送控制消息
1、Set Chunk Size
Set Chunk Size
消息大小为32字节,首字节必须为0,Chunk Size是31字节。最大块大小至少应为128字节,每个方向的大小是独立的,告知对端自己将要发送的数据块大小,准备好相应的接收缓冲区。
抓包展示:
在这里插入图片描述
2、发送connect
在这里插入图片描述

3、发送CreateStream
在这里插入图片描述
4、发送publish
在这里插入图片描述
5、发送AVC sequence header、AAC sequence header
这两个header非常重要,是客户端解码的必需部分.
6、发送音视频数据

文章来源:https://blog.csdn.net/weixin_44719770/article/details/135291386
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。