`

RTMP流媒体播放过程

    博客分类:
  • RTMP
 
阅读更多

 

本文描述了从打开一个RTMP流媒体到视音频数据开始播放的全过程。

注意:RTMP中的逻辑结构

RTMP协议规定,播放一个流媒体有两个前提步骤:第一步,建立一个网络连接(NetConnection);第二步,建立一个网络流(NetStream)。其中,网络连接代表服务器端应用程序和客户端之间基础的连通关系。网络流代表了发送多媒体数据的通道。服务器和客户端之间只能建立一个网络连接,但是基于该连接可以创建很多网络流。他们的关系如图所示:

 

1 简要介绍

播放一个RTMP协议的流媒体需要经过以下几个步骤:握手,建立连接,建立流,播放。RTMP连接都是以握手作为开始的。建立连接阶段用于建立客户端与服务器之间的“网络连接”;建立流阶段用于建立客户端与服务器之间的“网络流”;播放阶段用于传输视音频数据。

2 握手(HandShake)

一个RTMP连接以握手开始,双方分别发送大小固定的三个数据块

a)握手开始于客户端发送C0、C1块。服务器收到C0或C1后发送S0和S1。

b)当客户端收齐S0和S1后,开始发送C2。当服务器收齐C0和C1后,开始发送S2。

c)当客户端和服务器分别收到S2和C2后,握手完成。

 

握手

 

 

3建立网络连接(NetConnection)

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

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

c)服务器发送设置带宽()协议消息到客户端。

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

e)服务器发送用户控制消息中的“流开始”(Stream Begin)消息到客户端。

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

建立连接

4建立网络流(NetStream)

a) 客户端发送命令消息中的“创建流”(createStream)命令到服务器端。

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

建立流

 

5 播放(Play)

a)客户端发送命令消息中的“播放”(play)命令到服务器。

b)接收到播放命令后,服务器发送设置块大小(ChunkSize)协议消息。

c)服务器发送用户控制消息中的“streambegin”,告知客户端流ID。

d)播放命令成功的话,服务器发送命令消息中的“响应状态” NetStream.Play.Start & NetStream.Play.reset,告知客户端“播放”命令执行成功。

e)在此之后服务器发送客户端要播放的音频和视频数据。

播放流

 

RTMP协议规范(中文翻译):http://download.csdn.net/detail/leixiaohua1020/6563059

分享到:
评论

相关推荐

    rtmp流媒体播放

    在描述中提到的“基于VLC开发的”,意味着我们讨论的是一个利用VLC媒体播放器技术来实现RTMP流媒体播放的解决方案。VLC是一个开源、跨平台的多媒体播放器,它不仅能够播放多种本地媒体文件,还支持通过RTMP协议播放...

    ckplayer播放基于RTMP的流媒体

    CKPlayer是一款功能强大的HTML5视频播放器,支持多种视频格式,包括RTMP流媒体协议。在本文中,我们将深入探讨如何使用CKPlayer播放基于RTMP的流媒体,并了解相关技术背景和实现步骤。 首先,RTMP(Real-Time ...

    Qt+FFmpeg实现RTMP流媒体播放器

    在本文中,我们将深入探讨如何使用Qt框架与FFmpeg库来构建一个功能完善的RTMP流媒体播放器。首先,我们要了解这两个关键组件的作用及其在播放器开发中的角色。 **Qt框架** 是一个跨平台的应用程序开发框架,用C++...

    利用red5和ffmpeg搭建rtmp流媒体服务器

    根据提供的文档信息,本文将详细阐述如何使用FFmpeg和Red5搭建一个RTMP流媒体服务器,以及相关的配置和测试步骤。 首先,了解RTMP(Real Time Messaging Protocol)是一种网络协议,它被广泛用于在线直播和流媒体...

    Nginx-rtmp流媒体服务器搭建+ffmpeg推流.pdf

    本文详细讲解了Nginx-rtmp流媒体服务器的搭建和ffmpeg推流的配置过程,从操作系统的选择到Nginx的编译安装,再到配置Nginx服务和ffmpeg推流的配置。通过本文,我们可以学到如何搭建一个稳定、高效的流媒体服务器,并...

    H5网页播放rtmp实时视频流,网页直播

    然而,由于H5标准并不直接支持RTMP,我们需要借助一些特定的解决方案来实现在浏览器中播放RTMP流。 其中一个常见的解决方案是使用Flash Player,但由于其安全性和性能问题,逐渐被更现代的技术所取代。目前,我们更...

    读取H264文件到内存推流到RTMP流媒体服务器

    本教程将深入探讨如何使用C++语言,结合libRTMP库,实现读取H264编码的视频文件并将其推送到RTMP流媒体服务器的过程。这对于开发实时视频应用或者直播系统来说,是一个基础且重要的技能。 首先,我们要理解H264编码...

    C#开发FFMPEG例子(API方式) FFmpeg拉取RTMP流并播放原始源码

    在拉取RTMP流的过程中,主要涉及以下几个步骤: 1. 初始化FFmpeg上下文:这是所有FFmpeg操作的基础,包括创建`AVFormatContext`对象,它是FFmpeg处理媒体文件的核心结构。通过`avformat_open_input()`函数打开RTMP...

    android RTMP 视频流播放器

    接着,通过VideoView的setVideoPath方法设置RTMP流的URL,启动播放。在播放过程中,还可以利用Vitamio提供的事件监听器来处理播放状态变化、缓冲进度等事件。 值得注意的是,由于RTMP协议依赖于Adobe Flash技术,...

    搭建rtmp流媒体服务器的nginx

    总的来说,搭建RTMP流媒体服务器通过Nginx是一个相对简单的过程,但要根据实际需求进行调整和优化。不断学习和了解相关的网络协议、流媒体技术和服务器管理,将有助于你更好地构建和维护这样一个系统。

    rtmp流媒体服务器搭建.zip

    通过以上步骤,你已经在Windows上成功搭建了一个基本的Nginx-RTMP流媒体服务器,支持RTMP和HLS协议。这只是一个起点,你还可以根据实际需求进行更复杂的配置,如添加鉴权、调整缓冲策略、设置转码等。在实际应用中,...

    rtmp.zip_rtmp 模拟发流_rtmp流测试_rtmp测试流_模拟推流工具_视频拉流测试

    视频拉流测试通常通过播放服务器端的RTMP流来完成,检测播放过程中的延迟、卡顿等问题。rtmpread.c和rtmpreadtest.c可能提供了从服务器拉取并播放RTMP流的功能,用于测试不同网络条件下的拉流性能。 6. 使用压缩包...

    rtmp视频流播放器

    - 这个连接是通过特定的握手过程完成的,包括客户端发送CONNECT命令,服务器响应,然后进行PLAY命令来开始流媒体数据的传输。 - 播放器解析接收到的音视频数据,并将其解码,最终在用户界面上渲染出实时的视频流。...

    RTMP视频播放web播放.rar

    例如,通过Flash插件,可以创建一个隐藏的Flash对象,播放器JavaScript API与Flash通信,控制Flash播放RTMP流。 4. **服务器端设置**: 要使用RTMP,你需要一个支持RTMP的服务器,如Adobe Media Server、Nginx with ...

    摄像头rtsp流转成rtmp流用于浏览器实时播放

    标题中的“摄像头rtsp流转成rtmp流用于浏览器实时播放”涉及到的是网络视频流传输技术,特别是摄像头视频信号从RTSP(Real Time Streaming Protocol)协议转换到RTMP(Real-Time Messaging Protocol)协议的过程,...

    基于Rtmp协议的流媒体直播 Demo

    播放操作则使客户端能够从服务器拉取并播放流媒体内容。 接下来,我们将探讨如何在实际项目中应用这个Demo。首先,你需要一个支持Rtmp的流媒体服务器,如Adobe的FMS(Flash Media Server)、Nginx with rtmp module...

    使用JavaCV开发的rtsp流转rtmp流并进行推流的流媒体服务

    在这个特定的项目中,“使用JavaCV开发的rtsp流转rtmp流并进行推流的流媒体服务”旨在实现从RTSP协议的视频流转换到RTMP协议的流,以便将视频数据推送到支持RTMP的流媒体服务器,如YouTube Live、Nginx RTMP模块或...

    Android RTMP推流实现

    它通过TCP连接建立会话,并使用一系列控制消息和数据块来维持和管理流媒体的发送。在Android上,我们通常使用开源库如librtmp或ijkplayer来实现RTMP推流。 在Android应用中,实现RTMP推流的关键步骤如下: 1. **...

    将rtmp流保存成MP4或者flv格式视频(参考资料包括:librtmp实现flv,ffmpeg实现MP4和mp4v2实现MP4)

    在实现过程中,我们可以使用librtmp来读取RTMP流,并将接收到的数据写入FLV文件。FLV是一种常见的流媒体文件格式,支持视频和音频数据,适合于网络传输。通过librtmp,我们可以控制接收的帧类型和时间戳,确保FLV...

Global site tag (gtag.js) - Google Analytics