Skip to content

RtmpProxy

winlin edited this page Aug 11, 2016 · 2 revisions

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,以及数据部分,都没有变更。

Clone this wiki locally