zoukankan      html  css  js  c++  java
  • 声网的实时音视频总结

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

  • 相关阅读:
    进程-线程-消息队列
    用Ogre实现《天龙八部》场景中水面(TerrainLiquid)详解
    TCP协议三次握手过程分析【图解,简单清晰】
    excel批量删除sql语句
    批量删除指定盘指定格式文件
    Linux命令速查手册(第2版)学习
    List、Map、Set 三个接口,存取元素时,各有什么特点
    HashMap 什么时候进行扩容呢
    两个对象值相同 (x.equals(y) == true),但却可有不同的 hash code,这句话对不对?
    ArrayList,Vector, LinkedList 的存储性能和特性
  • 原文地址:https://www.cnblogs.com/aloneer/p/14988669.html
Copyright © 2011-2022 走看看