WebRTC音视频实时互动技术:原理、实战与源码分析
上QQ阅读APP看书,第一时间看更新

4.3.2 信令时序

表4.1中的信令已经足够简单了,共8个信令。这8个信令还是比较好理解的,例如,当用户要进行通信,加入“房间”时,会向信令服务器发送join信令。信令服务器收到该信令后,先将该用户加入服务器管理的房间里,然后向客户端返回joined信令,表示该用户已经成功加入房间了。这就是join信令与joined信令的作用,一个用于请求加入房间,另一个用于成功应答。其他的信令与这两个信令是类似的。

图4.3清楚地表达了各信令之间的时序关系。在发送信令之前,各端要先与信令服务器SigServer建立连接。连接建立好后,终端Caller会向信令服务器发送join消息,服务器收到该消息后,返回joined消息,表示该用户已经成功加入房间;当第二个终端Callee1成功加入后,第一个终端Caller还会收到otherjoin消息,表示第二个用户也成功加入了;之后,Caller与Callee1进行媒体协商(媒体协商会在第5章介绍),即通过message消息交换WebRTC需要的ofer/answer等内容;当媒体协商成功后,双方就可以进行音视频通信了;如果此时有第三个用户Callee2请求加入,信令服务器发现房间里已经有两个用户了,则会给Callee2返回full消息,告诉它当前房间已满,不能再加入了。

同样地,在用户离开时,需要向服务器发送leave消息,服务器收到后返回left消息。客户端收到left消息说明服务器已经将它从房间中移除了。同时,服务器还会向另一方发送bye消息,通知它与它通话的用户已经走了,可以释放相关的资源了。以上就是信令的时序和它们之间的逻辑关系。

图4.3 信令时序图