浅谈RTMP(Real Time Messaging Protocol)

        之前浅谈过了视频数据流,谈过了HLS,也谈过了HTTP-FLV,这章就浅谈一下RTMP,RTMP的数据封装和HTTP-FLV比较接近,只是多了不同的控制指令,但它不是基于HTTP协议的,而是基于TCP协议的。

        RTMP和HTTP-FLV比较接近,也是单帧数据封装并进行推送的流程,但RTMP除了能拉流,同步也支持推流,对于一个完整的直播流程,能覆盖它的视频流上传到服务器,同时分发给用户端播放的两个流程。当然,推和拉可以采用不一样的方式。

        我们先来了解RTMP的指令:

        1. 握手

                C0(1B)、S0(1B)、S1(1536B)、C1(1536B)、C2(1536B)、S2(1536B)

               S2=C1

               C2=S1

                如果涉及到加密流程,密钥的交换在这一步完成。

                具体数据封装见“RTMP协议详解”

        2. 连接

        在完成rtmp握手协议之后,通过0x14或者0x11消息,解析内置type为2的,代表具体操作指令,常用的有connect、createStream、play、publish,其中connect代表建立流连接,不是TCP连接。主要交换一个chunkSize,约定分块的大小。

        3. 创建流

        创建一个流对象Session,用于后续进行推流和拉流的动作。约定一个数据流ID的标识。使用0x11或0x14中的createStream。

        4. 推流

         使用x11或0x14中的publish指令,创建了推流消息,通过其中的app信息,进行目标视频的关联勾记,达到了推送视频数据和真实目标的匹配。

        5. 拉流

        使用x11或0x14中的play指令,创建了拉流消息,通过其中的app信息,进行了目标视频的关联勾记,达到了请求视频数据和真实目标的匹配。

        6. 接收或推送音频

        使用0x08消息进行音频数据的接收和发布,内置数据采用flv进行封装,再外部封装rtmp的chunk的封装。

        7. 接收或推送视频

        使用0x09消息进行视频数据的接收和发布,内置数据采用flv进行封装,再外部封装rtmp的chunk的封装。

        

        

        

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值