simple rtmp server:
https://github.com/winlinvip/simple-rtmp-server
RTMP协议:
播放一个RTMP协议的流媒体需要经过以下几个步骤:握手,建立连接,建立流,播放。
1. RTMP连接都是以握手作为开始的;
2. 建立连接阶段用于建立客户端与服务器之间的“网络连接”;
3. 建立流阶段用于建立客户端与服务器之间的“网络流”;
4. 播放阶段用于传输视音频数据。
在一条TCP 连接中,包含着几条Message Stream,绝大部分情况下是Control Msg Stream 和Media Msg Stream。
而这些Msg Stream 由一段一段的Chunk Stream 组成,每个Chunk Stream 都带有一个Message Stream ID 以标识这个Chunk Stream 是属于哪一个Msg Stream
设想一段用rtmp播放的视频,应该包含两条message stream,一条command,一条media;而media stream中又包含了两条chunk stream,一条video,一条audio。
RTMP消息:
1. 消息是RTMP最基本的数据单元,包括消息头和消息负载:
message type分为:
user control message(4);
command message(20 for AMF0, 17 for AMF3);
data message(18 for AMF0,15 for AMF3);
shared object message(19 for AMF0, 16 for AMF3);
audio message(8)
video message(9)
aggregate message(22)
2. 消息负载一般被分为固定大小的chunk(默认128bytes):
chunk basic header有三种,分别为1byte,2bytes,和3bytes;根据chunk stream id的不同选择使用。
chunk message header有四种,分别为11bytes,7bytes,3bytes和0bytes,头里包含有stream id。
extended timstamp,当chunk message header里面的timestamp超过三字节范围时,补充使用。
3. 消息分块: