rtmp学习(二)
用于Flash播放器和服务器之间传输音频、视频、数据
RTMP协议本身既可以传输多媒体数据,也可以控制多媒体播放
RTMP是应用层协议
消息(基本数据单元)
Message Type ID(1-7用于协议控制,RTMP协议自身管理使用,控制协议的stream id必须是0,chunk stream id必须是2,8传输音频数据,9传输视频数据,15-20用于发送AMF编码,负责用户与服务器之间的交互,比如播放暂停等)
消息块
Chunk Basic Header用于标识本块
Chunk Message Header用于标识本块负载所属消息
Extended TimeStamp当时间戳溢出时出现
Chunk Data默认大小:音频64bytes,视频128byte
1-3字节
1、发送端把数据封装成消息2、把消息分割成消息块3、把消息块通过TCP协议发出去4、接收端把消息块重组成消息5、对消息进行解封装会付出媒体数据
Chunk Basic
fmt(2bit)
fmt == 0,Chunk Message Header为11个字节
fmt == 1,Chunk Message Header为7个字节
fmt == 2,Chunk Message Header为3个字节
fmt == 3,Chunk Message Header为0个字节
cs id(6bit)
cs id >= 2,Chunk Basic Header为一个字节
cs id == 0,Chunk Basic Heaser为两个字节,chunk stream id = 64 + 第二个字节值
cs id == 1,Chunk Basic Heaser为三个字节,chunk stream id = 64 + 第二个字节值 + 第三个字节值 << 8
Chunk Message Header
timestamp or timestamp delta(3bytes)
timestamp delta表示上个chunk和当前chunk的时间戳差。如果大于16777215使用扩展时间字段
message length(3bytes)
message body的长度,而不是chunk data的长度
message type id(1bytes)
1:set chunk size 设置chunk的最大size
2:abort ,essage 携带的内容是chunk stream id,通知听复制接收这个chunk stream的消息内容
3:acknowledgement
5:set peer bandwidth 设置对端输出带宽
8:Audio Data
9:Video Data
17,20:connect、createStream、publish、play、pause 命令消息
publish--->发布一个流到server,需要onStatus响应
16,19:
15,18:
message stream id(4bytes)
字节序是小端序,该值可以是任意值,不同的消息流服用成相同的chunk stream