title: 管理一对一视频通话

本篇文档介绍如何建立一对一视频通话。在主叫的一方,这个过程包括发起通话请求,收到回应,关闭通话;在被叫的一方,这个过程包括收到一对一视频通话请求,接受/拒绝通话请求,关闭通话。

发起通话请求

使用 -[WDGVideoCall callWithUid:localStream:data:] 来发起通话请求,该方法需要传递三个参数:

  • remoteUid: 通话接收方的 uiduid 是 WilddogAuth 为认证用户分配的唯一身份标识;
  • localStream: 通话发起方的本地媒体流;
  • data: 用户自定义信息,可以为空。

调用该方法返回 WDGConversation 实例,用于控制本次一对一视频通话。

  1. self.conversation = [self.video callWithUid:@"remote-uid" localStream:self.localStream data:@"custom-data";
  2. self.conversation.delegate = self;

注:每个客户端同一时间只能存在一个通话。发起电话请求时,默人会挂断前一次通话。

收到通话请求

其他用户发来通话请求时,用户可以从 WDGVideoCall 的代理得到通知,并获得 WDGConversation 实例:

  1. - (void)wilddogVideoCall:(WDGVideoCall *)videoCall didReceiveCallWithConversation:(WDGConversation *)conversation data:(NSString *)data {
  2. self.conversation = conversation;
  3. self.conversation.delegate = self;
  4. NSLog("%@", data);
  5. }

设置通话代理

设置 WDGConversation 的代理 <WDGConversationDelegate> 用于监听通话状态。

  1. self.conversation.delegate = self;

WDGConversationDelegate 包含四个方法:

方法名 说明
-conversation:didReceiveResponse: 发起通话请求后,通话状态发生变化会触发该方法。通话状态包含接收、拒绝、繁忙和请求超时。
-conversation:didReceiveStream: 收到远端媒体流时,触发该方法。
-conversation:didFailedWithError: 通话发生错误时,触发该方法。
-conversationDidClosed: 通话被关闭时,触发该方法。

接受/拒绝通话请求

使用 -[WDGConversation acceptWithLocalStream:] 来接受通话请求,该方法需要传入本地媒体流,本地流的创建请参考 创建媒体流

  1. [self.conversation acceptWithLocalStream:self.localStream];

使用 -[WDGConversation reject] 来拒绝通话请求:

  1. [self.conversation reject];

接受/拒绝对方的通话请求后,对方会通过 -[WDGConversationDelegate conversation:didReceiveResponse: 收到 ACCEPT / REJECT 状态的通知:

  1. - (void)conversation:(WDGConversation *)conversation didReceiveResponse:(WDGCallStatus)callStatus {
  2. switch (callStatus) {
  3. case WDGCallStatusAccepted:
  4. NSLog(@"通话被接受");
  5. break;
  6. case WDGCallStatusRejected:
  7. NSLog(@"通话被拒绝");
  8. break;
  9. case WDGCallStatusBusy:
  10. NSLog(@"正忙");
  11. break;
  12. case WDGCallStatusTimeout:
  13. NSLog(@"超时");
  14. break;
  15. default:
  16. NSLog(@"状态未识别");
  17. break;
  18. }
  19. }

关闭一对一视频通话

使用 -[WDGConversation close] 来取消呼叫或者结束通话。

  1. [self.conversation close];
  2. // 释放不使用的资源
  3. self.conversation = nil;

通话被关闭后,对方会通过 -[WDGConversationDelegate conversationDidClosed] 收到通话结束的通知:

  1. - (void)conversationDidClosed:(WDGConversation *)conversation {
  2. NSLog(@"通话已结束");
  3. // 释放不使用的资源
  4. self.conversation = nil;
  5. }