对于实时音频及视频通话,我们已经司空见惯,比较常用的就是微信的音视频通话功能,对于这种功能,给我们的生活带来了极大的方便和改变。这里需要前端和后端配合,再结合声网(第三方SDK)就可以实现。(这里以小程序为例)
一、和后端配合
- 需要用到
webscoket
,让后端通过会议id(或者直播间id)或者什么方式将加入到这个会议或者直播中的人划分为一组。eg:我司是有个管理后台可以动态的生成链接,将链接中的特定参数和其它(如:密码等)实现登录 - 登录成功获取个人信息,这里我们是获取到个人id,会议室id等等(这些操作主要看后端)
二、利用声网第三方SDK(重点)
- 需要去官网注册账号并登录,登录成功后需要创建一个项目(有免费的和付费的),这里主要获取一个声网的 appid
- 去声网的官网文档中下载相应的SDK(有小程序,web,ios等很多的SDK)
- 在项目中引入对应的SDK后,在合适的地方进行实例化(我们在页面加载完成时)
this.client = new this.AgoraMiniappSDK.Client();
- 之后在合适的地方进行初始化客户端对象,需要 appid
this.client.init(this.appid,()=>{
console.log(`client init success`);
this.join();
})
- 初始化完成后,进行加入频道(
实例的jion()
)操作,需要的参数:声网的token(需要后端去返回),频道号(我们是会议室id),个人的id
this.client.join(this.agoratoken,this.channel,this.weblogininfo.uid,()=>{
console.log("加入频道成功")
},e=>{
console.log(e) // 加入失败
})
- 加入成功后,调用
实例的publish()
,来获取自己的这个推流地址,成功后利用小程序的live-pusher
进行推流
this.client.publish(url=>{
this.pushurl = url
<!-- this.examlive 是live-pusher的实例对象 -->
this.examlive.start({
success: (a) => {
console.log("推流成功")
},
fail:(e)=>{
console.log('推流失败')
}
})
},e=>{
console.log(e)
})
- 加入失败时调用
实例的rejoin()
,重新加入 - 还可以调用
实例的on()
来进行监听
- 监听是否有人加入
stream-added
,获取加入人的信息,并通过实例的subscribe()
需要传入uid来获取加入人的播流地址
this.client.on("stream-added",e => {
this.client.subscribe(e.uid,(url)=>{})
})
- 监听是否有人离开
stream-removed
this.client.on("stream-removed", e => {
console.log(`${e.uid}的远端流移除成功`)
},e=>{
console.log('移除失败')
});
实例的leave()
是离开的方法
this.client.leave();
实例的destroy()
是销毁本地实例的
还可以和web端等互通,后续更新