對講後臺業務架構圖如下圖:
圖1、對講後臺業務架構圖
通過NGINX負載Janus http服務器的API接口,通過該API接口可以獲取可用Janus服務器的IP和端口;客戶端拿到可用對講服務器的IP和端口後,通過WebSocket連接到該服務器,並保持長連接,客戶端進入會議室時,則複用這條長連接;如果進入其他會議室,則需要重新獲取可用的Janus服務器IP和端口,並重覆上述過程;多個對講服務器之間通過RabbitMQ共享數據,三個服務器之間對等對外提供服務。
客戶端進入會議室對講主要流程:
客戶端加入會議室後,使用兩個peerconnection分別用來做publisher角色和subscriber角色類型通信,publisher主要用來講話的通道,subscriber則主要用來聽對講的通道;每次講話前都需要申請TBCP講話權限,獲取成功,則開啓錄音,併發送數據,否則不開啓錄音;如果其他人在講話,則打開播放器,開始播放聲音,主要業務流程如下圖:
圖2、對講客戶端主要業務
詳細的客戶端加入流程如下圖3所示:
圖3、對講加入羣組主要業務流程
退出會議室時,一定要保證兩個Peerconnection的連接都能同服務器斷開;
斷網重連流程:如果碰到斷網重連時,需要重新獲取該房間的janus服務器的IP和端口,並在重連WebSocket成功後,重走圖3的流程,完成重新自動進入對講房間的工作。