直播-rtmp学习
RTMP(实时消息传输协议),官方介绍如下:
Adobe’s Real Time Messaging Protocol (RTMP), an application-level protocol designed for multiplexing and packetizing multimedia transport streams (such as audio, video, and interactive content) over a suitable transport protocol (such as TCP).
简单的这样理解rtmp:
NetConnection 命令
NetConnection 管理着一个客户端应用和服务器端之间的双相连接。此外,它还提供远程方法的异步调用。
NetConnection 可以发送以下命令:
- connect
- call
- close
- createStream
NetStream 命令
NetStream 定义了传输通道,通过这个通道,音频流、视频流以及数据消息流可以通过连接客户端到服务端的 NetConnection 传输。
以下命令可以由客户端使用 NetStream 往服务器端发送:
- play
- play2
- deleteStream
- closeStream
- receiveAudio
- receiveVideo
- publish
- seek
- pause
握手过程
命令执行时消息流动如下:
1. 客户端发送 connect 命令到服务器端以请求对服务器端应用实例的连接。
2. 收到 connect 命令后,服务器端发送协议消息 '窗口确认大小' 到客户端。服务器端也会连接到 connect 命令中提到的应用。
3. 服务器端发送协议消息 '设置对端带宽' 到客户端。
4. 在处理完协议消息 '设置对端带宽' 之后客户端发送协议消息 '窗口确认大小' 到服务器端。
5. 服务器端发送另一个用户控制消息 (StreamBegin) 类型的协议消息到客户端。
6. 服务器端发送结果命令消息告知客户端连接状态 (success/fail)。这一命令定义了事务 ID (常常为 connect 命令设置为 1)。这一消息也定义了一些属性,比如 FMS 服务器版本 (字符串)。此外,它还定义了其他连接关联到的信息,比如 level (字符串)、code (字符串)、description (字符串)、objectencoding (数字) 等等。
播放过程
命令执行时的消息流动是为:
1. 当客户端从服务器端接收到 createStream 命令的结果是为 success 时,发送 play 命令。
2. 一旦接收到 play 命令,服务器端发送一个协议消息来设置块大小。
3. 服务器端发送另一个协议消息 (用户控制),这个消息中定义了 'StreamIsRecorded' 事件和流 ID。消息在前两个字节中保存事件类型,在后四个字节中保存流 ID。
4. 服务器端发送另一个协议消息 (用户控制),这一消息包含 'StreamBegin' 事件,来指示发送给客户端的流的起点。
5. 如果客户端发送的 play 命令成功,服务器端发送一个 onStatus 命令消息 NetStream.Play.Start & NetStream.Play.Reset。只有当客户端发送的 play 命令设置了 reset 时服务器端才会发送 NetStream.Play.Reset。如果要播放的流没有找到,服务器端发送 onStatus 消息 NetStream.Play.StreamNotFound。
之后,服务器端发送视频和音频数据,客户端对其进行播放。
发布过程
参考资料