RTMP代理的协议规范(RtmpProxy)

Posted “好记性不如”烂博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RTMP代理的协议规范(RtmpProxy)相关的知识,希望对你有一定的参考价值。

RtmpProxy

关于RTMP代理的协议规范。RTMP是字节协议,第一个包是c0,1个字节,一般是03表示是明文的RTMP。所以如果需要做RTMP代理,如果直接转发RTMP客户端的消息,是没法传递额外的信息的,譬如HTTP代理在Header中传递的X-Real-IP,即客户端的IP,就没法给RTMP的后端了。

因此,RTMP的Proxy协议必须使用私有协议,c0的意义必须改写了,譬如另外一个值表示是代理,后面跟随了一些协议信息,这个协议就是RTMP Proxy协议。

Protocol
使用网络字节序,big-endian。在C0前插入代理的包,兼容RTMP标准协议。

标准RTMP协议如下:

C0,     1B, 03表示明文RTMP。后面是C1C2以及其他消息。

RTMP代理协议如下:

F3,         1B,常量0xF3,表示RTMP代理协议。
Size,       2B, 表示代理数据的长度,即Size和C0之间的数据。
X-Real-IP,  4B, 表示客户端的真实IP。
C0,         1B,原始客户端的C0,方便代理直接转发客户端的数据。
备注:一般Size应该不超过C0C1长度,即Size<=1537

例如,标准RTMP客户端的消息:

03            // 客户端的C0包,后面是C1C2,以及其他的消息。

或者,代理客户端发送的消息:

F3            // 表示是RTMP代理
00 04         // 表示Extra有4字节
C0 A8 01 67   // 表示客户端IP,C0.A8.01.67,即192.168.1.103
03            // 客户端原始的C0数据。从这个数据(包括它本身)开始,就是客户端发送的消息了,譬如C1C2。

RTMP协议,譬如握手的C0、C1、C2、S0、S1、S2,以及数据部分,都没有变更。

以上是关于RTMP代理的协议规范(RtmpProxy)的主要内容,如果未能解决你的问题,请参考以下文章

RTMP规范协议

rtmp规范1.0全面指南

RTMP规范(重新整理版)

RTMP协议抓包分析推流过程

nginx rtmp

2022 无人直播rtmp推流工具-技术实现与思路