实时音视频云

  • 后端开发

    最近更新时间:2018-08-30 16:42:25

    说明

    这里将使用 NodeJS 来开发我们实时音视频应用需要的后端服务,如果您不熟悉后端开发或者 NodeJS,可以先从这里 下载并安装 NodeJS 到您的机器。下面的代码不会很复杂,一个基本的后端服务是我们开发前端应用的基础,希望您可以按照流程完成后端开发的步骤。

    首先简单介绍一下 roomToken,roomToken 是一个包含了一次连麦所需要的主要信息的 token,这些信息包括 七牛的账户标识、连麦的应用id(appId)、连麦的房间号(roomName)、连麦的用户名(userId)、连麦用户的权限(是否可以踢人)等等。这个 token 通过自己七牛账户的私钥进行加密,因为涉及到私钥加密,所以计算 roomToken 的工作不能放在客户端(前端), 所以这里我们需要搭建一个后台为我们计算 roomToken。

    顺便也需要一个后台为我们的前端代码提供静态服务,所以这里我们的后端就是实现 2 个功能:

    • 提供计算 roomToken 的接口
    • 一个 http 静态服务

    Express 静态服务

    准备两个同级的文件夹 app 和 server,前者会放置我们的前端代码,后者放置我们的后端代码。我们首先起一个 Express 服务来为 app 文件夹提供 http 静态服务。
    让我们首先进入 server 文件夹并打开命令行窗口(确保命令行目前在 server 目录下)

    npm init # 初始化 npm,一直回车即可
    npm install express --save
    

    让我们在 server 目录下创建文件 index.js 写入如下代码

    // index.js
    const express = require('express');
    const path = require('path');
    const app = express();
    
    // 在 app 文件夹开启静态服务
    app.use(express.static('../app'));
    
    app.listen(8888, () => {
      console.log('Demo server listening on port 8888');
    });
    

    在刚刚的命令行里运行 node index.js 开启服务。看到 Demo server listening on port 8888 说明服务开启。
    您可以尝试在 app 文件夹下创建一个 index.html 文件,一切正常的话访问 http://localhost:8888 就能看到您刚刚创建的 index.html

    RoomToken 接口

    计算 roomToken 是个复杂的过程,不过通过七牛的 NodeJS SDK 我们可以很快完成这个步骤(如果您想详细了解 roomToken 的计算过程,参见这里)。同上文所说,一个 roomToken 包含了一次连麦的主要信息,所以在计算 roomToken 之前我们需要前端给我们提供部分信息。这里主要包括 3 个信息:连麦的房间号、连麦的用户名、连麦用户的权限,其他信息比如 七牛账户信息、连麦 app 信息等都是在后端提前配置好固定下来的,不需要前端动态提供。

    本篇教程出于简单考虑,默认给予所有用户 admin 的权限,即所有用户都有踢人的权限,方便我们后文演示功能。所以梳理下来,这个 roomToken 我们需要前端为我们提供 2 个信息,即 连麦房间号连麦用户名

    继续在刚刚的命令行下输入以下命令,安装七牛的 NodeJS SDK

    npm install qiniu --save # 安装七牛 NodeJS SDK
    

    修改我们刚刚创建的 index.js,在文件末尾加入如下代码

    // index.js
    const qiniu = require('qiniu');
    
    const QINIU_AK = '<填写您七牛账户的 AK>';
    const QINIU_SK = '<填写您七牛账户的 SK>';
    const QINIU_RTN_APPID = '<填写您的连麦 APPID>'; 
    const QINIU_CREDENTIALS = new qiniu.Credentials(QINIU_AK, QINIU_SK);
    
    app.get('/roomtoken/user/:userid/room/:roomname', (req, res) => {
      const userId = req.params.userid;
      const roomName = req.params.roomname;
    
      const roomToken = qiniu.room.getRoomToken({
        appId: QINIU_RTN_APPID,
        roomName: roomName,
        userId: userId,
        expireAt: Date.now() + (1000 * 60 * 60 * 3), // token 的过期时间默认为当前时间之后 3 小时
        permission: 'admin', // 默认所有的用户权限都是 admin,都可以踢人
      }, QINIU_CREDENTIALS);
    
      res.send(roomToken);
    });
    

    其中 AK/SK 在控制台界面 管理面板-密钥管理 里可以查看,连麦 APPID 为实时音视频云中您创建的连麦应用 ID。

    一切顺利的话,再次启动后台,访问 http://localhost:8888/roomtoken/user/testuser/room/testroom 就能看到 roomToken的返回。
    现在我们可以指定用户名和房间名构造一个请求来获取相应的 roomToken 了。

    至此,我们完成了后台的开发工作。下面的代码我们暂定您的后台一直处于运行状态。

    以上内容是否对您有帮助?
  • Icon free helper
    Close