音视频直播技术ios视频直播直播

RTMP播放流媒体过程

2017-10-09  本文已影响196人  音视频直播技术专家

前言

RTMP协议规定,播放一个流媒体需要执行以下几个步骤:

服务器和客户端之间只能建立一个网络连接,但是基于该连接可以创建很多网络流。他们的关系如图所示:

播放网络流

在RTMP服务器端对于每一个网络媒体流都建立了一个状态机,包括以下几个状态:

RTMP通过命令来变更状态机。并在每个状态下做相应的工作。

握手(HandShake)

一个RTMP网络流的建立是以握手开始的,双方分别发送大小固定的三个数据块

  1. 握手开始于客户端发送C0、C1块。服务器收到C0或C1后发送S0和S1。
  2. 当客户端收齐S0和S1后,开始发送C2。当服务器收齐C0和C1后,开始发送S2。
  3. 当客户端和服务器分别收到S2和C2后,握手完成。

连接(NetConnection)

  1. 客户端发送命令消息“连接”(connect)到服务器。
  2. 服务器接收到“连接”消息后,发送确认窗口大小(Window Acknowledgement Size)消息到客户端。
  3. 服务器发送“设置带宽”消息到客户端。
  4. 客户端处理“设置带宽”消息后,发送确认窗口大小(Window Acknowledgement Size)消息到服务器端。
  5. 服务器发送消息“流开始”(Stream Begin)到客户端。
  6. 服务器发送消息“结果”,通知客户端连接的状态。

建立网络流(NetStream)

  1. 客户端发送消息“创建流”(createStream)到服务器端。
  2. 服务器端接收到“创建流”命令后,发送“结果”消息,通知客户端流的状态。

播放(Play)

  1. 客户端发送消息“播放”(play)到服务器。
  2. 接收到“播放”消息后,服务器发送设置块大小(ChunkSize)消息。
  3. 服务器发消息“streambegin”,告知客户端流ID。
  4. 服务器收到"播放"消息后,发送消息“响应状态” NetStream.Play.Start & NetStream.Play.reset,告知客户端“播放”命令执行成功。
  5. 之后,服务器发送客户端要播放的音频和视频数据。

小结

以上就是 RTMP协议的播放过程。建立一个网络流的播放就是以下这几步。

目前,已经有很多开源库实现了 RTMP 协议。其中比较著名的是 librtmp 库,它是 rtmpdump 工具的一部分。

如果我们想实现简单的音视频直接可以直接使用 librtmp库作为我们的流媒体传输库。

上一篇 下一篇

猜你喜欢

热点阅读