互联网多人语音

1、互联网多人语音说明

互联网多人语音是多人参加的基于互联网、或者基于电话或者网络和电话混合的会议。 

1.1、接口逻辑 

接口调用是采取“请求回调”和“通知回调”的方式和服务端交互。在对应的sdk的方法参数中有“请求回调”方法,请求的结果直接在参数的回调方法中处理。会议中的成员收到服务端发送过来的消息通过“通知回调”方法  

1.2、业务流程  

  •  用户A创建语音会议或者电话会议。 
  •  会议创建成功之后,邀请其他成员加入会议。 
  •  其他成员收到邀请,同意或拒绝加入会议。

2、语音会议操作代码示例 

创建语音会议

我们假设Tony要创建语音会议,其示例代码如下:
  • UINT matchKey = 0;
  • int nRet = CreateMultimediaMeeting(&matchKey, MeetingType_Voice,”会议名称”,”会议密码”,”会议关键字”,2/*有提示音有背景音*/, 8/*会议会议方数*/, true/*自动加入*/, true/*自动关闭*/, true /*自动解散*/);
  • 结果回调:
  • void onCreateMultimediaMeeting (unsigned int matchKey, int reason, ECMeetingInfo *pInfo)
  • {
  •  if(!pInfo) return;
  •  if(pInfo->Id == NULL)
  •  {
  •           MessageBoxEx(_T("创建会议失败"));
  •  return;
  •  }
  •  if(pInfo->meetingType == MeetingType_Voice)//创建音频会议
  •  {
  •  if(reason != EC_Response_Success)
  •  {
  •  log(“创建语音会议失败”);
  •  }else
  •   {
  •  log(“创建语音会议成功”);
  •  } }}

邀请成员加入会议

我们假设Tony创建语音会议成功之后,邀请John和Smith加入语音会议,其代码如下:
  • unsigned int matchKey=0;
  •  int nCount = 0;
  •  CStringArray toArr;
  •  toArr.Add("John的账号");
  •  toArr.Add("Smith的账号");
  •  if((nCount = toArr.GetSize())== 0)
  •  return -1;  
  •  const char** p=new const char*[nCount];
  •  for(int i=0;i<nCount;i++)
  •  {
  •  p[i]=(LPCTSTR)toArr.GetAt(i);
  •  }
  •  Int ret=InviteJoinMultiMediaMeeting(&matchKey,(LPCTSTR)roomNo/*会议id*/,p,nCount,isLanding/*是否是落地邀请*/,true/*可讲*/,true/*可听*/,NULL/*显示号码*/,NULL/*自定义数据*/);
  •  delete []p;
  •  return ret;
  • 结果回调:
  •  void onInviteJoinMultiMediaMeeting (unsigned int matchKey, int reason, ECMeetingInviteInfo *pInfo)  
  • {
  • if(reason != EC_Response_Success)
  •  {
  •  log(“发起邀请失败”);
  •  }else
  •  {
  •  log(“发起邀请成功”);
  •  }}

主动加入会议

