1 电话会议整体流程
以下呼叫流程和日志分析描述了UE中的呼叫会议过程
前提条件: UE1 保持 UE2 并与 UE3 通话。
- a 当 UE1 收到开始会议的请求时,它会将与 UE3 的当前通话置于保持状态。
- b
- c UE1 向会议服务器发送 REFER 消息,其中包含要添加到会议的 UE 的 URI。 在这种情况下,它是 UE2。
- d
- e UE1收到UE2已接受与会议服务器通话的Notify消息后,结束与UE2的通话。
- f
注意 :在此设置过程结束时,每个 UE 都与进行媒体复用的会议服务器进行独立的点对点呼叫。
2 电话会议详细流程及log分析
0 前提条件 -- 完成电话添加
关键字:QMI --> Service_VOICE
UE1 和 UE2 之间的 VoIP 呼叫处于 HOLD 状态,并且 UE1 和 UE3 之间有一个发起的 VoIP 呼叫正在通话中。
关于电话添加的详细内容,请单独参考
08:59:25.980013 [0x1544] QMI_MCS_QCSI_PKT
packetVersion = 2
V2 {
MsgType = Indication //通话状态上报
Service_VOICE { //QMI关键字:Service_VOICE
ServiceVOICEV2 {
voice_all_call_status {
voice_all_call_status_indTlvs[0] {
Type = 0x01
Length = 15
call_info {
num_of_instances = 2
call_info[0] {
call_id = 2
call_state = CALL_STATE_CONVERSATION //UE1和UE3处于CONVERSATION(通话)状态
call_type = CALL_TYPE_VOICE_IP
}
call_info[1] {
call_id = 1
call_state = CALL_STATE_HOLD //UE1和UE2处于HOLD状态
call_type = CALL_TYPE_VOICE_IP
}
}
}
voice_all_call_status_indTlvs[3] {
remote_party_number {
num_instances = 2 //当前有2路通话
remote_party_number[0] {
call_id = 2 //第2路通话(UE3)信息
number_pi = PRESENTATION_NUM_ALLOWED
number_len = 1
number = {
+, 9, 0, 5, 4, 6, 1, 8,
2, 9, 0, 9, 4
}
}
remote_party_number[1] {
call_id = 1 //第1路通话(UE2)信息
number_pi = PRESENTATION_NUM_ALLOWED
number_len = 11
number = {
0, 5, 5, 2, 6, 2, 9, 8,
9, 2, 0
}
}
}
}
}
}
}
}
1 UI通过QMI请求电话会议
关键字:QMI --> Service_VOICE
08:59:31.512797 [0x1544] QMI_MCS_QCSI_PKT
packetVersion = 2
V2 {
MsgType = Request //电话会议请求消息
ServiceId = VOICE
MinorRev = 106 //请求消息ID
Service_VOICE { //语音通话关键字:Service_VOICE
ServiceVOICEV2 {
voice_manage_ip_calls {
voice_manage_ip_calls_reqTlvs[0] {
sups_type {
sups_type = VOIP_SUPS_TYPE_MAKE_CONFERENCE_CALL //电话会议请求标志信息
}
}
}
}
}
}
2 CM 通过 QMI 接收请求。 CM通知IMS暂停UE1和UE3之间的通话
关键字:Call Manager|IMS
08:59:31.513099 Call Manager/High [ cmipcall.c 5583] =CM= IP CALLCMD: cmd=3, as_id=0, is_ims_cap_on_sub=1
08:59:31.513099 Call Manager/High [ cmipapp.c 6372] =CM= CM->IMS: CMIPAPP: Send cmd MPTY to app 2, as_id 0
08:59:31.513099 IMS/High [ qipcallh.c 36470] qipcallh_process_call_request: eCallCbType = 13
08:59:31.513984 IMS/High [ qpDplCallCtrl.c 7957] qpDplCallCtrlReportInd: eRptNameType = 606
08:59:31.513984 Call Manager/High [ cmtask.c 10965] =CM= CM<< IP cmd:606
08:59:31.513984 Call Manager/High [ cmipcall.c 4265] =CM= IP RXD: CALL_HOLD, id=5, as_id=0
3 QMI 向 UI 指示两个呼叫都处于保持状态
关键字:QMI --> Service_VOICE
08:59:32.187003 [0x1544] QMI_MCS_QCSI_PKT
packetVersion = 2
V2 {
MsgType = Indication //通话状态上报
Service_VOICE { //QMI关键字:Service_VOICE
ServiceVOICEV2 {
voice_all_call_status {
voice_all_call_status_indTlvs[0] {
call_info {
num_of_instances = 2
call_info[0] {
call_id = 2
call_state = CALL_STATE_HOLD //UE1和UE3处于HOLD状态
call_type = CALL_TYPE_VOICE_IP
}
call_info[1] {
call_id = 1
call_state = CALL_STATE_HOLD //UE1和UE2处于HOLD状态
call_type = CALL_TYPE_VOICE_IP
}
}
}
voice_all_call_status_indTlvs[2] {
remote_party_number {
num_instances = 2 //当前有2路通话
remote_party_number[0] { //第2路通话(UE3)信息
call_id = 2
number_len = 13
number = {
+, 9, 0, 5, 4, 6, 1, 8,
2, 9, 0, 9, 4
}
}
remote_party_number[1] { //第1路通话(UE2)信息
call_id = 1
number_len = 11
number = {
0, 5, 5, 2, 6, 2, 9, 8,
9, 2, 0
}
}
}
}
}
}
}
}
4 IMS收到多方通话请求
关键字:Call Manager|IMS
08:59:32.205990 Call Manager/High [ cmipapp.c 5350] =CM= CM->IMS: CMIPAPP: Sending IP orig, sys_mode 256, app_id 2 pi 0 orig call_id 7, call_type 1, as_id 0
08:59:32.207005 IMS/High [ qipcallh.c 36470] qipcallh_process_call_request: eCallCbType = 0
CM 向 QMI 指示“电话会议发起状态”发送到 UI --> 中间态可忽略
关键字:QMI --> Service_VOICE
08:59:32.206003 [0x1544] QMI_MCS_QCSI_PKT
packetVersion = 2
V2 {
MsgType = Indication //通话状态上报
Service_VOICE { //QMI关键字Service_VOICE
ServiceVOICEV2 {
voice_all_call_status {
voice_all_call_status_indTlvs[0] {
Type = 0x01
Length = 22
call_info {
num_of_instances = 3
call_info[0] { //UE1和电话会议处于发起(ORIGINATING)状态
call_id = 3
call_state = CALL_STATE_ORIGINATING
call_type = CALL_TYPE_VOICE_IP
}
call_info[1] { //UE1和UE3处于HOLD状态
call_id = 2
call_state = CALL_STATE_HOLD
call_type = CALL_TYPE_VOICE_IP
}
call_info[2] { //UE1和UE2处于HOLD状态
call_id = 1
call_state = CALL_STATE_HOLD
call_type = CALL_TYPE_VOICE_IP
}
}
}
voice_all_call_status_indTlvs[2] {
remote_party_number {
num_instances = 3 //当前有3路通话
remote_party_number[0] { //第3路通话-电话会议
call_id = 3
number_len = 5
number = { m, m, t, e, l }
}
remote_party_number[1] { //第2路通话(UE3)信息
call_id = 2
number_len = 13
number = {
+, 9, 0, 5, 4, 6, 1, 8,
2, 9, 0, 9, 4
}
}
remote_party_number[2] { //第1路通话(UE2)信息
call_id = 1
number_len = 11
number = {
0, 5, 5, 2, 6, 2, 9, 8,
9, 2, 0
}
}
}
}
}
}
}
}
5 IMS通过框架发出邀请消息连接会议服务器
关键字:OTA --IMS
08:59:32.226002 IMS SIP Message Length: 2543
Direction = UE_TO_NETWORK
Message ID = IMS_SIP_INVITE
Response Code = INFORMAL_RESPONSE (0)
08:59:32.257032 IMS SIP Message Length: 464
Direction = NETWORK_TO_UE
Message ID = IMS_SIP_INVITE
Response Code = TRYING (100)
08:59:32.626005 IMS SIP Message Length: 1445
Direction = NETWORK_TO_UE
Message ID = IMS_SIP_INVITE
Response Code = OK (200)
6 CM 向 QMI 指示电话会议的状态以发送到 UI
关键字:Call Manager|IMS --> qipcall_process_messages_from_qimfif
关键字 qipcall_process_messages_from_qimfif 是将SIP消息中的关键信息过滤出来的信息
08:59:32.627995 IMS/High [ qipcall.c 1565] qipcall_process_messages_from_qimfif: Rxed Connected - Incoming Established
08:59:32.632005 Call Manager/High [ cmipapp.c 4078] =CM= IMS_RPT: RPT name 617
08:59:32.632005 Call Manager/High [ cmtask.c 10965] =CM= CM<< IP cmd:617
7 QMI 将指示发送到 UI
关键字:QMI --> Service_VOICE
08:59:32.632007 [0x1544] QMI_MCS_QCSI_PKT
packetVersion = 2
V2 {
MsgType = Indication //通话状态上报
Service_VOICE { //QMI关键字Service_VOICE
ServiceVOICEV2 {
voice_all_call_status {
voice_all_call_status_indTlvs[0] {
call_info {
num_of_instances = 3
call_info[0] { //UE1和电话会议处于通话(CONVERSATION)状态
call_id = 3
call_state = CALL_STATE_CONVERSATION
call_type = CALL_TYPE_VOICE_IP
}
call_info[1] { //UE1和UE3处于HOLD状态
call_id = 2
call_state = CALL_STATE_HOLD
call_type = CALL_TYPE_VOICE_IP
}
call_info[2] { //UE1和UE2处于HOLD状态
call_id = 1
call_state = CALL_STATE_HOLD
call_type = CALL_TYPE_VOICE_IP
}
}
}
voice_all_call_status_indTlvs[3] {
remote_party_number {
num_instances = 3 //当前有3路通话
remote_party_number[0] { //第3路通话-电话会议
call_id = 3
number_len = 5
number = { m, m, t, e, l }
}
remote_party_number[1] { //第2路通话(UE3)信息
call_id = 2
number_len = 13
number = {
+, 9, 0, 5, 4, 6, 1, 8,
2, 9, 0, 9, 4
}
}
remote_party_number[2] { //第1路通话(UE2)信息
call_id = 1
number_len = 11
number = {
0, 5, 5, 2, 6, 2, 9, 8,
9, 2, 0
}
}
}
}
}
}
}
}
8 一旦与会议服务器的通话建立,UE 会发送一条Refer 消息将UE2 添加到电话会议中。
关键字:OTA --IMS
08:59:32.758080 IMS SIP Message Length: 1624 //UE请求将 UE2 添加到电话会议
Direction = UE_TO_NETWORK
Message ID = IMS_SIP_REFER
Response Code = INFORMAL_RESPONSE (0)
08:59:32.816001 IMS SIP Message Length: 579 //网络回复接受
Direction = NETWORK_TO_UE
Message ID = IMS_SIP_REFER
Response Code = ACCEPTED (202)
9 UE1 到 UE2 的呼叫结束状态指示给 QMI 通知给 UI
关键字:Call Manager|IMS --> qipcallh_chg_state_to_null / OTA --IMS
08:59:33.123021 IMS/High [ qipcallh.c 9199] [qipcallh_chg_state_to_null] [call_id: 5] [state: 14], end_reason = 0, end_request_type = 2
08:59:33.123033 IMS VoLTE Session End Length: 271
Terminating Uri = tel:05526298920;phone-context=ims.mnc003.mcc286.3gppnetwork.org
End Cause = MO initiated
08:59:33.139010 IMS/Medium [qipcall_indication.c 611] qipcall_call_end_rpt_ind: call_id=5, state=1, cause=0, error code=-1, sip error code=0, emerg_srv_cat=0
08:59:33.139010 Call Manager/High [ cmipapp.c 4078] =CM= IMS_RPT: RPT name 605
08:59:33.139010 Call Manager/High [ cmtask.c 10965] =CM= CM<< IP cmd:605
08:59:33.139010 Call Manager/High [ cmipcall.c 3600] =CM= AS_ID 0, IP RXD: CALL_END, end_cause=0, client_end_cause=-1, call_id=5, call_state=3, is_lte_hard_failure=0
10 UE1 到 UE2 呼叫的状态通过 QMI 指示给 UI
关键字:QMI --> Service_VOICE
08:59:33.140039 [0x1544] QMI_MCS_QCSI_PKT
packetVersion = 2
V2 {
MsgType = Indication //通话状态上报
Service_VOICE { //QMI关键字Service_VOICE
ServiceVOICEV2 {
voice_all_call_status {
voice_all_call_status_indTlvs[0] {
Type = 0x01
Length = 22
call_info {
num_of_instances = 3
call_info[0] { //UE1和电话会议处于通话(CONVERSATION)状态
call_id = 3
call_state = CALL_STATE_CONVERSATION
call_type = CALL_TYPE_VOICE_IP
}
call_info[1] { //UE1和UE2处于HOLD状态
call_id = 2
call_state = CALL_STATE_HOLD
call_type = CALL_TYPE_VOICE_IP
}
call_info[2] { //UE1和UE2处于END状态
call_id = 1
call_state = CALL_STATE_END
call_type = CALL_TYPE_VOICE_IP
}
}
}
voice_all_call_status_indTlvs[3] {
remote_party_number {
num_instances = 3 //当前有3路通话
remote_party_number[0] { //第3路通话-电话会议
call_id = 3
number_len = 5
number = { m, m, t, e, l }
}
remote_party_number[1] { //第2路通话(UE3)信息
call_id = 2
number_len = 13
number = {
+, 9, 0, 5, 4, 6, 1, 8,
2, 9, 0, 9, 4
}
}
remote_party_number[2] { //第1路通话(UE2)信息
call_id = 1
number_len = 11
number = {
0, 5, 5, 2, 6, 2, 9, 8,
9, 2, 0
}
}
}
}
}
}
}
}
11 UE发送refer消息将UE3加入电话会议
关键字:OTA --IMS
08:59:33.138184 IMS SIP Message Length: 1578 //UE请求将 UE3 添加到电话会议
Direction = UE_TO_NETWORK
Message ID = IMS_SIP_REFER
Response Code = INFORMAL_RESPONSE (0)
08:59:33.208057 IMS SIP Message Length: 579 //网络回复接受
Direction = NETWORK_TO_UE
Message ID = IMS_SIP_REFER
Response Code = ACCEPTED (202)
12 UE3加入会议后,IMS发送SIP BYE消息结束与UE3的通话
关键字:OTA --IMS
08:59:33.944150 IMS SIP Message Length: 601 //网络下发BYE消息
Direction = NETWORK_TO_UE
Message ID = IMS_SIP_BYE
Response Code = INFORMAL_RESPONSE (0)
08:59:33.948069 IMS SIP Message Length: 678 //UE回复网络OK
Direction = UE_TO_NETWORK
Message ID = IMS_SIP_BYE
Response Code = OK (200)
13 UE1 到 UE3 的呼叫结束状态被指示给 QMI 以通知给 UI
关键字:Call Manager|IMS --> qipcallh_chg_state_to_null / OTA --IMS
08:59:33.948984 IMS/High [ qipcallh.c 9199] [qipcallh_chg_state_to_null] [call_id: 6] [state: 14], end_reason = 0, end_request_type = 3
08:59:33.949006 IMS VoLTE Session End Length: 213
Terminating Uri = sip:+905527068232@ims.mnc003.mcc286.3gppnetwork.org
End Cause = MT initiated
08:59:33.950990 IMS/Medium [qipcall_indication.c 611] qipcall_call_end_rpt_ind: call_id=6, state=1, cause=0, error code=-1, sip error code=0, emerg_srv_cat=0
08:59:33.950990 Call Manager/High [ cmipapp.c 4078] =CM= IMS_RPT: RPT name 605
08:59:33.950990 Call Manager/High [ cmtask.c 10965] =CM= CM<< IP cmd:605
08:59:33.950990 Call Manager/High [ cmipcall.c 3600] =CM= AS_ID 0, IP RXD: CALL_END, end_cause=0, client_end_cause=-1, call_id=6, call_state=3, is_lte_hard_failure=0
08:59:33.963004 QMI_MCS_QCSI_PKT Length: 59
14 UE1 到 UE3 呼叫的状态通过 QMI 指示给 UI
关键字:QMI --> Service_VOICE
08:59:33.951003 [0x1544] QMI_MCS_QCSI_PKT
packetVersion = 2
V2 {
MsgType = Indication //通话状态上报
Service_VOICE { //QMI关键字Service_VOICE
ServiceVOICEV2 {
voice_all_call_status {
voice_all_call_status_indTlvs[0] {
call_info {
num_of_instances = 2
call_info[0] { //UE1和电话会议处于通话(CONVERSATION)状态
call_id = 3
call_state = CALL_STATE_CONVERSATION
call_type = CALL_TYPE_VOICE_IP
}
call_info[1] { //UE1和UE3处于END状态
call_id = 2
call_state = CALL_STATE_END
call_type = CALL_TYPE_VOICE_IP
}
}
}
voice_all_call_status_indTlvs[3] {
remote_party_number {
num_instances = 2 //当前有2路通话
remote_party_number[0] { //第3路通话-电话会议
call_id = 3
number_len = 5
number = { m, m, t, e, l }
}
remote_party_number[1] { //第2路通话(UE3)信息
call_id = 2
number_len = 13
number = {
+, 9, 0, 5, 4, 6, 1, 8,
2, 9, 0, 9, 4
}
}
}
}
}
}
}
}
15 IMS 向 CM 发送电话会议状态的指示
关键字:IMS --> QIPCALLE_TRANSFER_STATE_CONFERENCE
08:59:33.962995 IMS/High [qipcall_conf_and_transfer_call.c 5110] QIPCALLE_TRANSFER_STATE_CONFERENCE status = 1, participants added = 2
16 CM 收到电话会议的指示并发送到 QMI 以通知 UI
关键字:Call Manager
08:59:33.962995 Call Manager/High [ cmipcall.c 4625] =CM= IP RXD: SUPS_CONF, sups_type=5, num_part=2, participant=0xfb09aa40 id=7, rpt asubs_id=0, is_ims_cap_on_sub=1
17 QMI 指示对 UI 的管理调用的结果
UE1 电话会议状态通过 QMI 指示给 UI --> 中间态可忽略
关键字:QMI --> Service_VOICE
08:59:33.963004 [0x1544] QMI_MCS_QCSI_PKT
packetVersion = 2
V2 {
MsgType = Indication //通话状态上报
Service_VOICE { //QMI关键字Service_VOICE
ServiceVOICEV2 {
voice_all_call_status {
voice_all_call_status_indTlvs[0] { //UE2和UE3加入电话会议,电话会议处于通话(CONVERSATION)状态
call_info {
num_of_instances = 1
call_info[0] {
call_id = 3
call_state = CALL_STATE_CONVERSATION
call_type = CALL_TYPE_VOICE_IP
}
}
}
voice_all_call_status_indTlvs[3] {
remote_party_number {
num_instances = 1 //当前只有1路通话
remote_party_number[0] { //第3路通话-电话会议
call_id = 3
number_len = 5
number = { m, m, t, e, l }
}
}
}
}
}
}
}
关键字:QMI --> Service_VOICE
08:59:33.963004 [0x1544] QMI_MCS_QCSI_PKT
packetVersion = 2
V2 {
MsgType = Response //电话会议请求响应
ServiceId = VOICE
MinorRev = 106 //请求消息ID
Service_VOICE {
ServiceVOICEV2 {
voice_manage_ip_calls {
voice_manage_ip_calls_respTlvs[0] {
resp {
result = QMI_RESULT_SUCCESS //电话会议请求成功
error = QMI_ERR_NONE
}
}
}
}
}
}