最近需要做一个rtmp服务器,着手分析一下rtmp协议,开干。

rtmp握手

这个推荐一篇文章讲解得比较透彻http://blog.sina.com.cn/s/blog_676e11660102v8bj.html

rtmp协议中除了握手,其他的数据都是通过RTMP包发送的。

RMTP包完(有完整就当然有不完整了)整结构如下:以下内容参考了http://www.cnweblog.com/fly2700/archive/2008/04/09/281431.html

用途大小(Byte)含义
Head_Type1包头
TIMER3时间戳
AMFSize3数据大小
AMFType1数据类型
StreamID4流ID

Head_Type&0x3F表示数据通道ID ChannelID

ChannelID 用途
02Ping 和ByteRead通道
03Invoke通道 我们的connect() publish()和自字写的NetConnection.Call() 数据都是在这个通道的
04Audio和Vidio通道
05 06 07服务器保留,经观察FMS2用这些Channel也用来发送音频或视频数据

Head_Type&0xC0即高两bit的值,和该rtmp包头的关系如下

BitsHeader Length
0012 bytes
018 bytes
104 bytes
111 byte

0表示完整的包头 即12个字节

1表示8个字节即不包含StreamID

2表示4个字节 只包含Head_Type和TIMER

3表示1个字节 只包含Head_Type字节

05-11 17:39