title: 多人视频会议

本篇文档介绍开发多人视频会议的主要环节,包括 创建视频会议管理其他参与者加入视频会议相关

创建视频会议

创建视频会议包括配置和预览本地媒体流、发起/加入视频会议。

配置和预览本地媒体流

本地媒体流( Local Stream )包括音频和视频,发起或加入会议前需要进行配置,成功加入一个会议后,该媒体流会发送给其他参与者。

例如,创建一个只有视频且分辨率为 640X480 的流,并展示出来:

  1. // 设置本地媒体流选项
  2. WDGVideoLocalStreamOptions *localStreamOptions = [[WDGVideoLocalStreamOptions alloc] init];
  3. localStreamOptions.audioOn = NO;
  4. localStreamOptions.videoOption = WDGVideoConstraintsStandard;
  5. // 创建本地媒体流
  6. self.localStream = [[WDGVideoLocalStream alloc] initWithOptions:localStreamOptions];
  7. // 预览本地媒体流
  8. // 如果没有获得摄像头权限或无摄像头,则无法展示。
  9. [self.localStream attach:self.localVideoView];

发起/加入视频会议

通过 Conference ID 发起/加入一个视频会议。如果该会议不存在,系统会以你作为第一个参与者发起该会议。

例如,加入 Conference ID 为 ‘123456’ 的视频会议:

  1. WDGVideoConnectOptions *connectOptions = [[WDGVideoConnectOptions alloc] initWithLocalStream:self.localStream];
  2. self.conference = [self.wilddogVideoClient connectToConferenceWithID:@"123456" options:connectOptions delegate:self];

管理其他参与者

管理其他参与者包括处理其他参与者的连接事件和播放其他参与者的媒体流。

处理其他参与者的连接事件

通过监听其他参与者加入或离开的事件,来获得其状态通知。

例如,打印加入、离开的日志:

  1. - (void)conference:(WDGVideoConference *)conference didConnectParticipant:(WDGVideoParticipant *)participant
  2. {
  3. NSLog(@"Participant %@ connected", participant);
  4. participant.delegate = self;
  5. }
  6. - (void)conference:(WDGVideoConference *)conference didDisconnectParticipant:(WDGVideoParticipant *)participant
  7. {
  8. NSLog(@"Participant %@ disconnected", participant);
  9. }

播放其他参与者的媒体流

通过展示他参与者的视频流来观看其视频画面。

例如,当监听到参与者加入视频会议时展示参与者的媒体流:

  1. - (void)participant:(WDGVideoParticipant *)participant didAddStream:(WDGVideoRemoteStream *)stream
  2. {
  3. // 参与者成功加入会议,将参与者的视频流展示出来
  4. NSLog(@"receive stream %@ from participant %@", stream, participant);
  5. self.remoteStream = stream;
  6. // 每个 WDGVideoView 只能展示一个 WDGVideoStream,这里假设会议只有一个参与者
  7. [self.remoteStream attach:self.remoteVideoView];
  8. }

加入视频会议相关


视频会议相关操作包括离开视频会议和直播视频会议。

离开视频会议

离开一个正在进行的视频会议并释放媒体资源。可以直接释放媒体资源或通过监听离开视频会议事件在成功离开会议后释放媒体资源。

例如,断开视频会议并释放不使用的资源:

  1. [self.conference disconnect];
  2. [self.remoteStream detach:self.remoteVideoView];
  3. self.remoteStream = nil;
  4. self.conference = nil;

视频会议直播

视频会议直播采用野狗独有的 MeetingCast 技术,能直播视频会议中指定客户端的视频和音频,并根据需要无缝切换直播的客户端。

注意:

MeetingCast 功能配置之前,需要开启 控制面板-实时视频通话-多人视频会议 下的 “视频会议直播” 开关。

开启直播

在视频会议开始后,选择一个参与者作为直播源,打开直播功能。

例如,选择参与者 ‘12345’ 作为直播源开启直播:

  1. - (void)startMeetingCast {
  2. [self.conference.meetingCast startWithParticipantID:@"12345"];
  3. }
  4. // 随后于 WDGVideoMeetingCastDelegate 方法中获得直播地址
  5. - (void)meetingCast:(WDGVideoMeetingCast *)meetingCast didUpdatedWithStatus:(WDGVideoMeetingCastStatus)status castingParticipantID:(NSString * _Nullable)participantID castURLs:(NSDictionary<NSString *, NSString *> * _Nullable)castURLs {
  6. NSLog(@"participantID: %@ castURLs: %@", participantID, castURLs);
  7. }

切换直播者

直播进行时无缝切换直播源。

例如,切换直播源为 participant ID ‘99999’ 的参与者:

  1. - (void)switchMeetingCast {
  2. [self.conference.meetingCast switchToParticipantID:@"99999"];
  3. }
  4. // 随后于 WDGVideoMeetingCastDelegate 方法中获得直播地址
  5. - (void)meetingCast:(WDGVideoMeetingCast *)meetingCast didUpdatedWithStatus:(WDGVideoMeetingCastStatus)status castingParticipantID:(NSString * _Nullable)participantID castURLs:(NSDictionary<NSString *, NSString *> * _Nullable)castURLs {
  6. NSLog(@"participantID: %@ castURLs: %@", participantID, castURLs);
  7. }

停止直播

停止直播功能。

例如,直播开启后,停止直播:

  1. - (void)stopMeetingCast {
  2. [self.conference.meetingCast stop];
  3. }