直播-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。
        之后,服务器端发送视频和音频数据,客户端对其进行播放。
 
 
 
 
发布过程
 
 
 
参考资料
 
 
原文地址:https://www.cnblogs.com/vc60er/p/5906728.html