新闻资讯

新闻资讯 行业动态

ios直播:RTMP协议学习

编辑:008     时间:2020-02-15

一。什么是rtmp协议

RTMP协议就是Real Time Messaging Protocol,实时消息传输协议, 是Adobe公司为Flash播放器和服务器之间音、视频及数据传输开发的实时消息传送协议。协议中,视频必须是H264编码,音频必须是AAC或MP3编码,且多以flv格式封包。现在的视频直播多数是基于该协议。

RTMP协议是TCP/IP体系结构的应用层协议,它的基本数据单元是消息message,在互联网中传输数据的时候消息被拆分为更小的消息块chunk,介绍下面三种消息,消息分块和消息块;

1.消息

消息的报文结构如下图:

消息的报文由这五部分组成:消息类型id,消息长度,时间戳,和标示流媒体类型以及消息体五个部分组成

消息类型id为1-7的时候表示协议控制,一般都是RTMP协议自身管理的协议消息,用户都不需要对这部分进行操作。当message type id为8 和 9的时候表示的是传输的是音频和视频流,15-20表示的是消息用于发送AMF编码的命令,负责用户与服务器之间的交互,比如播放,暂停等等。

2.消息分块(对1中消息体的分割)

消息分块就是对1中消息体的分块,媒体传输的时候会把消息体分割成默认为128字节的消息块,当然最后一个消息分块可以是小于128字节。

消息分块的过程如下图

3.消息块

为了可以在网络上可以传输数据,一般都会将数据划分小块,消息块chunk,这里消息块分为消息头(chunk header)和块数据(chunk data),

chunk header分为了:用于标识本块的Chunk Basic Header,用于标识本块负载所属消息的Chunk Message Header,以及当时间戳溢出时才出现的Extended Timestamp

 

RTMP传输媒体数据的过程中,发送端首先把媒体数据封装成消息,然后把消息分割成消息块,最后将分割后的消息块通过TCP协议发送出去。接收端在通过TCP协议收到数据后,首先把消息块重新组合成消息,然后通过对消息进行解封装处理就可以恢复出媒体数据。

2.1 Chunk Basic Header [1-3字节]
HeaderType+ChannelID组成,其中ChannelID的大小决定了整个Chunk Basic Header的大小
2.1.1  

这个字段编码了消息块流的

ID

和消息块的类型,消息块类型决定了消息包头的编码格式,长度完全

取决于可变长的消息块流

HeaderType(fmt):决定了Chunk Message Header的编码方式和大小,在第一个字节的高两位
Bits Chunk Message Header Length
00   12 bytes
01   8 bytes
10   4 bytes
11   1 byte
2.1.2 ChannelID:
ChannelID 用途
02              Ping 和ByteRead通道
03              Invoke通道 我们的connect() publish()和自字写的NetConnection.Call() 数据都是在这个通道的
04              Audio和Vidio通道
05 06 07     服务器保留,经观察FMS2用这些Channel也用来发送音频或视频数据
2.2 Chunk Message Header
以最大fmt =00 length(Chunk Message Header) == 12 为例
Chunk Message Header的结构是:timestamp,message_length,message_type,msg_stream_id
其中message_type是一个枚举变量:
type为1,2,3,5,6的时候是协议控制消息
type为4的时候表示 User Control Messages [Event_type + Event_Data] Event_type有Stream Begin,Stream End...
type为8,音频数据
type为9,视频数据
type为18 元数据消息[AMF0]
type为20 命令消息 Command Message(RPC Message)
These messages are sent to perform some operations like connect, createStream, publish, play, pause on the peer.

命令消息主要分成两种NetConnection和NetStream。
connect,call,close,createStream命令可以在NetConnection中发送。
coonect(name,TranscationID,Command Object pair)

play,publish,seek,pause等命令可以在NetStream中发送。

2.3 Ext Time Stamp
2.4数据

 

4.RTMP媒体播放的过程!!


RTMP协议规定,播放一个流媒体有两个前提步骤:第一步,建立一个网络连接(NetConnection);第二步,建立一个网络流(NetStream)。其中,网络连接代表服务器端应用程序和客户端之间基础的连通关系。网络流代表了发送多媒体数据的通道。服务器和客户端之间只能建立一个网络连接,但是基于该连接可以创建很多网络流。

播放一个RTMP协议的流媒体需要经过以下几个步骤:握手,建立连接,建立流,播放。RTMP连接都是以握手作为开始的。建立连接阶段用于建立客户端与服务器之间的“网络连接”;建立流阶段用于建立客户端与服务器之间的“网络流”;播放阶段用于传输视音频数据。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

回复列表