- 浏览: 498428 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (185)
- job (15)
- linux/windows/unix/bash/shell (31)
- JAVA/J2EE/spring/hibernate/struts (30)
- VC/C++ (48)
- mysql/postgresql (6)
- php/jsp/asp/pear (1)
- FMS/flex/openlaszlo/red5/openmeetings (34)
- apache/tomcat/ftp/svn (6)
- xen/vm/Hadoop/cloudcompute (6)
- visual studio/eclipse/zendstudi/ant (8)
- others (1)
- windows异常处理 __try __except (1)
- (1)
- matlab (4)
- android (0)
最新评论
-
hongzhounlfd:
很透彻,很详细
依赖注入和控制反转 -
jefferyqjy:
谢谢~言简意赅~很明了!
依赖注入和控制反转 -
elderbrother:
太好了,谢谢
依赖注入和控制反转 -
east_zyd_zhao:
终于搞明白了
依赖注入和控制反转 -
Dremeng:
完美,一看就懂理解透彻
依赖注入和控制反转
转自《RTMP协议详解(一) (二) (三) 》 Real Time Messaging Protocol(实时消息传送协议协议)是Adobe Systems公司为Flash播放器和服务器之间音频、视频和数据传输开发的私有协议。 具体使用RTMP的AS代码大概如下: 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"); Adobe也在官方网站已经提供了RTMP协议的官方文档说明,为什么要写这个系列文章最大的原因只是对前一段工作的一个总结和回顾,最近两个月,实现了一个RTMP Server的c++版本,把公司的流媒体服务和flash无缝对接起来。希望我的文字能给后来研究这个协议的同学有一定的帮助。 RTMP协议是一个基于TCP的高层协议族,当然这个玩意据说还有UDP协议版本的,不过现在还没有出来,好像Adobe下一版本的FMS会提供支持。下文将要描述的是TCP协议版本的协议。 RTMP协议的概要理解: RTMP协议是为了和flash之间交换信令以及媒体数据。为了提高使用效率信令和媒体数据都是使用相同的机制。因为是相同的机制Adobe就整出来了一些比较搞人的概念,当然每个协议第一次接触都是比较难理解的。 在RTMP协议中信令和媒体数据都称之为Message,在网络中传输这些Message,为了区分它们肯定是要加一个Message head的,所以RTMP协议也有一个Message head,还有一个问题因为RTMP协议是基于TCP的,由于TCP的包长度是有限制的(一般来说不超过1500个字节),而RTMP的Message长度是有可能很大的,像一个视频帧的包可能会有几十甚至几千K,这个问题就必然有一个分片的问题,在RTMP协议中对应的说法就是chunk,每一个Message + head都是由一个和多个chunk组成的。到这里对RTMP协议的概要理解就算完了。 RTMP的字节序: RTMP的head在协议中的表现形式是chunk head,前面已经说到一个Message + head可以分成一个和多个chunk,为了区分这些chunk,肯定是需要一个chunk head的,具体的实现就把Message head的信息和chunk head的信息合并在一起以chunk head的形式表现。 一个完整的chunk的组成如下图所示 Chunk basic header: 该字段包含chunk的stream ID和 type 。chunk的Type决定了消息头的编码方式。该字段的长度完全依赖于stream ID,该字段是一个可变长的字段。 Chunk Msg Header:0, 3 ,7, 11 该字段包含了将要发送的消息的信息(或者是一部分,一个消息拆成多个chunk的情况下是一部分)该字段的长度由chunk basic header中的type决定。 Extend Timestamp: 0 ,4 bytes 该字段发送的时候必须是正常的时间戳设置成0xffffff时,当正常时间戳不为0xffffff时,该字段不发送。当时间戳比0xffffff小该字段不发送,当时间戳比0xffffff大时该字段必须发送,且正常时间戳设置成0xffffff。 Chunk Data Chunk Msg Header: Chunk Msg Header的长度是可变的,Chunk Msg Header可变的原因是为了压缩传输的字节数,把一些相同类型的chunk的head去掉一些字节,换句话说就是四种类型的包头都可以通过一定的规则还原成11个字节,这个压缩和还原在RTMP协议中称之为复用/解复用。 那我们以11个字节的完整包头来解释Chunk Msg Header,如图所示 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + timestamp + message length + message type id + message stream id + ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Timestamp:3bytes 对于type 0的chunk,绝对时间戳在这里表示,如果时间戳值大于等于0xffffff(16777215),该值必须是0xffffff,且时间戳扩展字段必须发送,其他情况没有要求。 message length:3bytes Message的长度,注意这里的长度并不是跟随chunk head其后的chunk data(Payload)的长度,而是前文提到的一条信令或者一帧视频数据或音频数据的长度。前文提到过信令或者媒体数据都称之为Message,一条Message可以分为一条或者多条chunk。 message type id:1byte Message的类型ID,具体的值将在后文专门来讨论。 message stream id:4bytes message stream id的字节序是小端序,这个字段是为了解复用而设计的,RTMP文档上说的相当的模糊,
message stream ID可以使任意值,不同的消息流复用成相同的chunk stream,基于它们的ID能够解复用。于chunk stream 是相关的,这个字段是一个不透明的值没有整明白什么意思,我的理解就是用来标识和服务器连接的flash端的序号。 长度是7 bytes 的chunk head,该类型不包含stream ID,该chunk的streamID和前一个chunk的stream ID是相同的,变长的消息,例如视频流格式,在第一个新的chunk以后使用这种类型,注意其中时间戳部分是相对时间,为何上一个绝对时间之间的差值 如图所示: ++++++++++++++++++++++++++++++++++++++++++++++++++++++ + timestamp delta + message length + message type id + ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 bytes的chunk head,该类型既不包含stream ID 也不包含消息长度,这种类型用于stream ID和前一个chunk相同,且有固定长度的信息,例如音频流格式,在第一个新的chunk以后使用该类型。如图所示: ++++++++++++++++++++ + timestamp delta + ++++++++++++++++++++
0 bytes的chunk head,这种类型的chunk从前一个chunk得到值信息,当一个单个消息拆成多个chunk时,这些chunk除了第一个以外,其他的都应该使用这种类型, chunk的长度: chunk的长度初始长度固定为128个字节,但是这个值并不是不可变的,在客户端和服务端建立连接以后,客户端和服务端都可以通过发送信令的方式来通知对端修改chunk的长度,理论上来说可以修改chunk的最长长度为65536。这里chunk的长度是指chunk的数据部分的长度,即chunk data(payload)的长度,如果一条Message的数据长度超过了chunk的长度,就必须把Message分割成多条chunk,即如果一条视频类型Message长度为2000个byte,chunk长度为1500,则该Message将会分割成两条chunk,第一条的chunk data长度为1500,第二条的chunk data长度为500。当然这两条chunk的chunk head肯定是不同的,其中第二条chunk的chunk head就是0字节的 |
发表评论
-
Red5安装和配置
2011-02-24 10:23 4059Red5安装和配置参考网页:http://www.cahblo ... -
基于Moodle平台的网站调查报告
2011-02-24 10:18 2583基于Moodle平台的网站调查报告 网站举例: ² 西南 ... -
moodle插件模块功能汇总
2011-02-24 10:03 5020Moodle官方提供654种插件或者模块moodle.org ... -
moodle 一体包安装手册(window)
2011-02-24 09:55 1291见附件 -
moodle中上传文件大小控制
2011-02-24 09:51 1850第一步:修改在php4下POST文件大小的限制1.编修php. ... -
linux下面安装moodle
2011-02-24 09:50 20931. 安装moodle运行 ... -
OpenMeetings安装文档
2011-02-15 11:09 2609OpenMeetings 是一个多语言可定制的视频会议和协作系 ... -
Compilation and Execution (openlaszlo)
2010-11-22 11:02 10577. Compilation and Exe ... -
Combining Tags and Script in LZX Programs (openlaszlo)
2010-11-22 11:01 13276. Combining Tags and ... -
Data Access, Manipulation, and Binding (openlaszlo)
2010-11-22 10:33 12065. Data Access, Manipu ... -
Constraints(openlaszlo)
2010-11-22 10:18 1132constraint 表示可变的变量赋值形式 In LZX, ... -
Events and Methods (openlaszlo)
2010-11-22 09:35 13813. Events,Methods ,han ... -
Dimdim&Moodle安装配置文档节选
2010-11-09 17:40 2559Dimdim&Moodle安装配置文档节选 ... -
Red5如何响应rmpt的请求,中间涉及哪些关键类?
2010-11-01 15:35 1551Red5如何响应rmpt的请求,中间涉及哪些关键类? 响应请 ... -
red5的eclipse插件和用法
2010-10-30 20:56 1149参见http://www.red5.org/wiki/Red5 ... -
red5集群分析
2010-10-28 19:42 50361. 边(Edge ): 1. 边的主要作用是管理连接,并可以 ... -
red5源代码分析
2010-10-26 08:59 3872Red5如何响应rmpt的请求 ... -
创建第一个red5程序
2010-10-25 15:33 21571.下载最新版本的RED5 http://osflash.or ... -
openlaszlo中多媒体组件介绍
2010-10-14 15:50 1134在openlaszlo中我们可以处理图像,音视频等媒体文件。详 ... -
openlaszlo组件的简单介绍
2010-10-14 15:50 1299openlaszlo组件的简单介绍 收藏 在写laszlo ...
相关推荐
"RTMP 协议规范中文版详解" RTMP(Real-Time Messaging Protocol)是一种应用层协议,主要用于通过可靠的传输层协议(例如 TCP)复用、打包多媒体数据流(音频、视频和交互数据)。RTMP 块流是一种基于 RTMP 的协议...
RTMP协议在直播和点播领域有着广泛的应用。 官方文档《rtmp_specification_1.0.pdf》是RTMP协议的权威指南,它详细阐述了协议的各个方面,包括连接建立、数据传输、命令消息以及错误处理等。这份文档通常包含了以下...
`rtmpdump`是基于RTMP协议的一个开源工具,它提供了一种方便的方式来捕获、分析以及回放RTMP流,对于开发者来说,是一个强大的调试和集成RTMP功能的实用程序。 **RTMP协议详解:** RTMP协议基于TCP,主要由三部分...
本文将详细介绍RTMP协议的核心概念和技术细节,并探讨其在现代多媒体通信中的应用。 #### 二、RTMP协议概述 RTMP协议是一种基于TCP的应用层协议,主要用于实时音频、视频和数据传输。它能够提供低延迟的流媒体传输...
RTMP协议规范的中文翻译文档是理解并实现该协议的关键资源,尤其对于开发者和网络流媒体服务提供者而言,具有很高的学习价值。 RTMP协议的主要特点包括以下几点: 1. **连接建立**:RTMP协议首先通过TCP建立连接,...
1. **RTMP协议**:RTMP协议基于TCP,设计时主要考虑了音视频数据的实时传输需求。它包括握手、建立连接、发布/播放、数据传输、断线重连等几个关键步骤。协议支持AMF(Action Message Format)编码的数据,能处理...
RTMP协议的工作原理是建立一个低延迟的TCP连接,通过这个连接发送编码后的音视频数据。 RTMP协议的基础: 1. 连接建立:RTMP协议首先通过TCP连接到服务器,通常在端口1935上。这个连接过程包括握手、建立通道和发送...
RTMP协议设计之初衷是实现在因特网上实现实时数据传输的高性能、高可靠性和低延迟。RTMP协议在很多直播平台和视频点播服务中得到了广泛的应用。 从官方文档来看,RTMP协议的主要知识点涵盖了以下几个方面: 1. ...
RTMP协议,全称为Real Time Messaging Protocol,是由Adobe公司开发的一种网络流媒体协议,它允许数据以极低的延迟进行实时传输。RTMP设计之初是为了在Flash/AIR平台和流媒体服务器之间传输音频、视频和数据,它作为...
本文将深入探讨一个基于RTMP协议的Android端推流Demo,以及与之相关的技术知识点。 首先,RTMP(Real-Time Messaging Protocol)是一种实时传输协议,常用于在线视频直播、音频传输等场景。它由Adobe Systems开发,...
在深入探讨RTMP的技术细节之前,首先要明确,RTMP协议是建立在TCP基础之上的,这意味着它继承了TCP的可靠传输特性,适用于需要保证数据完整性的实时数据交换。 RTMP的核心设计旨在实现流媒体数据的高效传输。它通过...
【基于Rtmp协议的流媒体直播 Demo】 在IT行业中,流媒体直播已经成为互联网内容分发的重要方式,尤其在在线教育、游戏竞技、社交娱乐等领域应用广泛。本Demo着重讲解了如何利用Rtmp(Real-Time Messaging Protocol...
以下是RTMP协议的核心知识点,基于其交互过程和报文构成的详细说明: 1. **协议概述**: RTMP协议主要用于在服务器和客户端之间进行音视频数据的实时传输,如直播或点播服务。它基于TCP,提供可靠的连接,并且支持...
RTMP块流是RTMP协议的一个重要组成部分,它允许将多媒体数据复用、打包并通过如TCP这样的传输层协议进行传输。 1. 块流的特性: - 块流是一种应用层协议,旨在复用和分组多媒体数据,包括音频、视频和交互数据。 ...
### RTMP协议中AMF的定义 #### 一、引言 实时消息传输协议(Real-Time Messaging Protocol,简称RTMP)是一种专为实时音频、视频数据传输设计的协议,广泛应用于流媒体服务中。在RTMP协议中,AMF(Action Message ...
### RTMP协议详解 #### 一、RTMP协议概述 RTMP(Real-Time Messaging Protocol),即实时消息传输协议,是由Adobe Systems开发的一种专用于音视频流传输的协议。该协议最初设计目的是为了满足互联网上实时音视频...
"rtmp协议文档.7z"这个压缩包包含了一系列关于RTMP协议的学习资料,包括中文翻译,对于想要深入理解RTMP的人来说是必不可少的资源。 首先,我们来看看"rtmp规范翻译1.0.docx",这可能是RTMP协议官方规范的中文翻译...
### RTMP协议详解 #### 一、RTMP协议概述 RTMP(Real-Time Messaging Protocol)是一种由Adobe Systems开发的协议,主要用于实现音视频等数据在客户端和服务端之间的实时传输。该协议最初是为Flash Player设计的,...