rtmp协议学习总结.doc

rtmp协议学习总结

PAGE25 / NUMPAGES25 rtmp协议学习总结 篇一:RTMP协议简介 专题报告:RTMP 协议 目录 专题报告:RTMP协议 1 一:什么是rtmp 3 二:RTMP消息格式 5 三:RTMP握手过程 10 三.协议控制消息 21 四:消息交换的例子 25 写在前面红色字体是重点必读,蓝色字体是分点便于区分,绿色字体是次分点便于区分 一:什么是rtmp RTMP协议 Real Time Messaging Protocol(实时消息传送协议协议)实时消息传送协议是Adobe Systems公司为Flash播放器和服务器之间音频、视频和数据传输开发的私有协议。它有三种变种: 1)工作在TCP之上的明文协议,使用端口1935; 2)RTMPT封装在HTTP请求之中,可穿越防火墙; 3)RTMPS类似RTMPT,但使用的是HTTPS连接; 介绍: ? RTMP协议是被Flash用于对象,视频,音频的传输.该协议建立在TCP协议或者轮询 HTTP协议之上. ? RTMP协议就像一个用来装数据包的容器,这些数据可以是AMF格式的数据,也可以是 FLV中的视/音频数据. ? 一个单一的连接可以通过不同的通道传输多路网络流.这些通道中的包都是按照固定大 小的包传输的. RTMP中定义了两种通信单元:消息(message)和消息块(chunk).RTMP消息是协议中实现各种流媒体控制和应用的基本逻辑信息单元,消息从种类上可以分为协议控制消息、用于发送音频数据的音频消息、用于发送视频数据的视频消息、发送用户数据的数据消息、共享对象消息以及命令消息,属于相同逻辑通道的消息组成一个消息流,这个逻辑通道通过消息格式中的“消息流ID”字段来标识。 作为应用层协议,RTMP协议架构在TCP层之上,但RTMP消息并不是直接封装在TCP中,而是通过一个被称为消息块的封装单元进行传输。消息在网络上发送之前往往要分割成多个较少的部分,这些较小的部分就是消息块,属于不同消息流的消息块可以在网络上交叉发送。这样做可以保证各个消息流中的高优先级消息块能够严格按照时间顺序达到通信的对端。比如某个较长消息的实时性要求比较低,如果不进行消息块处理,等长消息都发送完毕后再发送实时性要求高的短消息,则会对流媒体的播放质量造成影响。 二:RTMP消息格式 RTMP消息包含两个部分,包头和有效负载。包头包含时间戳、消息长度、消息类型以及消息流ID。有效负载是包含在消息中的实际数据,例如:它可以是一些音频样本或者压缩的视频数据。 篇二: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(quot;rtmp://localhost/myappquot;);var ns:NetStream = new NetStream(nc); videoInstance.attachVideo(ns); ns.play(quot;flvNamequot;); 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个字节

文档评论(0)

1亿VIP精品文档

相关文档