呼叫流程可以分为主叫侧和被叫侧,这里分开进行分析
主叫流程如下
- UE向P-CSCF发出SIP Invite请求,包含初始SDP消息,里面包含具体的媒体信息
- 当P-CSCF收到INVITE消息时候,需要响应100 Trying消息,意味着该消息P-CSCF已经收到
- 被叫侧对Invite请求进行响应,主叫UE收到P-CSCF发来的183 Session Progress,该消息里面携带SDP报文
- UE发送PRACK消息进行响应
- 收到被叫侧发来的响应200 OK
- 主叫UE发送Update消息 用来更新媒体信息(需要支持EARLY-MEDIA)
- 被叫侧对Update进行响应(200 OK),同样携带更新的媒体信息
- 被叫侧产生振铃消息(180 Ringing),并且对Invite消息进行响应(200 OK)
- 主叫收到200 OK响应发送ACK进行应答,这个时候通话Session已经建立
被叫流程如下
- UE收到P-CSCF发送来的Invite请求消息
- UE发送消息100 Trying进行临时响应
- UE发送183 Session Progress消息,携带媒体信息在SDP报文里面
- 收到主叫侧发送过来的PRACK消息,发送响应消息200 OK
- 收到主叫侧发来的Update消息,以200 OK消息响应,该消息里面携带协商过后的媒体流信息
- UE产生振铃消息,发送180 Ringing给主叫侧
- 发送响应Invite消息的200 OK,收到主叫侧发来的ACK应答消息,至此通话流程建立
具体的消息流程图参考如下
同时可以参考手机抓取的Log进行同步分析
主叫侧
- Invite消息里面携带的字段,并且包含媒体信息SDP内容
P-Early-Media: supported
Accept: application/sdp,application/3gpp-ims+xml
2. 183 Session Progress 消息里面携带SDP媒体信息
被叫侧消息类似
以上都是个人基于对4G VoLTE的呼叫流程的理解,如有不正确的地方还希望各位朋友能够指出,谢谢!