对于实时音频及视频通话,我们已经司空见惯,比较常用的就是微信的音视频通话功能,对于这种功能,给我们的生活带来了极大的方便和改变。这里需要前端和后端配合,再结合声网(第三方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),个人的idthis.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端等互通,后续更新