WebRTC - Agora (聲網)簡介與實現音視頻通話

Agora (聲網)簡介

官網: https://www.agora.io/cn/javascript

一個專一移動端的高清實時通話雲服務解決方案。java

SD-RTN(Software Defined Real-time Network)
SD-RTN(Software Defined Real-time Network)是依賴於雲計算技術並致力於全球實時音視頻業務傳輸的「智簡」網絡,覆蓋全球 200+ 國家。做爲提供實時音視頻業務的 PaaS(Platform as a Service)層,SD-RTN 專一爲上層(SaaS)業務開放音視頻業務的網絡基礎能力,解決開發者共性問題,營造友好的開發環境,實現敏捷開發,併爲實時音視頻業務打造「專網」級別沉浸式網絡體驗。算法

音頻
高保真、3D 環繞立體聲體驗網絡

視頻
沉浸式視覺體驗session

Agora SDK
面向客戶,輕鬆適配。
Agora SDK 意在靈活將 SDK 適配在更多新的須要實時傳輸應用場景如:IoT、教育、社交、金融、網絡加速等。app

Agora 原生 SDK
Agora 原生 SDK 支持 iOS,Android,Windows,和 Mac 等各平臺。原生 SDK 包含了全部經常使用的音頻和視頻解碼器,以及鏈接到 Agora 全球網絡,並應對掉線和不穩定網絡條件的算法。這是經常使用的高階 API。ide

Agora 基於 Web 的 SDK
Agora 基於 Web 的 SDK 使基於 Web 開發的 App 可以實現原生應用一樣的功能。ui

運用場景
語音通話(一對1、多對多)
視頻通話(一對1、多對多)
互動直播(語音、視頻直播連麥互動)
互動遊戲(遊戲內置實時語音、視頻通話)
錄製(服務端錄製)
信令(呼叫、消息傳遞、狀態同步等)雲計算


Agora (聲網)實現音視頻通話

下面實現一下音視頻通話(一對一)的實現,主要分爲兩部分,一部分是視頻通話,一部分是信令邀請其餘人加入頻道進行視頻通話。code

這裏直接上代碼:

建立視頻通話

// 建立Client對象
client = AgoraRTC.createClient({ mode: 'live', codec: 'h264' });

// 初始化Client對象
client.init(
  'appid', // 這裏填註冊完後的APPID
  function() {
    console.log('AgoraRTC client 初始化成功');

    // 加入頻道
    client.join(
      null,
      'call', // 頻道名稱,能夠本身定義
      1111, // 用戶標識id,能夠本身定義。惟一就能夠
      function(uid) {
        console.log('用戶id:' + uid + ' 加入頻道成功');

        // 建立音視頻流
        localStream = AgoraRTC.createStream({
          streamID: uid,
          audio: true,
          video: true,
          screen: false,
        });

        // 初始化本地的音視頻流
        localStream.init(
          function() {
            console.log('獲取用戶媒體成功');
            localStream.play('agora_video_myself'); // 顯示本地視頻播放<div>標籤id名

            // 發佈本地音視頻流
            client.publish(localStream, function(err) {
              console.log('發佈本地音視頻流失敗: ' + err);
            });

            client.on('stream-published', function(evt) {
              console.log('發佈本地音視頻流成功');
            });
          },
          function(err) {
            console.log('獲取用戶媒體失敗', err);
          }
        );

           // --------- 訂閱遠端音視頻流 --------
        // 監聽到新的視頻
        client.on('stream-added', function(evt) {
          var stream = evt.stream;
          console.log('有新的音視頻流: ' + stream.getId());

          client.subscribe(stream, function(err) {
            console.log('訂閱音視頻流失敗', err);
          });
        });
        // 訂閱遠程視頻
        client.on('stream-subscribed', function(evt) {
          var remoteStream = evt.stream;
          console.log('訂閱遠程音視頻流成功: ' + remoteStream.getId());
          remoteStream.play('agora_video'); // 顯示遠程視頻播放<div>標籤id名
        });
      },
      function(err) {
        console.log('加入頻道失敗', err);
      }
    );
  },
  function(err) {
    console.log('AgoraRTC client 初始化失敗', err);
  }
);

信令發送邀請

// ------------------ 加載信令 ------------------

signal = Signal('appid'); // 這裏填註冊完後的APPID

// 登陸返回 Session對象
session = signal.login(1111, '_no_need_token'); // 用戶標識id,能夠本身定義。惟一就能夠

// 登陸成功回調
session.onLoginSuccess = function(uid) {
  console.log('登陸信令成功回調', uid);

  // ------------------ 邀請人加入頻道
  const call = session.channelInviteUser2('call', userId); // 頻道名稱、被邀請人id
  // 對方已收到呼叫邀請回調
  call.onInviteReceivedByPeer = function() {
    console.log('對方已收到呼叫邀請');
  };
  // 對方接受邀請回調
  call.onInviteAcceptedByPeer = function() {
    console.log('對方接受邀請');
  };
  // 對方拒絕邀請回調
  call.onInviteRefusedByPeer = function() {
    console.log('對方拒絕邀請');
  };
  // 呼叫邀請失敗回調
  call.onInviteFailed = function() {
    console.log('呼叫邀請失敗');
  };
  // 對方已結束呼叫回調
  call.onInviteEndByPeer = function() {
    console.log('對方已結束呼叫');
  };
  // 本地已結束呼叫回調
  call.onInviteEndByMyself = function() {
    console.log('本地已結束呼叫');
  };
};

// 登陸失敗回調
session.onLoginFailed = function(ecode) {
  console.log('登陸信令失敗', ecode);
};

// 登出回調設置
session.onLogout = function(ecode) {
  console.log('登出信令成功', ecode);
};

退出時的銷燬

// 取消發佈本地音視頻流
client.unpublish(localStream, function(err) {
  console.log('取消發佈本地音視頻流失敗' + err);
});

// 退出頻道
client.leave(
  function() {
    console.log('退出頻道成功');
  },
  function(err) {
    console.log('退出頻道失敗', err);
  }
);

//登出信令
session.logout();

其餘的更多功能能夠查看官方的API

相關文章
相關標籤/搜索