对于实时音频及视频通话,我们已经司空见惯,比较常用的就是微信的音视频通话功能,对于这种功能,给我们的生活带来了极大的方便和改变。这里需要前端和后端配合,再结合声网(第三方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() 来进行监听
  1. 监听是否有人加入 stream-added,获取加入人的信息,并通过 实例的subscribe() 需要传入uid来获取加入人的播流地址
this.client.on("stream-added",e => {
  this.client.subscribe(e.uid,(url)=>{})
})
  1. 监听是否有人离开 stream-removed
this.client.on("stream-removed", e => {
  console.log(`${e.uid}的远端流移除成功`)
},e=>{
  console.log('移除失败')
});
  • 实例的leave() 是离开的方法
this.client.leave();
  • 实例的destroy() 是销毁本地实例的

还可以和web端等互通,后续更新