RTMP直播协议是什么?还有什么直播协议
RTMP(Real-Time Messaging Protocol实时消息传送协议)的缩写,它是Adobe Systems公司为Flash播放器和服务器之间音频、视频和数据传输开发的协议。这是一个标准的,未加密的实时消息传递协议,默认端口是1935,如果未指定连接端口,那么flash客户端会尝试连接其他端口,其尝试连接顺序按照下列顺序依次连接:1935、443、80(RTMP), 80(RTMPT)。
RTMPT,RTMP的变种,此协建立在HTTP协议之上,是通过HTTP封装后的RTMP协议,默认端口80。
RTMPS,RTMP的另一个变种,此协议是通过SSL(Secure Sockets L***er 安全套接层)加密的RTMP协议,为数据通讯提供安全支持。SSL在传输层对网络连接进行加密,默认端口443。
RTMPE,RTMP的变种,RTMPE是一个加密版本的RTMP,和RTMPS不同的是RTMPE不采用SSL加密,RTMPE加密快于SSL,并且不需要认证管理。如果没有指定RTMPE端口,Flash播放器将像RTMP协议一样依次扫描下列端口,1935(RTMPE),443(RTMPE) ,80(RTMPE),80(RTMPTE)。
RTMPTE,RTMPTE 这个协议是一个通过加密通道连接的RTMPE,默认端口80。
RTMFP,RTMFP是Adobe公司开发的一套新的通信协议,该协议可以让使用Adobe Flash Pl***er的终端用户之间进行直接通信。
rtmp协议详解
rtmp连接从握手开始。它包含三个固定大小的块。客户端发送的三个块命名为c0,c1,c2;服务端发送的三个块命名为S0,S1,S2。
握手序列:
764 bytes digest 结构:
version(1byte):版本。在C0包内,这个字段代表客户端请求的RTMP版本号。在S0包内,这个字段代表服务端选择的RTMP版本号。当前使用的版本是3。在版本0-2用在早期的产品中,如今已经弃用;版本4-31被预留用于后续产品;版本32-255(为了区分RTMAP协议和文本协议,文本协议通常是可以打印字符)不允许使用。如果服务端无法识别客户端的版本号,应该回复版本3。客户端可以选择降低到版本3,或者终止握手过程。
包含chunk stream ID(流通道id)和chunk type(即fmt), chunk stream id 一般被简写为CSID,用来唯一标识一个特定的流通道,chunk type决定了后面的Message Header的格式。Basic Header的长度可能是1,2,或者3个字节,其中chunk type的长度是固定的(占2位,单位是bit),Basic Header的长度取决于CSID的大小,在足够存储这两个字段的前提下***使用最少的字节从而减少由于引入Header增加的数据量。
RTMP协议支持用户自定义[3,65599] 之间的 CSID,0, 1, 2 由协议保留表示特殊信息。0 代表 Basic Header 总共要占用 2 个字节,CSID 在 [64,319] 之间; 1 代表占用 3 个字节,CSID 在 [64,65599] 之间; 2 代表该 chunk 是控制信息和一些命令信息。
包含了要发送的实际消息(可能是完整的,也可能是一部分)的描述消息。Message Header的格式和长度取决于Basic Header的chunk type,即fmt,共有四种不同的格式。其中一种格式可以表示其他三种表示的所有数据,但由于其他三种格式是基于对之前chunk的差量化的表示,因此可以更简洁地表示相同的数据,实际使用的时候还是应该采用尽量少的字节表示相同意义的数据。下面按字节从多到少的顺序分别介绍这四种格式的 Message Header。
type=0时Message Header占用11个字节,其他三种能表示的数据它都能表示,但Chunk stream的开始***个chunk和头信息中时间戳后退(即值与上一个chunk相比减少,通常在回退播放的时候会出现这种情况)的时候必须采用这种格式。
type为1时占用7个字节,省去了表示message stream id的4个字节,表示此chunk和上一次发的chunk所在的流相同,如果在发送端和对端有一个流链接的时候可以尽量采用这种格式。
type 为 2 时占用 3 个字节,相对于 type = 1 格式又省去了表示消息长度的3个字节和表示消息类型的1个字节,表示此 chunk和上一次发送的 chunk 所在的流、消息的长度和消息的类型都相同。余下的这三个字节表示 timestamp delta,使用同type=1。
type=3时,为0字节,表示这个chunk的Message Header和上一个是完全相同的。当它跟在type=0的chunk后面时,表示和前一
个 chunk 的时间戳都是相同。什么时候连时间戳都是相同呢?就是一个 Message 拆分成多个 chunk,这个 chunk 和上一个 chunk 同属于一个 Message。而当它跟在 type = 1或 type = 2 的chunk后面时的chunk后面时,表示和前一个 chunk的时间戳的差是相同的。比如***个 chunk 的 type = 0,timestamp = 100,第二个 chunk 的 type = 2,timestamp delta = 20,表示时间戳为 100 + 20 = 120,第三个 chunk 的 type = 3,表示 timestamp delta = 20,时间戳为 120 + 20 = 140。
在 chunk 中会有时间戳 timestamp 和时间戳差 timestamp delta,并且它们不会同时存在,只有这两者之一大于3字节能表示的***数值 0xFFFFFF = 16777215 时,才会用这个字段来表示真正的时间戳,否则这个字段为 0。扩展时间戳占 4 个字节,
能表示的***数值就是 0xFFFFFFFF = 4294967295。当扩展时间戳启用时,timestamp字段或者timestamp delta要全置为1,而不是减去时间戳或者时间戳差的值。
最后实际发送的chunk如下面表格所示,该表格展示了由此音频流产生的块信息。从第 3 条信息开始,数据传输达到***优化。每条消息的头部只增加了 1 字节长度。
什么是rtmp直播流
RTMP是Real Time Messaging Protocol(实时消息传输协议),是adobe公司的协议。
视频直播有多种协议,使用rtmp协议的就是rtmp直播。
直播流就是视频流,即传递的视频数据。
rmtp的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于日冕图片、rmtp的信息别忘了在本站进行查找喔。