ios 自己对RTMP认识和理解
通过直播的学习使用到了RTMP协议的传输,RTMP是Real-Time Messaging Protocol(实时消息传送协议)的缩写,它是Adobe Systems公司为Flash播放器和服务器之间音频、视频和数据传输开发的私有协议。
下面就具体的介绍RTMP:
RTMP分为两部分包头和AMF数据(也可以说是包体),这两部分就是我们传输数据两大元素。
如图:
一、包头:
RTMP包头有4种长度的任意一种,4种长度分别有12, 8, 4, 1 byte(s)。最为理想的RTMP包头为12bytes这种,这种也是完整音视频使用的头,其中里面包含了时间戳,Head_Type,AMFSizs,AMFType,StreamID信息。8字节的包头只纪录了时间戳,Head_Type,AMFSizs,AMFType,它就与12个字节的少了StreamID,StreamID是干嘛后面在介绍。 4个字节的包头记录了时间戳,Head_Type。1个字节的包头只记录了Head_Type 。
下面我们就重点介绍完整的RTMP包头有12字节。它是下面5个部分组成:
用途 大小(Byte) 含义
Head_Type 1 包头
TIMER 3 时间戳
AMFSize 3 数据大小
AMFType 1 数据类型
StreamID 4 流ID
这里讲解一下5个部分各自作用和含义:
图:
二、包体:
Rtmp包默认的最大长度为128字节,(或通过chunksize改变rtmp包最大长度), 当AMF数据超过128Byte的时候就可能有多个rtmp包组成。如果需要解码的rtmp包太长则被TCP协议分割成多个TCP包.那么解码的时候需要先将包含rtmp包的tcp封包合并, 再把合并的数据解码,解码后可得到amf格式的数据,将这些AMF数据取出来就可以对AMF数据解码了.
图:
上图就是具体包体的具体情况。