视频流媒体推流平台RTMP协议是如何进行网络连接并推送视频流的?

Posted tsingsee

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了视频流媒体推流平台RTMP协议是如何进行网络连接并推送视频流的?相关的知识,希望对你有一定的参考价值。

RTMP是基于TCP协议的多媒体传输协议,因此RTMP服务器本质上是一个TCP服务器,它的逻辑结构基本上和普通的TCP服务器是类似的。我们视频直播点播流媒体服务器能够通过RTMP协议进行推流分发。

技术图片

本文我来跟大家介绍一下RTMP服务器建立推流的步骤。首先看一下RTMP 握手(Handshake)过程:

技术图片

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

在实际工程应用中,一般是客户端先将C0, C1块同时发出,服务器在收到C1 之后同时将S0, S1, S2发给客户端。之后客户端向服务器端发送C2块,简单握手完成。

建立网络连接(NetConnection):

技术图片

  1. 客户端发送命令消息中的“连接”(connect)到服务器,请求与一个服务应用实例建立连接。

  2. 服务器接收到连接命令消息后,发送确认窗口大小(Window Acknowledgement Size)协议消息到客户端,同时连接到连接命令中提到的应用程序。

  3. 服务器发送设置带宽协议消息到客户端。

  4. 客户端处理设置带宽协议消息后,发送确认窗口大小(Window Acknowledgement Size)
    协议消息到服务器端。

  5. 服务端向客户端发送“流开始”(Stream Begin)。

  6. 服务器发送命令消息中的“结果”(_result),通知客户端连接的状态。

建立网络流(Create Stream):

技术图片

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

播放(Play):

技术图片

    1. 客户端发送命令“播放”给服务器
    2. 接收到播放命令后,服务器发送设置块大小(ChunkSize)协议消息给客户端
    3. 服务器发送“stream begin”给客户端,告诉客户端流的id
    4. 播放命令成功的话,服务器发送命令消息中的“响应状态” NetStream.Play.Start & NetStream.Play.Reset,告知客户端“播放”命令执行成功
    5. 服务器发送客户端要播放的音频和视频数据

以上是关于视频流媒体推流平台RTMP协议是如何进行网络连接并推送视频流的?的主要内容,如果未能解决你的问题,请参考以下文章

JavaCV音视频开发宝典:使用javacv读取GB28181海康大华平台和网络摄像头sdk回调视频码流并转码推流rtmp流媒体服务

RTMP协议抓包分析推流过程

EasyRTMP实现内网摄像头RTSP拉流转码RTMP推流到RTMP服务器EasyRTMP-Android视频采集流程是什么?

Android平台FFmpeg实现rtmp推流-C++的实现

WindowsLinuxARMAndroidiOS全平台支持的RTMP推流组件EasyRTMP-iOS如何接入软编码?

RTP推流服务器EasyRTMP实现内网摄像头RTSP拉流转码RTMP推流到EasyRTMP-Android音频采集流程是什么?