博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WebRTC - Agora (声网)简介与实现音视频通话
阅读量:7081 次
发布时间:2019-06-28

本文共 3883 字,大约阅读时间需要 12 分钟。

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'); // 显示本地视频播放
标签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'); // 显示远程视频播放
标签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

转载地址:http://ijvml.baihongyu.com/

你可能感兴趣的文章
Callbacks are imperative, promises are functional
查看>>
解决 传递给数据库 'master' 中的日志扫描操作的日志扫描号无效
查看>>
dhtmlxTree介绍
查看>>
【转】linux下杀死进程(kill)的N种方法
查看>>
js判断对象是Array
查看>>
远程访问虚拟机Linux服务器网络配置
查看>>
Fiddler 抓包工具总结
查看>>
ios toast提示框(MBProgressHUD)
查看>>
60多个超炫的视差滚动效果网站设计欣赏
查看>>
Memcached启动脚本
查看>>
Linux 安装 ActiveMQ
查看>>
Mybatis 框架源码分析
查看>>
关于 LF will be replaced by CRLF 问题出现的原因以及解决方式
查看>>
HTML5编程之旅 第3站 WebSockets
查看>>
oracle 体系结构及内存管理 05_重建EM
查看>>
windows下搭建wamp环境php.ini必须放在C:/windows下面嘛
查看>>
everedit
查看>>
改写源代码,使得认证成功后跳转到successUrl路径
查看>>
浅析CentOS和RedHat Linux的区别
查看>>
Linux gcc版本如何升级
查看>>