最近需要做一个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_Type | 1 | 包头 |
TIMER | 3 | 时间戳 |
AMFSize | 3 | 数据大小 |
AMFType | 1 | 数据类型 |
StreamID | 4 | 流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包头的关系如下
Bits | Header Length |
00 | 12 bytes |
01 | 8 bytes |
10 | 4 bytes |
11 | 1 byte |
0表示完整的包头 即12个字节
1表示8个字节即不包含StreamID
2表示4个字节 只包含Head_Type和TIMER
3表示1个字节 只包含Head_Type字节