现在的位置: 首页 > 综合 > 正文

RTMP和HTTP的区别可以大概分为以下两点:

2013年10月11日 ⁄ 综合 ⁄ 共 2012字 ⁄ 字号 评论关闭

1,HTTP方式: 

       先通过IIS 将FLV下载到本地缓存,然后再通过NetConnection的本地连接来播放这个FLV,这种方法是播放本地的视频,并不是播放服务器的视频。因此在本地缓存里可以找到这个FLV。其优点就是服务器下载完这个FLV,服务器就没有消耗了,节省服务器消耗。其缺点就是FLV会缓存在客户端,对FLV的保密性不好。HTTP完全不需要RED5或者 FMS的服务器端的支持,普通的WEB服务器都可以实现(虚拟主机)

2,RTMP方式: 

       通过NetConnection连接到FMS/Red5服务器,并实时播放服务器的FLV文件,这种方式可以任意选择视频播放点(SEEK()),并不象HTTP方式需要缓存完整个FLV文件到本地才可以任意选择播放点,其优点就是在本地缓存里是找不到这个FLV文件的。其优点就是FLV不会缓存在客户端,FLV的保密性好,其缺点就是消耗服务器资源,连接始终是实时的。

RTMP包结构

[协议头](4种长度:1,2, 8, 4字节)

[协议体](最长为128字节)

[协议数据]

一个完整的协议体(包括头),应该是12byte长
       1 2 3 4 5 6 7 8 9 10 11 12
第一个字节的前两个Bit,决定了包头的长度.它可以用掩码0xC0进行"与"计算.下面的表格罗列了可能的包头长度: Bits Header Length 
       00 12 bytes 完整头,标示新流 
       01 8 bytes 
       10 4 bytes 
       11 1 byte

2-4号位 时间戳
5-7号位 标示了AMF体的长度,协议数据的长度。流体最大为128的chunk,如果大于这个数值,将会被分包,但是有且仅有一个12位完整头描述了完整体的大小。
8号位 AMF对象类型
0×01 Chunk Size changes the chunk size for packets 
0×02 Unknown anyone know this one? 
0×03 Bytes Read send every x bytes read by both sides 
0×04 Ping ping is a stream control message, has subtypes 
0×05 Server BW the servers downstream bw 
0×06 Client BW the clients upstream bw 
0×07 Unknown anyone know this one? 
0×08 Audio Data packet containing audio 
0×09 Video Data packet containing video data 
0x0A - 0×11 Unknown anyone know? 
0×12 Notify an invoke which does not expect a reply 
0×13 Shared Object has subtypes 
0×14 Invoke like remoting call, used for stream actions too.

9-12号位定义了流的频道号,反转后获取

协议的净核

RTMP 的协议净核是用 AMF 格式来描述。采用二进制压缩,序列化、反序列化、传输数据,从而为 Flash 播放器与 Flash Remoting(需要浏览器支持 Binary POST) 网关通信提供了一种轻量级的、高效能的通信方式。

Flash Player 以系统时间作为种子通过某种算法生成的数字签名,大小是 1537 字节向服务器发起第一次握手,服务器根据客户端的数字签名产生一个 3073 字节的验证包,给客户端,客户端在接受到服务器的回应以后会发送一个 1536 字节的回复。

Client→Server :发送一个创建流的请求.
Server→Client :返回一个表示流的索引号.
Client→Server :开始发送.
Client→Server :发送视音频数据包(这些包在同一个频道(channel)并用流的索引号来唯一标识).

握手过程:

Client → Server :向服务器发出握手请求.这不属于协议包一部分,该握手请求第一个字节为(0×03),其后跟着1536个字节.经管看上去这部分的内容对于RTMP协议来说并不是至关重要的,但也不可随意对待.
Server → Client :服务器向客户端回应握手请求.这部分的数据仍然不属于RTMP协议的部分.该回应的其实字节仍然为(0x03),但是后边跟着个长度为1536个字节(一共为3072 )的包块.第一个1536块看上去似乎可以是任意内容,甚至好像可以是Null都没有关系.第二个1536的代码块,是上一步客户端向服务器端发送的握手请求的内容.
Client→Server:把上一步服务器向客户端回应的第二块1536个字节的数据块.

至此客户端与服务器端的握手结束,下面将发送RTMP协议的包内容.

Client → Server :向服务器发送连接包.
Server → Client :服务器回应.
... ....

抱歉!评论已关闭.