WebRTC - Agora (声网)简介与实现音视频通话
Agora (声网)简介
一个专注移动端的高清实时通话云服务解决方案。
SD-RTN(Software Defined Real-time Network)
SD-RTN(Software Defined Real-time Network)是依赖于云计算技术并致力于全球实时音视频业务传输的“智简”网络,覆盖全球 200+ 国家。作为提供实时音视频业务的 PaaS(Platform as a Service)层,SD-RTN 专注为上层(SaaS)业务开放音视频业务的网络基础能力,解决开发者共性问题,营造友好的开发环境,实现敏捷开发,并为实时音视频业务打造“专网”级别沉浸式网络体验。
音频
高保真、3D 环绕立体声体验
视频
沉浸式视觉体验
Agora SDK
面向客户,轻松适配。
Agora SDK 意在灵活将 SDK 适配在更多新的需要实时传输应用场景如:IoT、教育、社交、金融、网络加速等。
Agora 原生 SDK
Agora 原生 SDK 支持 iOS,Android,Windows,和 Mac 等各平台。原生 SDK 包含了所有常用的音频和视频解码器,以及连接到 Agora 全球网络,并应对掉线和不稳定网络条件的算法。这是常用的高阶 API。
Agora 基于 Web 的 SDK
Agora 基于 Web 的 SDK 使基于 Web 开发的 App 能够实现原生应用同样的功能。
运用场景
语音通话(一对一、多对多)
视频通话(一对一、多对多)
互动直播(语音、视频直播连麦互动)
互动游戏(游戏内置实时语音、视频通话)
录制(服务端录制)
信令(呼叫、消息传递、状态同步等)
Agora (声网)实现音视频通话
下面实现一下音视频通话(一对一)的实现,主要分为两部分,一部分是视频通话,一部分是信令邀请其他人加入频道进行视频通话。
这里直接上代码:
创建视频通话
// 创建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