RTMP协议简介.doc
文本预览下载声明
专题报告:RTMP协议
目录
TOC \o 1-3 \h \z \u HYPERLINK \l _Toc378337493 专题报告:RTMP协议 PAGEREF _Toc378337493 \h 1
HYPERLINK \l _Toc378337494 一:什么是rtmp PAGEREF _Toc378337494 \h 2
HYPERLINK \l _Toc378337495 二:RTMP消息格式 PAGEREF _Toc378337495 \h 3
HYPERLINK \l _Toc378337496 三:RTMP握手过程 PAGEREF _Toc378337496 \h 7
HYPERLINK \l _Toc378337497 三.协议控制消息 PAGEREF _Toc378337497 \h 15
HYPERLINK \l _Toc378337498 四:消息交换的例子 PAGEREF _Toc378337498 \h 17
写在前面红色字体是重点必读,蓝色字体是分点便于区分,绿色字体是次分点便于区分
一:什么是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。有效负载是包含在消息中的实际数据,例如:它可以是一些音频样本或者压缩的视频数据。
(1)、时间戳delta(timestamp delta):消息的时间戳,占3个字节
(2)、消息长度(message length):3个字节。消息的有效负载的长度,如果消息头不能被省略,他应该包含在长度中,这个字段在消息块包头中。注意这一般和消息块的有效负载长度是不一样的。消息块的有效负载长度是除了最后一个消息块外其他所有消息块都取消息块大小的最大值(通常默认为128字节)。
(3)、消息类型 id(message type id):1个字节。协议控制消息的类型字段的范围是被保留的,这些传播信息的消息被RTMP消息块和高层协议处理,所有其他的类型ID可被高层协议使用,被RTMP消息块当做不透明的值
(4)消息流ID(message stream id):4个字节。消息流ID可以是任意值,不同的消息复用成同一消息块流以及解复用都是基于消息流ID。
消息分块
(1)、在握手以后,连接一个或者多个复用消息块,每个消息块流负载来自消息流中同一类的消息,每一个消息块的产生配有一个唯一的ID,被称为消息块流ID,消息块流在网络上传输。传输的时候每一个消息块在下一个消息块之前必
显示全部