RTMP流媒体播放过程

来源:互联网 发布:大数据交易市场现状 编辑:程序博客网 时间:2024/05/20 16:10

本文描述了从打开一个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是Real Time Messaging Protocol(实时消息传输协议)的首字母缩写。该协议基于TCP,是一个协议族,包括RTMP基本协议及RTMPT/RTMPS/RTMPE等多种变种。RTMP是一种设计用来进行实时数据通信的网络协议,主要用来在Flash/AIR平台和支持RTMP协议的流媒体/交互服务器之间进行音视频和数据通信。支持该协议的软件包括Adobe Media Server/Ultrant Media Server/red5等。

    RTMP又是Routing Table Maintenance Protocol(路由选择表维护协议)的缩写。 在 AppleTalk 协议组中,路由选择表维护协议(RTMP,Routing Table Protocol)是一种传输层协议,它在 AppleTalk 路由器中建立并维护路由选择表。RTMP 基于路由选择信息协议(RIP)。正如 RIP 一样,RTMP 使用跳数作为路由计量标准。一个数据包从源 网络发送到目标网络,必须通过的路由器或其它中间介质节点数目的计算结果即为跳数。

RTMP实时消息传送协议-协议概述

    RTMP(Real Time Messaging Protocol)实时消息传送协议是Adobe Systems公司为Flash播放器和服务器之间音频、视频和数据传输 开发的开放协议。
它有多种变种:
   1)RTMP工作在TCP之上,默认使用端口1935;
   2)RTMPE在RTMP的基础上增加了加密功能;
   3)RTMPT封装在HTTP请求之上,可穿透防火墙;
   4)RTMPS类似RTMPT,增加了TLS/SSL的安全功能;

协议详细介绍

RTMP协议(Real Time Messaging Protocol)是被Flash用于对象,视频,音频的传输.这个协议建立在TCP协议或者轮询HTTP协议之上.
RTMP协议就像一个用来装数据包的容器,这些数据既可以是AMF格式的数据,也可以是FLV中的视/音频数据.
一个单一的连接可以通过不同的通道传输多路网络流.这些通道中的包都是按照固定大小的包传输的.
网络连接(Connection)
一个Actionscript连接并播放一个流的简单代码:
var videoInstance:Video = your_video_instance;
var nc:NetConnection = new NetConnection();
var connected:Boolean = nc.connect("rtmp:/localhost/myapp");
var ns:NetStream = new NetStream(nc);
videoInstance.attachVideo(ns);
ns.play("flvName");
默认端口为193

====================================================

原文链接:

http://blog.csdn.net/leixiaohua1020/article/details/11704355

http://baike.baidu.com/link?url=9sXg09RXb4m1YBLRkC0U3qRjUNSpkek3jWor4-FUOsNM4yzAu9pKFQqGc8D0mMs1SOY2GmzIF_bBW87GslpOCK

0 0
原创粉丝点击