title: 管理一对一视频通话

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

发起通话请求

使用 call(String remoteUid, LocalStream localStream, WilddogVideoCallOption option) 来发起通话请求,该方法需要传递三个参数:

  • remoteUid: 通话接收方的 uiduid 是 WilddogAuth 为认证用户分配的唯一身份标识;
  • localStream: 通话发起方的本地媒体流;
  • option: 包括视频通话用户自定义信息、是否强制relay。

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

  1. WilddogVideoCallOptions option = new WilddogVideoCallOptions.Builder()
  2. .iceTransportsPolicy(WilddogVideoCallOptions.IceTransportPolicy.ALL)
  3. .data("conversationDemo")
  4. .build();
  5. mConversation = video.call(remoteUid,localStream,option);

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

收到通话请求

其他用户发来通话请求时,用户可以从 WilddogVideoCall 的listener得到通知,并获得 Conversation 实例:

  1. public void onCalled(Conversation conversation, String s) {
  2. mConversation = conversation;
  3. Log.d("log",s);
  4. }
  5. }

设置通话代理

设置 Conversation 的代理Conversation.Listener用于监听通话状态。

  1. conversation.setConversationListener(new Conversation.Listener() {
  2. @Override
  3. public void onCallResponse(CallStatus callStatus) {
  4. }
  5. @Override
  6. public void onStreamReceived(RemoteStream remoteStream) {
  7. }
  8. @Override
  9. public void onClosed() {
  10. }
  11. @Override
  12. public void onError(WilddogVideoError wilddogVideoError) {
  13. }
  14. });

Conversation.Listener 包含四个方法:

方法名 说明
onCallResponse(CallStatus callStatus) 发起通话请求后,通话状态发生变化会触发该方法。通话状态包含接收、拒绝、繁忙和请求超时。
onStreamReceived(RemoteStream remoteStream) 收到远端媒体流时,触发该方法。
onError(WilddogVideoError wilddogVideoError) 通话发生错误时,触发该方法。
onClosed() 通话被关闭时,触发该方法。

接受/拒绝通话请求

使用 accept(final LocalStream localStream) 来接受通话请求,该方法需要传入本地媒体流,本地流的创建请参考 创建媒体流

  1. mConversation.accept(localStream);

使用 reject() 来拒绝通话请求:

  1. mConversation.reject();

接受/拒绝对方的通话请求后,对方会通过 onCallResponse(CallStatus callStatus) 收到 ACCEPT / REJECT 状态的通知:

  1. public void onCallResponse(CallStatus callStatus) {
  2. switch (callStatus){
  3. case ACCEPTED:
  4. Log.d("log","通话被接受");
  5. break;
  6. case REJECTED:
  7. Log.d("log","通话被拒绝");
  8. break;
  9. case BUSY:
  10. Log.d("log","正忙");
  11. break;
  12. case TIMEOUT:
  13. Log.d("log","超时");
  14. break;
  15. default:
  16. Log.d("log","状态未识别");
  17. break;
  18. }
  19. }

关闭一对一视频通话

使用 close() 来取消呼叫或者结束通话。

  1. mConversation.close();
  2. mConversation=null;

通话被关闭后,对方会通过 onClosed() 收到通话结束的通知:

  1. public void onClosed() {
  2. mConversation.close();
  3. mConversation=null;
  4. }