基于七牛RTN实现多人在线会议或课堂(一)

一、 七牛实时音视频云介绍

1、产品架构

  

  客户端SDK:主要负责客户端的音视频采集、渲染、滤镜处理、编解码、传输等工作,客户可以快速集成到自己 App 中,让自己的应用具备音视频通话的能力。 支持 Android、iOS、Web ,集成 SDK 就可实现音视频的采集、编解码、渲染播放等工作。

  服务端REST API和SDK:主要提供房间管理、状态回调等基本的业务功能,另外还提供鉴黄鉴暴、质量分析等配套功能 只需要集成对应语言的服务端 SDK 即可以管理实时音视频互动房间、调用配套数据处理服务、向客户端通知音视频流和数据处理的状态。

2、信令传输

  实时通话交互流程如下:

  

  因此,服务端需要开发的主要工作如下:

  1.为用户创建通话房间,并将通话房间和对应主播的Id关联起来;

  2.计算加入房间的roomToken并提供给App,该roomToken是结合uerId、roomName等信息使用七牛的AccessKey和SecretKey按照一定的规则生成;

  3.提供通话的业务逻辑,如:通话请求/应答业务逻辑、服务端房间管理和踢人等;

  4.关于roomToken的计算方法及RTC Server API的说明可查阅《七牛实时音视频云服务端 API 接口规范》。

3、产品相关资料

  RTN Demo体验:https://doc.qnsdk.com/rtn/docs/demo

  七牛实时音视频云web SDK官方地址:https://doc.qnsdk.com/rtn/web

  音视频云接入流程:https://doc.qnsdk.com/rtn/docs/rtn_startup

  web SDK接入文档:https://doc.qnsdk.com/rtn/web/docs/sdk_overview.html

二、Vue前端项目中开发准备

1、引入SDK

  这里通过npm引入SDK:

npm install --save pili-rtc-web

  如果想更新到最新版本或指定版本,运行如下命令:

npm install --save pili-rtc-web@latest  # 最新版本
npm install --save pili-rtc-web@2.0.0   # 指定版本 

2、在单页面应用中引入

<template>
</template>

<script>
    import * as QNRTC from "pili-rtc-web";

    export default {
        name: 'VideoConference',
    },
    mounted() {
        console.log("current version is", QNRTC.version);
    }
</script>

  访问对应页面地址,看到打印的 current version 表示引入成功。

3、关于async/await

  SDK 在对外 API 以及之后的示例中都会默认使用 async/await 的异步方案。

  这里以最常用的异步操作 setTimeout 为例,分别介绍 Promise/Async/Await 这三种异步方案。

  这里编写了 2 个函数,功能都是调用 setTimeout 然后 1s 后执行相关代码。前者是最常用的 Callback 模式,后者是一个 Promise:

const setTimeoutCallback = (callback) => {
  setTimeout(callback, 1000);
}

const setTimeoutPromise = () => new Promise(resolve => {
  setTimeout(resolve, 1000);
})

  然后利用上面的函数分别用三种异步方案实现一个需求——每隔一秒钟打印一行字,重复 3 次。

(1)callback方案
setTimeoutCallback(() => {
  console.log("text!");
  setTimeoutCallback(() => {
    console.log("text!");
    setTimeoutCallback(() => {
      console.log("text!");
    });
  });
});
(2)promise方案
// promise
setTimeoutPromise()
  .then(() => {
    console.log("text!");
    return setTimeoutPromise();
  }).then(() => {
    console.log("text!");
    return setTimeoutPromise();
  }).then(() => {
    console.log("text!");
  });
(3)async/await方案
// async/await
(async () => {
  await setTimeoutPromise();
  console.log("text!");
  await setTimeoutPromise();
  console.log("text!");
  await setTimeoutPromise();
  console.log("text!");
})();

  在这种场景下 async/await 的写法会更加简洁优雅。在七牛的 SDK 中,大部分都是这种串行异步的场景,也推荐使用 async/await 的写法。

4、Track模式和Stream模式对比

  Web 端选择封装了两套模式的 API 供用户选择。一套为 Stream 模式,也就是用户和流一对一关系的模式。一套为 Track 模式,也就是用户和 Track 一对多关系的模式。

  需要注意的是,这 2 个模式只有在 Web SDK 下 的 API 中有区别,在实际实现上,都是通过以 Track 为单位操作流实现的。只是在 Stream 模式下,只允许用户发布至多一个音频 Track 和至多一个视频 Track。

(1)什么情况使用Track模式

  需求场景满足以下情况时,优先使用Track模式:

  • 不清楚需求边界的情况
  • 需要一个用户同时发布多路视频画面或多路音频画面
  • 用户订阅时需要有动态订阅逻辑,即纯音频订阅、纯视频订阅等
  • 虽同时刻只有一个视频画面,但有画面切换的需求
(2)什么情况使用Stream模式

  需求场景满足以下情况时,优先使用Stream模式:

  • 明确需求中一个用户最多只发布一路视频和一路音频
  • 没有动态订阅需求,远端发布什么就订阅什么
  • 老版本用户希望升级v2

三、房间管理

  由于我需要实现多人在线会议场景,因此必须选用Track模式实现。

1、从后端获取token

  SDK通过传入RoomToken来完成加入房间的。这个RoomToken是包含连麦所需要的主要信息:七牛的账户标识、连麦的应用 ID(appId)、连麦的房间

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值