互联网多人视频

1、互联网多人视频说明

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

1.1、接口逻辑 

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

1.2、业务流程  

  • 用户A创建视频会议。
  • 会议创建成功之后,邀请其他成员加入会议。
  • 其他成员收到邀请,同意或拒绝加入会议。
  • 在视频会议中发布自己的视频会议图像。
  • 在视频会议中请求/取消成员的视频图像。
  • 管理员对视频已加入视频会议成员进行管理(如:移除出会议)。
  • 管理员解散视频会议/成员退出视频会议。

2、视频会议操作代码示例

创建视频会议

我们假设Tony要创建视频会议,其示例代码如下: 
  • UINT matchKey = 0;
  • int nRet = CreateMultimediaMeeting(&matchKey, MeetingType_Video, 会议名称”,”会议密码”,”会议关键字”,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_Video)//创建音频会议
  •  {
  •  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,false/*是否是落地邀请*/,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_Video, "会议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_Video, “会议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("退出会议");
  • }

视频会议踢出会议成员

只有会议创建者才能踢出成员,我们假设Tony要踢出John,
isMobile标识John以落地电话的形式加入或者VoIP视频来电方式加入。其示例代码如下:
  • UINT matchKey = 0;
  • int nRet = DeleteMemberMultiMediaMeeting (&matchKey, MeetingType_Video, “会议ID”,” John”,true/*是VoIP账号*/);
  • 结果回调:
  • void onDeleteMemberMultiMediaMeeting (unsigned int matchKey, int reason, ECMeetingDeleteMemberInfo *pInfo)
  • {
  • if(reason != EC_Response_Success)
  •  {
  •  log(“删除会议成员失败”);
  •  }else
  •  {
  •  log(“删除会议成员成功”);
  •  }
  • }

视频会议通知消息

当对视频会议进行操作(如邀请,主动加入、退出、解散、踢出成员)时,会议室中的相关成员通过视频会议的“通知回调”接口 onReceiveVideoMeetingMessage接收相关信息,并进行处理,其代码示例如下: 
  • void onReceiveVideoMeetingMessage (ECVideoMeetingMsg* msg)
  • {
  •  ECVideoMeetingMsgType*msgType= msg->var;
  •  if(msgType== VideoMeetingMsgType_Join)
  •  {
  •  //有人加入
  •  }
  •  else if(msgType== VideoMeetingMsgType_Exit)
  •  {
  •  //有人退出 
  •  }
  •  else if(msgType== VideoMeetingMsgType _Delete)
  •  {
  •  //房间被删除退出
  •  }
  •  else if(msgType== VideoMeetingMsgType_RemoveMember)
  •  {
  •  //有人被移除
  •  } else if(msgType== VideoMeetingMsgType_Refuse)
  •  { 
  •  //拒绝邀请
  •  }
  • }

获取视频会议列表

通过“获取视频会议列表”接口,可以获得应用下的所有视频会议列表,其示例代码如下: 
  • UINT matchKey = 0;
  • int nRet = QueryMultiMediaMeetings(&matchKey, MeetingType_Video, 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_Video, "会议id");
  • 结果回调:
  • void onQueryMeetingMembers (unsigned int matchKey, int reason, const char* conferenceId, int count, ECMeetingMemberInfo* pMembers)
  • {
  • if(reason != EC_Response_Success)
  •  {
  •  log(“查询当前会议成员失败”);
  •  }else
  •  {
  •  log(“查询当前会议成员成功”);
  •  }}

视频会议发布自己的视频图像

我们假设Tony要发布自己的视频图像,其示例代码如下: 
  • UINT matchKey = 0;
  • int nRet = PublishVideo(&matchKey, "会议id");
  • 结果回调:
  • void onPublishVideo(unsigned int matchKey, int reason, const char* conferenceId)
  • {
  • if(reason != EC_Response_Success)
  •  {
  •  log(“发布视频失败”);
  •  }else
  •  {
  •  log(“发布视频成功”);
  •  }
  • }

视频会议取消发布自己的视频图像 

我们假设Tony要取消发布自己的视频图像,其示列代码如下: 
  • UINT matchKey = 0;
  • int nRet = UnpublishVideo(&matchKey, "会议id");
  • 结果回调:
  • void onUnpublishVideo(unsigned int matchKey, int reason, const char* conferenceId)
  • {
  • if(reason != EC_Response_Success)
  •  {
  •  log(“取消发布视频失败”);
  •  }else
  •  {
  •  log(“取消发布视频成功”);
  •  }
  • }

请求视频会议成员图像接口 

我们假设Tony要请求成员John的视频图像,其代码如下: 
  • RequestConferenceMemberVideo ("会议id", "会议密码", "请求的成员" ,videoView/*成员的窗口*/, 1/*摄像头像源*/);
  • 结果回调:
  • void onRequestConferenceMemberVideo(int reason,const char *conferenceId, const char *member, int type)
  • {
  •  if(reason != EC_Video_Conference_status_OK)
  •  {
  •  log(“请求视频源失败”);
  •  }else
  •  {
  •  log(“请求视频源成功”);
  •  }
  • }

取消视频会议成员图像接口

我们假设Tony需要取消视频会议成员John的视频图像,其代码如下: 
  • CancelConferenceMemberVideo("会议id", "会议密码", "取消的成员", 1/*摄像头像源*/);
  • 结果回调:
  • void onCancelConferenceMemberVideo(int reason,const char *conferenceId, const char *member, int type)
  • {
  •  if(reason != EC_Video_Conference_status_OK)
  •  {
  •  log(“取消视频源失败”);
  •  }else
  •  {
  •  log(“取消视频源成功”);
  •  }}

视频会议成员图像分辨率改变通知

  • void onRemoteVideoRatio(const char *CallidOrConferenceId/*会议ID*/, int width, int height, int type/*1 视频会议,2 共享会议*/, const char *member/*成员*/);

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

用户加入会议后,创建者可以设置用户的禁言状态,其示例代码如下:
  • unsigned int matchKey = 0;
  • int nRet = SetMeetingSpeakListen(&matchKey, MeetingType_Video, "会议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();
  •  }}