RTMP播放流媒体过程

作者: 音视频直播技术专家 | 来源:发表于2017-10-09 19:47 被阅读196次

前言

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

  • 建立一个网络连接(NetConnection),网络连接代表RTMP服务器端和客户端之间建立真正的网络连接。
  • 建立一个网络流(NetStream)。网络流代表了发送多媒体数据的通道。这是一个逻辑连接,有点像 http协义中的 session。
  • 播放流。

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

播放网络流

在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库作为我们的流媒体传输库。

相关文章

  • iOS 视频直播(二)

    参考博客:流媒体播放过程 本文描述了从打开一个RTMP流媒体到视音频数据开始播放的全过程。 注意:RTMP中的逻辑...

  • rtmp 协议分析及交互过程

    本文描述了从打开一个RTMP流媒体到视音频数据开始播放的全过程。注意:RTMP中的逻辑结构RTMP协议规定,播放一...

  • RTMP流媒体播放过程

    RTMP协议规定,播放一个流媒体有两个前提步骤:第一步,建立一个网络连接(NetConnection);第二步,建...

  • RTMP流媒体播放过程

    参考博客:流媒体播放过程 RTMP协议规定:第一步,建立一个网络连接(NetConnection):客户端和服务端...

  • RTMP播放流媒体过程

    前言 RTMP协议规定,播放一个流媒体需要执行以下几个步骤: 建立一个网络连接(NetConnection),网络...

  • 使用Android NDK编译ffmpeg

    最近基于ffmpeg用c++写了一个流媒体播放器,支持播放本地/网络文件、rtmp/rtsp流,想将其移植到And...

  • videojs 流媒体播放rtmp协议

    rtmp协议需要flash的支持,html5不支持也无法支持这一协议。 搭建rtmp流媒体服务器可参考crtmps...

  • 2019-10-11RTMP整理

    之前一直用的rtp,最近在用rtmp,相关学习整理如下: RTMP协议规定,播放一个流媒体有两个前提步骤:第一步,...

  • RTSP协议介绍

    流媒体传输协议介绍 1,RTMP协议(1)是流媒体协议。(2)RTMP协议是 Adobe 的私有协议,未完全公开。...

  • 从请求次数理解: HTTP 中 GET 与 POST 的区别

    原文链接:mp.weixin.qq.com 通过 wireshark 抓包了解直播流媒体 RTMP 协议基本过程j...

网友评论

    本文标题:RTMP播放流媒体过程

    本文链接:https://www.haomeiwen.com/subject/idbpyxtx.html