本文描述了从打开一个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
相关推荐
在描述中提到的“基于VLC开发的”,意味着我们讨论的是一个利用VLC媒体播放器技术来实现RTMP流媒体播放的解决方案。VLC是一个开源、跨平台的多媒体播放器,它不仅能够播放多种本地媒体文件,还支持通过RTMP协议播放...
CKPlayer是一款功能强大的HTML5视频播放器,支持多种视频格式,包括RTMP流媒体协议。在本文中,我们将深入探讨如何使用CKPlayer播放基于RTMP的流媒体,并了解相关技术背景和实现步骤。 首先,RTMP(Real-Time ...
在本文中,我们将深入探讨如何使用Qt框架与FFmpeg库来构建一个功能完善的RTMP流媒体播放器。首先,我们要了解这两个关键组件的作用及其在播放器开发中的角色。 **Qt框架** 是一个跨平台的应用程序开发框架,用C++...
根据提供的文档信息,本文将详细阐述如何使用FFmpeg和Red5搭建一个RTMP流媒体服务器,以及相关的配置和测试步骤。 首先,了解RTMP(Real Time Messaging Protocol)是一种网络协议,它被广泛用于在线直播和流媒体...
本文详细讲解了Nginx-rtmp流媒体服务器的搭建和ffmpeg推流的配置过程,从操作系统的选择到Nginx的编译安装,再到配置Nginx服务和ffmpeg推流的配置。通过本文,我们可以学到如何搭建一个稳定、高效的流媒体服务器,并...
本教程将深入探讨如何使用C++语言,结合libRTMP库,实现读取H264编码的视频文件并将其推送到RTMP流媒体服务器的过程。这对于开发实时视频应用或者直播系统来说,是一个基础且重要的技能。 首先,我们要理解H264编码...
然而,由于H5标准并不直接支持RTMP,我们需要借助一些特定的解决方案来实现在浏览器中播放RTMP流。 其中一个常见的解决方案是使用Flash Player,但由于其安全性和性能问题,逐渐被更现代的技术所取代。目前,我们更...
在拉取RTMP流的过程中,主要涉及以下几个步骤: 1. 初始化FFmpeg上下文:这是所有FFmpeg操作的基础,包括创建`AVFormatContext`对象,它是FFmpeg处理媒体文件的核心结构。通过`avformat_open_input()`函数打开RTMP...
接着,通过VideoView的setVideoPath方法设置RTMP流的URL,启动播放。在播放过程中,还可以利用Vitamio提供的事件监听器来处理播放状态变化、缓冲进度等事件。 值得注意的是,由于RTMP协议依赖于Adobe Flash技术,...
总的来说,搭建RTMP流媒体服务器通过Nginx是一个相对简单的过程,但要根据实际需求进行调整和优化。不断学习和了解相关的网络协议、流媒体技术和服务器管理,将有助于你更好地构建和维护这样一个系统。
通过以上步骤,你已经在Windows上成功搭建了一个基本的Nginx-RTMP流媒体服务器,支持RTMP和HLS协议。这只是一个起点,你还可以根据实际需求进行更复杂的配置,如添加鉴权、调整缓冲策略、设置转码等。在实际应用中,...
视频拉流测试通常通过播放服务器端的RTMP流来完成,检测播放过程中的延迟、卡顿等问题。rtmpread.c和rtmpreadtest.c可能提供了从服务器拉取并播放RTMP流的功能,用于测试不同网络条件下的拉流性能。 6. 使用压缩包...
- 这个连接是通过特定的握手过程完成的,包括客户端发送CONNECT命令,服务器响应,然后进行PLAY命令来开始流媒体数据的传输。 - 播放器解析接收到的音视频数据,并将其解码,最终在用户界面上渲染出实时的视频流。...
例如,通过Flash插件,可以创建一个隐藏的Flash对象,播放器JavaScript API与Flash通信,控制Flash播放RTMP流。 4. **服务器端设置**: 要使用RTMP,你需要一个支持RTMP的服务器,如Adobe Media Server、Nginx with ...
播放操作则使客户端能够从服务器拉取并播放流媒体内容。 接下来,我们将探讨如何在实际项目中应用这个Demo。首先,你需要一个支持Rtmp的流媒体服务器,如Adobe的FMS(Flash Media Server)、Nginx with rtmp module...
在这个特定的项目中,“使用JavaCV开发的rtsp流转rtmp流并进行推流的流媒体服务”旨在实现从RTSP协议的视频流转换到RTMP协议的流,以便将视频数据推送到支持RTMP的流媒体服务器,如YouTube Live、Nginx RTMP模块或...
标题中的“摄像头rtsp流转成rtmp流用于浏览器实时播放”涉及到的是网络视频流传输技术,特别是摄像头视频信号从RTSP(Real Time Streaming Protocol)协议转换到RTMP(Real-Time Messaging Protocol)协议的过程,...
它通过TCP连接建立会话,并使用一系列控制消息和数据块来维持和管理流媒体的发送。在Android上,我们通常使用开源库如librtmp或ijkplayer来实现RTMP推流。 在Android应用中,实现RTMP推流的关键步骤如下: 1. **...
在实现过程中,我们可以使用librtmp来读取RTMP流,并将接收到的数据写入FLV文件。FLV是一种常见的流媒体文件格式,支持视频和音频数据,适合于网络传输。通过librtmp,我们可以控制接收的帧类型和时间戳,确保FLV...