RTMP连接的建立与播放
RTMP连接的建立有三个步骤:
1、握手。用于判别客户端、服务器是否存在。
2、建立网络连接。注意不是tcp中的网络连接。
3、建立流连接。建立流连接的目的是传输媒体数据。
4、播放。
握手阶段
握手阶段,双方分别发送大小固定的三个数据块.
1、客户端发送数据块C0和C1。
2、服务器接收到C0或C1中任意一个后,向客户端发送数据块S0和S1;如果服务器接收齐了C0和C1,那么服务器还可以继续向客户端发送数据块S2。
3、客户端接收齐S0和S1后,向服务器发送数据块C2。
4、如果服务器接收到了S2,客户端也接收到C2,那么握手完成!
客户端伪代码
// 客户端伪代码
S0 = null
S1 = null
S2 = null
send C0 and C1
while(S0 == null || S1 == null)
{
recv S0 and S1
}
send C2
recv S2
服务器端伪代码
// 服务器伪代码
C0 = null,C1 = null
while(C0 == null && C1 == null)
{
recv C0 or C1
}
send S0,S1
while(C0 == null && C1 == null)
{
recv C0 or C1
}
send S2
recv C2
建立网络连接阶段
具体操作如下:
1、客户端发送命令“connect”给服务器
2、服务器接收到“connect”命令之后,发送消息“确认窗口大小(Window Acknowledgement Size)”给客户端,同时连接到“connect”命令中提到的应用程序
3、服务器发送消息“设置带宽”给客户端
4、客户端接收到消息“设置带宽”之后,发送消息“确认窗口大小”给服务器
5、服务器发送消息“流开始”给客户端
6、服务器发送消息“结果”给客户端,通知客户端连接的状态
建立流阶段
具体操作如下:
1、客户端发送命令“创建流”给服务器
2、服务器接收到命令之后,发送“结果”给客户端
播放阶段
具体操作如下:
1、客户端发送命令“播放”给服务器
2、服务器接收到命令之后,发送消息“设置块大小”给客户端
3、服务器发送“stream begin”给客户端,告诉客户端 流的id
4、播放命令成功的话,服务器发送“响应状态”给客户端,告诉客户端播放成功
5、服务器发送音视频数据给客户端