rtmp客户端发送connect消息之后,rtmp server会给客户端发送_result消息,通过该消息通知客户端连接状态(success/fail)。这一篇我们就详细来讲讲_result消息。
1.概览
老规矩,我们先来看一个_result消息的抓包。
可以看到,一个_result消息由4部分组成,类型标识,transaction ID,properties,response related information,这四部分均以AMF格式进行编码,我们一一来看:
2.详解
典型的类型+长度+值的AMF组合,不多说了,_result表示消息类型。
transcationID,按照AMF0格式编码,0x00表示数字格式,其后用8个字节表示ID,对于connect消息的回复,此ID恒为1。
可以看出properties中包含了两个Object类型的数据,一个fmsVer表示了FMS 服务器的版本信息(此处为FMS/3,0,1,123),另外一个capabilites表示容量,值为31。关于RTMP Body中的Object对象数据组织格式,就不赘述了,可以参照之前对于connect消息的详细解释。
通过看抓包文件,我们可以看出这里包含许多关于connect连接的响应,以object类型进行组织。有level,此处为status,意味表示连接的状态;code,表示代码,可以理解为某种编号,此处为NetConnection.Connect.Succes;description可以理解为对code的描述,此处为‘Connection succeeded’。code与description联合起来,表示此次连接成功;还有关于objectEncoding字段,表示object以那种方式编码(AMF0或者AMF3),此处值为0,表示采用AMF0编码。
客户端收到_result,获取连接状态为Connection succeeded。这样关于连接的建立基本就完成了,接下来就可以进行流相关的操作了。下期我们再见。