本文描述了从打开一个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流媒体播放过程相关推荐

  1. RTMP流媒体播放过程:握手,建立连接,建立流,播放

    本文讲述从打开一个RTMP流媒体到视音频数据开始播放的整个过程. 播放一个流媒体有两个前提步骤: 第一步,建立一个网络连接(NetConnection): 第二步,建立一个网络流(NetStream) ...

  2. 基于开源Flash Server:Red5构建RTMP流媒体播放平台

    上周五,我们基于开源Flash Server:Red5(http://osflash.org/red5)的Flash流媒体服务平台上线,内容涉及视频上传.视频分发.调用接口.Flash播放器等. 一. ...

  3. EasyRTMP手机直播推流到EasyDSS进行RTMP直播过程中分辨率反复切换崩溃问题解决

    前篇博客介绍了Android EasyRTMP App的一些功能以及简单实现.这篇博客介绍一下我们遇到的一个BUG,以及它的出现原因,解决方式. 这个bug是在切换分辨率的时候,偶尔会出现App崩溃. ...

  4. 【Unity3D插件】AVPro Video2.x rtmp流媒体播放设置问题

    上图为插件官方文档对于流媒体播放支持的说明. 此处官方在之下的实时流媒体专栏中着重说明: 像RTSP/RTMP这样的格式是为实时流媒体而设计的,在实时流媒体摄像机中很受欢迎.如上表所示,AVPro V ...

  5. 如何在RTSP/RTMP直播过程中加入SEI扩展数据发送和接收解析

    在直播系统中,除了直播音视频之外,有时候还想从主播端发布文本信息等,这些信息可以不通过视频传输通道发送给用户播放端,但如果传输的数据想和视频保持精准同步,那最好的办法就是这些信息和视频数据打包在一起传 ...

  6. videojs+hls+rtmp流媒体播放

    前言:刚接触前端,小白一个,如有出错,请指正,谢谢! 注:视频格式可以分为适合本地播放的本地影像视频和适合在网络中播放的网络流媒体影像视频两大类. 一.互联网网络流媒体简介 HTTP stream是各 ...

  7. Linux设置封包报头的函数,GitHub - LinuxDigger/RTMP

    封包 在RTMP协议中信令和媒体数据都称之为Message,在网络中传输这些Message,为了区分它们肯定是要加一个Message header的,所以RTMP协议也有一个Message heade ...

  8. [总结]RTMP流媒体技术零基础学习方法

    本文主要总结一些我在学习RTMP流媒体技术过程中积累的经验.也为后来学习RTMP流媒体技术的人们一个参考.本文力图从简到难,循序渐进的介绍RTMP流媒体技术的方方面面,先从应用说起,逐步深化剖析相关工 ...

  9. RTMP流媒体直播资料

    RTMP 简介: http://blog.chinaunix.net/uid-26000296-id-3360244.html RTMP Message Formats (RTMP消息格式): htt ...

最新文章

  1. 卡尔曼滤波器中的Q,R
  2. C++ return ,break,continue,关键字
  3. retinaface 记录
  4. 浅析影响网站建设的因素有哪些?
  5. 【完结】你对深度学习模型的理解是否足够深刻,这12篇文章可以作为一个参考...
  6. 查看MySQL服务端版本
  7. python统计分析--4.Logistic回归
  8. azkaban config: nodes:_关于Nordic SDK的sdk.config.h
  9. 24个笔画顺序表_小学一年级语文26个汉语拼音字母要点+田字格儿歌,赶紧给孩子看...
  10. 【QGIS入门实战精品教程】3.3:QGIS如何打开ArcGIS创建的文件数据库(GDB)?
  11. D*路径搜索算法原理解析及Python实现
  12. CSS SVG开关按钮切换网页白天和夜晚
  13. Nginx配置文件目录实现pdf文件预览及下载
  14. 【深入vue3+Typescript技术栈】2021 coderwhy大神新课高清百度网盘持续更新 王红元老师 腾讯课堂
  15. 怎么用网线连接开发板
  16. LKM完全指南 (收集得比较全了)
  17. 【改进和增强Microsoft Office应用程序】ExtendOffice软件产品介绍
  18. go语言基础(三)切片,map
  19. 【电源专题】SMPS电源的EMI来源和测量方法
  20. 怎么使用python语言,两个文件的对比

热门文章

  1. linux服务器管理公司用户,Linux服务器用户账号如何管理
  2. 机器学习集成模型学习——Boosting集成学习(四)
  3. 以太坊使用puppeth工具
  4. 噪声的频谱分析的重要意义_噪声测量:噪声源识别与定位的方法简析
  5. oracle增加文件组,Oracle 文件和文件组
  6. nginx 反向代理之 proxy_redirect
  7. 安卓系统为何这么容易被黑客入侵
  8. Python入门之软件开发目录规范
  9. java 中JFinal getModel方法和数据库使用出现问题解决办法
  10. eclipse中不能找到dubbo.xsd报错”cvc-complex-type.2.4.c“的 两种解决方法