webrtc通话过程:
- 如果是语音通话,首先通过配置信息,判断是否开启webrtc功能。
- 如果开启了或者是视频通话,拨号方会通过本地数据库获取接听方应用平台类型、版本号信息。现在只有在应用是Android 以及Android版本号是大于等于241才能够使用webrtc功能。如果本地没有保存对方版本信息等,通过接口获取并以json格式包存到本地。
- 拨号方首先以cmd命令的形式通过sip 发送call_request 命令去获取对方是否空闲 。
- 服务器会返回消息成功,失败回执,如果失败:被叫方是ios就继续等待,如果被叫方是Android 就挂断电话,告知用户”对方不在线”。如果成功不做处理
- 拨号方收到对方空闲的命令后发送webrtc通话请求,以cmd命令的形式通过sip发送message_type_call,如果这个时候拨打方已经收集到了SDP数据就将sdp数据一并带过去,如果这个时候本地还没收集到sdp就继续等待,等sdp收集了在发送message_type_call。
- 接收方收到message_type_call命令的通话请求后弹出接听电话界面,并且将收到的sdp设置到本地,做接听或者挂断操作,如果点击接听:跳转到通话界面,显示’正在连接中’,并且以cmd的形式通过sip发送message_type_answer,如果这个时候接听方收集到了sdp、 将sdp带上发送给拨打方,如果这个时候接听方还没收集到sdp就等待,等收集到了在跟message_type_answer命令一起发送给拨打方,并且把收集到的ice单独以sip 信令发送message_type_iceCandidat给拨打方。
- 拨打方收到对方接听电话的命令,发送收集到的ice信息以sip 信令发送message_type_iceCandidat命令给接听方。界面跳转到通话界面,并显示”正在连接中...”
- 接听方收到对方发送来的ice命令后将相关信息设置进webrtc的相关方法。并将自己接收到的ice信息发送给拨打方
- 相互设置了sdp跟ice后,webrtc会建立两端的连接,并将连接状态通个ice的状态返回,如果收到ice的状态IceConnectionState.CONNECTED说明这时两端才真正建立了通话,如果拨打的是视频通话,这个时候拨打方需要发送一个开启视频通话的cmd命令switchvideo_request
注意事项:在发送