




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
RTMP协议介绍一概述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(Real Time Messaging Protocol)实时消息传送协议是Adobe Systems公司为Flash播放器和服务器之间音频、视频和数据传输 开发的开放协议。它有多种变种:1)RTMP工作在TCP之上,默认使用端口1935;2)RTMPE在RTMP的基础上增加了加密功能;2)RTMPT封装在HTTP请求之上,可穿透防火墙;3)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);默认端口为1935三握手请求及应答Client Server :向服务器发出握手请求.这不属于协议包一部分,该握手请求第一个字节为(003),其后跟着1536个字节.尽管看上去这部分的内容对于RTMP协议来说并不是至关重要的,但也不可随意对待.Server Client :服务器向客户端回应握手请求.这部分的数据仍然不属于RTMP协议的部分.该回应的起始字节仍然为(0x03),但是后边跟着两个长度为1536个字节(一共为3072字节 )的包块.第一个1536块看上去似乎可以是任意内容,甚至好像可以是Null都没有关系.第二个1536的代码块,是上一步客户端向服务器端发送的握手请求的内容.ClientServer:把上一步服务器向客户端回应的第二块1536个字节的数据块.至此客户端与服务器端的握手结束,下面将发送RTMP协议的包内容.Client Server :向服务器发送连接包.Server Client :服务器回应. . 等等. .RTMP 数据类型001 Chunk Size changes the chunk size for packets002 Unknown anyone know this one?003 Bytes Read send every x bytes read by both sides004 Ping ping is a stream control message, has subtypes005 Server BW the servers downstream bw006 Client BW the clients upstream bw007 Unknown anyone know this one?008 Audio Data packet containing audio009 Video Data packet containing video data0x0A - 011 Unknown anyone know?012 Notify an invoke which does not expect a reply013 Shared Object has subtypes014 Invoke like remoting call, used for stream actions too.Shared Object 数据类型001 Connect002 Disconnect003 Set Attribute004 Update Data005 Update Attribute006 Send Message007 Status008 Clear Data009 Delete Data0x0A Delete Attribute0x0BInitial DataRTMP包结构RTMP包 包含一个固定长度的包头和一个最长为128字节的包体.包头可以是下面4种长度的任意一种:12, 8, 4, or 1 byte(s).第一个字节的前两个Bit很重要,它决定了包头的长度.它可以用掩码0xC0进行与计算.下面的表格罗列了可能的包头长度:Bits Header Length00 12 bytes01 8 bytes10 4 bytes11 1 byte其实RTMP包结构就是使用了AMF格式.下面是一个关于客户端向服务器端发送流的流程:ClientServer :发送一个创建流的请求.ServerClient :返回一个表示流的索引号.ClientServer :开始发送.ClientServer :发送视音频数据包(这些包在同一个频道(channel)并用流的索引号来唯一标识).四RTMP协议封包 RTMP协议封包 由一个包头和一个包体组成,包头可以是4种长度的任意一种:12, 8, 4, 1 byte(s).完整的RTMP包头应该是12bytes,包含了时间戳,AMFSize,AMFType,StreamID信息, 8字节的包头只纪录了时间戳,AMFSize,AMFType,其他字节的包头纪录信息依次类推 。包体最大长度默认为128字节,通过chunkSize可改变包体最大长度,通常当一段AFM数据超过128字节后,超过128的部分就放到了其他的RTMP封包中,包头为一个字节. 完整的12字节RTMP包头每个字节的含义: 用途 大小(Byte) 含义 Head_Type 1 包头 TIMMER 3 时间戳 AMFSize 3 数据大小 AMFType 1 数据类型 StreamID 4 流ID 1.Head_Type 第一个字节Head_Type的前两个Bit决定了包头的长度.它可以用掩码0xC0进行与计算: Head_Type的前两个Bit和长度对应关系: Bits Header Length 00 12 bytes 01 8 bytes 10 4 bytes 11 1 byte Head_Type的后面6个Bit和StreamID决定了ChannelID。 StreamID和ChannelID对应关系:StreamID=(ChannelID-4)/5+1 参考red5 ChannelID Use 02 Ping 和ByteRead通道 03 Invoke通道 我们的connect() publish()和自字写的NetConnection.Call() 数据都是在这个通道的 04 Audio和Vidio通道 05 06 07 服务器保留,经观察FMS2用这些Channel也用来发送音频或视频数据 例如在rtmp包里面经常看到的0xC2, 就表示一字节的包头,channel=2. 2. TIMMER TIMMER占3个字节纪录的是时间戳,音视频流的时间戳是统一排的。可分为绝对时间戳和相对时间戳。 fms对于同一个流,发布的时间戳接受的时间戳是有区别的 publish时间戳,采用相对时间戳,时间戳值等于当前媒体包的绝对时间戳与上个媒体包的绝对时间戳之间的差距,也就是说音视频时间戳在一个时间轴上面.单位毫秒。 play时间戳,相对时间戳,时间戳值等于当前媒体包的绝对时间戳与上个同类型媒体包的绝对时间戳之间的差距, 也就是说音视频时间戳分别为单独的时间轴,单位毫秒。 flv格式文件时间戳,绝对时间戳,时间戳长度3个字节。超过0xFFFFFF后时间戳值等于TimeStamp & 0xFFFFFF。 flv格式文件影片总时间长度保存在onMetaData的duration属性里面,长度为8个字节,是一个翻转的double类型。 3. AMFSize AMFSize占三个字节,这个长度是AMF长度,可超过RTMP包的最大长度128字节。如果超过了128字节,那么由多个后续RTMP封包组合,每个后续RTMP封包的头只占一个字节。一般就是以0xC?开头。 4. AMFType AMFSize占三个字节,这个长度是AMF长度,可超过RTMP包的最大长度128字节。 AMFType是包的类型 001 Chunk Size changes the chunk size for packets 002 Unknown 003 Bytes Read send every x bytes read by both sides 004 Ping ping is a stream control message, has subtypes 005 Server BW the servers downstream bw 006 Client BW the clients upstream bw 007 Unknown 008 Audio Data packet containing audio 009 Video Data packet containing video data 0x0A-0x0E Unknown 0x0F FLEX_STREAM_SEND TYPE_FLEX_STREAM_SEND 0x10 FLEX_SHARED_OBJECT TYPE_FLEX_SHARED_OBJECT 0x11 FLEX_MESSAGE TYPE_FLEX_MESSAGE 012 Notify an invoke which does not expect a reply 013 Shared Object has subtypes 014 Invoke like remoting call, used for stream actions too. 016 StreamData 这是FMS3出来后新增的数据类型,这种类型数据中包含AudioData和VideoData 5. StreamID StreamID是音视频流的ID,如果AMFType!=0x08 或!=0x09那么 StreamID为0。 ChannelID 和StreamID之间的计算公式:StreamID=(ChannelID-4)/5+1 参考red5 例如当ChannelID为2、3、4时StreamID都为1 当ChannelID为9的时候StreamID为2 6. 封包分析 例如有一个RTMP封包的数据03 00 00 00 00 01 02 14 00 00 00 00 02 00 07 63 6F 6E 6E 65 63 74 00 3F F0 00 00 00 00 00 00 08 , 数据依次解析的含义 03表示12字节头,channelid=3 000000表示Timmer=0 000102表示AMFSize=18 14表示AMFType=Inv
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工业设计色彩课件
- 年度岗位安全培训计划课件
- 年度安全检查培训计划表课件
- 年度安全培训总结报道课件
- 2024年湖南能源集团招聘考试真题
- 威尼斯的小艇教学课件
- 威亚安全生产培训记录课件
- Florbetaben-生命科学试剂-MCE
- FAPI-P8PN-生命科学试剂-MCE
- exo-α-Arabinofuranosidase-Caldicellulosiruptor-saccharolyticus-生命科学试剂-MCE
- 电网调度规程培训
- 公司各类补贴管理办法
- 健康护理宣教:案例与实践
- 汽车工厂培训课件
- AI技术助力研究生个性化培养的探索与实践
- 2025年阿托西班用药指导试题
- 拔牙后健康教育与护理指南
- 餐饮业食品安全管理与操作规范培训计划
- 拼多多培训课件
- 2025年铜化集团招聘笔试备考题库(带答案详解)
- GB/T 45696-2025公共汽电车场站分类及等级划分
评论
0/150
提交评论