我们假设Eric要主动加入会议,其示例代码如下:
  • JoinMeeting(MeetingType_Voice, "会议id", "会议密码");
  • 结果回调:
  • void onJoinMeeting(int reason, const char* conferenceId)
  • {
  • if(reason != EC_Response_Success)
  •  {
  •  log(“加入会议失败”);
  •  }else
  •  {
  •  log(“加入会议成功”);
  •  }

通过会议类型解散语音会议

我们假设Tony要解散自己创建的一个语音会议,其示例代码如下:
  • UINT matchKey = 0;
  • int nRet = DismissMultiMediaMeeting (&matchKey, MeetingType_Voice, “会议ID”);
  • 结果回调:
  • void onDismissMultiMediaMeeting (unsigned int matchKey, int reason, const char* conferenceId)
  • {
  • if(reason != EC_Response_Success)
  •  {
  •  log(“解散会议失败”);
  •  }else
  •  {
  •  log(“解散会议成功”);
  •   }}

通过会议类型解散语音会议 

应答会议,其示例代码如下:
  • ExitMeeting(“会议id”);
  • void onExitMeeting(constchar* conferenceId)
  • {
  •  Log("退出会议");
  • }

退出语音会议

退出会议,其示例代码如下:
  • AcceptMeeting(“会议详情”);

从语音会议踢出会议成员 

只有会议创建者才能踢出成员,我们假设Tony要踢出John,其示例代码如下:
  • UINT matchKey = 0;
  • int nRet = DeleteMemberMultiMediaMeeting (&matchKey, MeetingType_Voice, “会议ID”,” John”,true/*是VoIP账号*/);
  • 结果回调:
  • void onDeleteMemberMultiMediaMeeting (unsigned int matchKey, int reason, ECMeetingDeleteMemberInfo *pInfo)
  • {
  • if(reason != EC_Response_Success)
  •  {
  •  log(“删除会议成员失败”);
  •  }else
  •  {
  •  log(“删除会议成员成功”);
  •  }
  • }

语音会议通知消息 

当对语音会议进行操作(如邀请,主动加入、退出、解散、踢出成员)时,会议室中的相关成员通过语音会议的“通知回调”接口 onReceiveVoiceMeetingMessage接收相关信息,并进行处理,其代码示例如下: 
  • void onReceiveVoiceMeetingMessage(ECVoiceMeetingMsg* msg)
  • {
  •  ECVoiceMeetingMsgType *msgType= msg->var;
  •  if(msgType== VoiceMeetingMsgType_Join)
  •  {
  •  //有人加入
  •  }
  •  else if(msgType== VoiceMeetingMsgType_Exit)
  •  {
  •  //有人退出 
  •  }
  •  else if(msgType== VoiceMeetingMsgType_Delete)
  •  {
  •  //房间被删除退出
  •  }
  •  else if(msgType== VoiceMeetingMsgType_RemoveMember)
  •  {
  •  //有人被移除
  •  } else if(msgType== VoiceMeetingMsgType_Refuse)
  •  { 
  •  //拒绝邀请
  •  }
  • }

获取语音会议列表

通过“获取语音会议列表”接口,可以获得应用下的所有语音会议列表,其示例代码如下: 
  • UINT matchKey = 0;
  • int nRet = QueryMultiMediaMeetings(&matchKey, MeetingType_Voice, NULL/*会议关键字
  •  */);
  • 结果回调:
  • void onQueryMultiMediaMeetings(unsigned int matchKey, int reason,int count,ECMeetingInfo* pMeetingInfo)
  • {
  • if(reason != EC_Response_Success)
  •  {
  •  log(“获取会议列表失败”);
  •  }else
  •  {
  •  log(“获取会议列表成功”);
  •  }
  • }

查询当前语音会议成员 

用户加入会议后,需要获取当前语音会议中的所有成员,其示例代码如下:
  • UINT matchKey = 0;
  • int nRet = QueryMeetingMembers(&matchKey, MeetingType_Voice, "会议id");
  • 结果回调:
  • void onQueryMeetingMembers (unsigned int matchKey, int reason, const char* conferenceId, int count, ECMeetingMemberInfo* pMembers)
  • {
  • if(reason != EC_Response_Success)
  •  {
  •  log(“查询当前会议成员失败”);
  •  }else
  •  {
  •  log(“查询当前会议成员失败成功”);
  •  }
  • }

会议设置成员禁言禁听状态

用户加入会议后,创建者可以设置用户的禁言状态,其示例代码如下:
  • unsigned int matchKey = 0;
  • int nRet = SetMeetingSpeakListen(&matchKey, MeetingType_Voice, "会议ID", "被选择的成员", true(是否是voip), 设置类型);
  • 结果回调:
  • void OnSetMeetingSpeakListen(unsignedint matchKey, int reason,ECMeetingMemberSpeakListenInfo* pInfo)
  • {
  •  if( CGlobalVarManager::m_pVideoConfEnterDlg )
  •  {
  •  CGlobalVarManager::m_pVideoConfEnterDlg->SetMeetingSpeakListenResult(reason);
  •  }
  •  if( CGlobalVarManager::m_pChatRoomEnterDlg )
  •  {
  •  CGlobalVarManager::m_pChatRoomEnterDlg->SetMeetingSpeakListenResult();
  •  }
  • }