1  电话会议整体流程

        以下呼叫流程和日志分析描述了UE中的呼叫会议过程

freeswich 电话会议方案_freeswich 电话会议方案

         前提条件: 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
               }
            }
         }
      }
   }
}