说明:
一、开发流程
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的抓包数据展示:
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
消息大小为32字节,首字节必须为0,Chunk Size是31字节。最大块大小至少应为128字节,每个方向的大小是独立的,告知对端自己将要发送的数据块大小,准备好相应的接收缓冲区。
抓包展示:
2、发送connect
3、发送CreateStream
4、发送publish
5、发送AVC sequence header、AAC sequence header
这两个header非常重要,是客户端解码的必需部分.
6、发送音视频数据