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