互联网多人语音
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();
- }
- }