官網: 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、多對多)
互動直播(語音、視頻直播連麥互動)
互動遊戲(遊戲內置實時語音、視頻通話)
錄製(服務端錄製)
信令(呼叫、消息傳遞、狀態同步等)雲計算
下面實現一下音視頻通話(一對一)的實現,主要分爲兩部分,一部分是視頻通話,一部分是信令邀請其餘人加入頻道進行視頻通話。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