title: 一对一视频通话

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

创建一对一视频通话

创建一对一视频通话包括配置和预览本地媒体流、发起一对一视频通话。

配置和预览本地媒体流

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

注意:

只有通过 HTTPS 服务加载的页面才可以成功获取本地摄像头和麦克风等资源。

创建媒体流时需要传入4个参数,包括:

  • captureAudio / captureVideo 为音/视频采集的开关,设置为 false 表示关闭音/视频采集,默认为 true;
  • dimension 表示分辨率,默认为480p;
  • maxFPS 用来设置视频的最大帧率,默认为 15 帧/秒。

例如,创建一个同时有音频和视频的本地媒体流并展示出来:

  1. // 获取html中id为'local'的video元素;
  2. var localElement = document.getElementById('local');
  3. //获取wilddogVideo对象并初始化,在初始化之前需要通过auth获取的用户的token
  4. var video = wilddogVideo.getInstance().initialize(videoAppId,token);
  5. //创建一个同时有音频和视频的媒体流
  6. video.createLocalStream(
  7. {
  8. captureAudio:true,
  9. captureVideo:true,
  10. dimension:'480p',
  11. maxFPS: 15
  12. })
  13. .then(function(localStream){
  14. // 获取到localStream,将媒体流绑定到页面的video类型的标签上
  15. // 如果没有获得摄像头权限或无摄像头,则无法展示。
  16. localStream.attach(localElement);
  17. });

发起通话请求

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

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

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

  1. mConversation = video.call(remoteUid,localStream,"userData");
  2. //监听参与者的stream_received事件,将对端的流媒体绑定到页面的video中
  3. mConversation.on('stream_received',function(stream){
  4. console.log('Receive stream' + stream);
  5. })

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

收到通话请求

其他用户发来通话请求时,监听邀请时间接受另一个Video 发起的邀请:

例如,收到邀请后接受邀请

  1. var remoteVideo = wilddogVideo.getInstance().initialize(videoAppId,token);
  2. remoteVideo.on('called',function(incomingConversation){
  3. incomingConversation.accept(localStream)
  4. .then(function(conversation){
  5. //接受邀请成功,加入一对一视频通话
  6. });
  7. })

接受/拒绝通话请求

使用 accept(localStream) 来接受通话请求,该方法需要传入本地媒体流

  1. mConversation.accept(localStream);

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

  1. mConversation.reject();

接受/拒绝对方的通话请求后,对方会通过 mConversation.on('response',callback) 收到 ACCEPT / REJECT 状态的通知:

  1. mConversation.on('response',function(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;

通话被关闭后,对方会通过 mConversation.on('closed',callback) 收到通话结束的通知:

  1. mConversation.on('closed',function(){
  2. //释放资源
  3. })