ios 自己对RTMP认识和理解

Paste_Image.png

通过直播的学习使用到了RTMP协议的传输,RTMP是Real-Time Messaging Protocol(实时消息传送协议)的缩写,它是Adobe Systems公司为Flash播放器和服务器之间音频、视频和数据传输开发的私有协议。
下面就具体的介绍RTMP:
RTMP分为两部分包头和AMF数据(也可以说是包体),这两部分就是我们传输数据两大元素。
如图:

Paste_Image.png

一、包头:
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个部分各自作用和含义:
图:

Paste_Image.png

二、包体:
Rtmp包默认的最大长度为128字节,(或通过chunksize改变rtmp包最大长度), 当AMF数据超过128Byte的时候就可能有多个rtmp包组成。如果需要解码的rtmp包太长则被TCP协议分割成多个TCP包.那么解码的时候需要先将包含rtmp包的tcp封包合并, 再把合并的数据解码,解码后可得到amf格式的数据,将这些AMF数据取出来就可以对AMF数据解码了.
图:

Paste_Image.png

上图就是具体包体的具体情况。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。