title: 管理多人视频通话

本篇文档介绍如何创建或加入多人视频通话。

Room 表示一个多人视频通话。多个用户可以加入同一个 Room 进行音视频通话。

加入 Room

加入 Room 前需要使用唯一的 roomId 创建 WDGRoom 对象实例,并使用 -[WDGRoom connect] 方法加入 Room。

  1. WDGRoom *room = [[WDGRoom alloc] initWithRoomId:@"your-roomId" delegate:self];
  2. [room connect];

WilddogVideoRoom 提供了海外服务器节点,使用 - [WDGRoom initWithRoomId:domain:delegate:] 方法在初始化时指定服务器地址:

  1. WDGRoom *room = [WDGRoom alloc] initWithRoomId:@"your-roomId" domain:@"placeholder.wilddog.com" delegate:self];
  2. [room connect];

提示:

如需使用海外节点,请联系客服 400-616-0980。

成功加入到 Room 后可以使用 -[WDGRoom publishLocalstream:]-[WDGRoom subscribeRoomStream:] 方法发布或订阅媒体流。

离开 Room

使用 -[WDGRoom disconnect] 方法离开当前 Room。离开 Room 后将会结束当前音视频通话,停止发布本地媒体流并取消订阅远端媒体流:

  1. [room disconnect];

处理 Room 事件

设置 WDGRoom 的代理 <WDGRoomDelegate> 用于处理 Room 的事件:

  1. room.delegate = self;

连接事件

实现代理方法 -[WDGRoomDelegate wilddogRoomDidConnect:],当客户端与服务器成功连接时,会触发该方法:

  1. - (void)wilddogRoomDidConnect:(WDGRoom *)wilddogRoom {
  2. // 已成功连接
  3. }

实现代理方法 -[WDGRoomDelegate wilddogRoomDidDisconnect:],当客户端与服务器断开连接时,会触发该方法:

  1. - (void)wilddogRoomDidDisconnect:(WDGRoom *)wilddogRoom {
  2. // 已断开链接,可以释放资源
  3. }

媒体流通知事件

实现代理方法 -[WDGRoomDelegate wilddogRoom:didStreamAdded:],当房间中有远端媒体流加入时,会触发该方法:

  1. - (void)wilddogRoom:(WDGRoom *)wilddogRoom didStreamAdded:(WDGRoomStream *)roomStream {
  2. // 获取该视频流信息,决定是否订阅
  3. }

实现代理方法 -[WDGRoomDelegate wilddogRoom:didStreamRemoved:],当房间中有远端媒体流断开时,会触发该方法:

  1. - (void)wilddogRoom:(WDGRoom *)wilddogRoom didStreamRemoved:(WDGRoomStream *)roomStream {
  2. // 不再显示该视频流
  3. }

媒体流接收事件

实现代理方法 -[WDGRoomDelegate wilddogRoom:didStreamReceived:],当收到远端流的媒体数据时,会触发该方法:

  1. - (void)wilddogRoom:(WDGRoom *)wilddogRoom didStreamReceived:(WDGRoomStream *)roomStream {
  2. // 展示收到的媒体流
  3. }

错误事件

实现代理方法 -[WDGRoomDelegate wilddogRoom:didFailWithError:],当多人视频通话发生错误时,会触发该方法:

  1. - (void)wilddogRoom:(WDGRoom *)wilddogRoom didFailWithError:(NSError *)error {
  2. // 处理错误
  3. }