RTMP流媒体播放过程
2014-02-04 22:05
253 查看
本文描述了从打开一个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) 在此之后服务器发送客户端要播放的音频和视频数据。
播放流
原文链接:
/article/1587029.html
注意: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) 在此之后服务器发送客户端要播放的音频和视频数据。
播放流
原文链接:
/article/1587029.html
相关文章推荐
- Windows从noinstall zip安装MySQL免安装版
- cocos2d-x 2.2 在WINDOWS中如何创建项目
- 浙江大学ACM俱乐部 1017:期末成绩
- Android模拟器DPAD not enabled in avd
- thttpd安装与调试
- Cutting a Rod
- OCP-1Z0-053-200题-167题-526
- redhat9不能上网的解决办法
- 浙江大学ACM俱乐部 1016:计算利息
- OCP-1Z0-053-200题-168题-528
- OpenRisc-64-添加VGA和I2C模块到ORPSoC并测试验证
- 便捷编程-Xcode常用第三方插件 (随时更新)
- 线性代数系统软件包
- OCP-1Z0-053-200题-169题-531
- linux内核0.12之MINIX文件系统初探
- usaco 1.2 Name That Number(数字字母转化)
- 计算特征值问题的C软件包
- Rational Rose启动和退出时报错
- 寒假折腾Archlinux的一些经验(新手向)--桌面配置篇
- 原型模式与深浅拷贝