jancd/qiniu-developer_ShareGPT huggingface dataset:
human: 如何处理七牛云的实时音视频房间管理

gpt: [实时音视频](https://developer.qiniu.com/rtc) > 使用指南 > WXApp >房间管理

#  房间管理

最近更新时间: 2022-02-28 15:56:09

本部分介绍如何进行房间管理，获取房间信息以及用户信息等常见功能。

# 监听房间连接状态

SDK 内部维护了当前客户端与房间之间的连接状态，建议在加入房间之前，先对连接状态进行监听，根据当前状态处理相关逻辑。

    
    
    client.on("connection-state-changed", (connectionState) => {
      console.log("connection-state-changed", connectionState);
    });
    

其中
[connectionState](https://developer.qiniu.com/rtc/10955/WXAppQNConnectionState)
表示当前所处状态，每个状态均与相应行为操作相关，例如：

  * 初始情况下，状态为 `DISCONNECTED`
  * 与房间建立连接过程中，状态变为 `CONNECTING`
  * 与房间连接成功后，状态变为 `CONNECTED`
  * 与房间断开连接后，状态再次变为 `DISCONNECTED`

# 加入房间

在创建房间对象 [QNRTCClient](https://developer.qiniu.com/rtc/10950/WXAppQNRTCClient)
完成之后，可以调用 [join](https://developer.qiniu.com/rtc/10950/WXAppQNRTCClient#join)
方法来加入房间。

    
    
    const roomToken = "...";
    await client.join(roomToken);
    

> 关于 roomToken 在服务端的生成可查阅 [RoomToken
> 的签算](https://developer.qiniu.com/rtc/8802/pd-overview)。

当本地加入房间，其他正在房间中的远端用户可以通过监听 [user-
joined](https://developer.qiniu.com/rtc/10950/WXAppQNRTCClient#USER_JOINED)
事件获取该信息。

    
    
    Client.on("user-joined", (user) => {
      console.log("user-joined", user);
    });
    

# 离开房间

本地调用 [leave](https://developer.qiniu.com/rtc/10950/WXAppQNRTCClient#leave)
方法，可以退出房间。

    
    
    await client.leave();
    

本地退出房间，正在房间中的远端用户可以通过监听 [user-
left](https://developer.qiniu.com/rtc/10950/WXAppQNRTCClient#USER_LEFT)
事件获取该信息。

    
    
    client.on("user-left", (user) => {
      console.log("user-left", user);
    });
    

# 异常退出房间

在网络发生异常等情况下，如果 SDK 与服务端的连接断开，SDK
内部会尝试主动重连。如果重连成功，[connectionState](https://developer.qiniu.com/rtc/10955/WXAppQNConnectionState)
的状态会变为 `RECONNECTED`。

但是，如果经过多种重连逻辑均无法恢复正常连接时，SDK 会主动退出房间，房间连接状态变为 `DISCONNECTED`。

此时的事件回调中可以获取到第二个参数
[info](https://developer.qiniu.com/rtc/10943/WXAppQNConnectionDisconnectedInfo)
对象，该对象中包含了异常退出房间的信息。

    
    
    import { QNConnectionState, QNConnectionDisconnectedReason } from "qnweb-rtc";
    
    client.on("connection-state-changed", function (connectionState, info) {
      if (
        connectionState === QNConnectionState.DISCONNECTED &&
        info.reason === QNConnectionDisconnectedReason.ERROR
      ) {
        console.warning("网络异常，请检查网络后重试");
      }
    });
    

此时建议提示用户网络异常，请用户检查网络后重试。

以上内容是否对您有帮助？
human: 如何处理七牛云的实时音视频错误码

gpt: [实时音视频](https://developer.qiniu.com/rtc) > 使用指南 > WXApp >错误码

#  错误码

最近更新时间: 2022-03-01 10:40:38

本文主要介绍 QNRTC SDK 各端相关的错误码及其建议的处理方式。

> 若返回的错误码本文未提及，请[提交工单](https://support.qiniu.com/tickets/new)或者联系七牛技术支持同学协助解决

# 房间相关错误码

枚举值| 错误码| 说明| 处理方式  
---|---|---|---  
SUCCESS| 0| 无错误| 无  
JOIN_ROOM_ERROR| 10001| 房间 Token 错误| 表示您提供的房间 token 不符合七牛 token 签算规则，详情请参考
[RoomToken 签发服务](https://doc.qnsdk.com/rtn/docs/server_overview#1)  
JOIN_ROOM_ERROR| 10002| 房间 Token 过期| 表示您的房间 token 过期，需要重新生成 token 再加入  
JOIN_ROOM_ERROR| 10022| 房间内已经有同名用户| 后台如果配置为开启“禁止自动踢人”，则同一用户重复加入/未正常退出再加入会触发此错误  
ERROR_AUTH_FAILED| 21001| 加入房间认证失败| 服务验证时出错，可能为服务网络异常，也可能是 token 验证失败，建议检查签算
token 的信息是否异常，若 token 无误，可重新尝试加入房间  
ERROR_FATAL| 21005| 非预期错误| 需要检查接口调用、设备状态、网络状态等是否正常  
  
# CDN 转推相关错误码

枚举值| 错误码| 说明| 处理方式  
---|---|---|---  
ERROR_INVALID_PARAMETER| 10053| 参数错误| 请检查操作的参数是否合法  
ERROR_FATAL| 21005| 非预期错误| 请重新尝试操作或者联系七牛技术支持同学协助定位  
  
以上内容是否对您有帮助？
human: 如何处理七牛云的实时音视频迁移指南

gpt: [实时音视频](https://developer.qiniu.com/rtc) > 使用指南 > WXApp >迁移指南

#  迁移指南

最近更新时间: 2022-02-28 15:36:51

QNRTC WXApp SDK 4.x 是一个全量重构版本，简化了接口调用逻辑，提高了接口的易用性，提供了更友好的事件监听机制。

# 概览

在 4.x 版本 SDK 中，我们提供了 [QNRTC](https://developer.qiniu.com/rtc/10958/WXAppQNRTC)
和 [QNRTCClient](https://developer.qiniu.com/rtc/10950/WXAppQNRTCClient)
两个类来管理房间和音视频流的采集、发布、订阅等操作。

  * [QNRTC](https://developer.qiniu.com/rtc/10958/WXAppQNRTC) 主要负责处理 SDK 全局配置等。
  * [QNRTCClient](https://developer.qiniu.com/rtc/10950/WXAppQNRTCClient) 主要负责处理房间的加入、离开，音视频轨的发布、订阅等房间交互相关的操作。

上述管理方式的改动将影响到 SDK 的主要交互流程，若您需要升级，可以参考 [RTC 4.x
使用指南](https://developer.qiniu.com/rtc/11146/user-guidance-wxapp) 的使用姿势分模块进行更新。

# Track 的定义及使用方式

在 4.x 版本 SDK 中，我们新增了音视频 **Track** 类，并对本地 **Track** 和远端 **Track**
做了区分，继承结构定义如下：

  * [QNTrack](https://developer.qiniu.com/rtc/10944/WXAppQNTrack)
    * [QNLocalTrack](https://developer.qiniu.com/rtc/10942/WXAppQNLocalTrack)
    * [QNRemoteTrack](https://developer.qiniu.com/rtc/10948/WXAppQNRemoteTrack)

v4.x 版本除了新增音视频 **Track** 类，还将本地静音 **Track** 以及监听远端 **Track** 静音状态等逻辑添加到
**Track** 类上。

对从本地采集的角度来说，通过
[QNRTCClient](https://developer.qiniu.com/rtc/10950/WXAppQNRTCClient) 上
[publish](https://developer.qiniu.com/rtc/10950/WXAppQNRTCClient#publish)
方法的回调函数，获取本地采集的 **Track** ：

对订阅远端的媒体流来来说，当远端发布时，本地可以通过监听
[QNRTCClient](https://developer.qiniu.com/rtc/10950/WXAppQNRTCClient) 上的
`user-published` 事件来获取远端媒体流
[QNRemoteTrack](https://developer.qiniu.com/rtc/10948/WXAppQNRemoteTrack) 对象。

# 房间管理

在 4.x 版本中，创建房间对象需要调用 [QNRTC](https://developer.qiniu.com/rtc/10958/WXAppQNRTC)
类的静态方法 `createClient` 来创建
[QNRTCClient](https://developer.qiniu.com/rtc/10950/WXAppQNRTCClient)
房间对象。下面来看如下使用该对象来管理房间：

  1. 首先是加入和离开房间。可以通过 [join](https://developer.qiniu.com/rtc/10950/WXAppQNRTCClient#join) 和 [leave](https://developer.qiniu.com/rtc/10950/WXAppQNRTCClient#leave) 方法来加入/离开房间，可以通过监听 [user-joined](https://developer.qiniu.com/rtc/10950/WXAppQNRTCClient#USER_JOINED) 和 [user-left](https://developer.qiniu.com/rtc/10950/WXAppQNRTCClient#USER_LEFT) 事件来判断远端用户是否加入/离开房间。
  2. 然后是发布 **Track** 。使用 [publish](https://developer.qiniu.com/rtc/10950/WXAppQNRTCClient#publish) 方法进行发布 **Track** ，通过监听 [user-published](https://developer.qiniu.com/rtc/10950/WXAppQNRTCClient#USER_PUBLISHED) 和 [user-unpublished](https://developer.qiniu.com/rtc/10950/WXAppQNRTCClient#USER_UNPUBLISHED) 事件获取远端用户的发布/取消发布信息。
  3. 最后是订阅远端 **Track** 。使用 [subscribe](https://developer.qiniu.com/rtc/10950/WXAppQNRTCClient#subscribe) 方法进行订阅远端用户所发布的 **Track** 。

以上内容是否对您有帮助？
human: 如何处理七牛云的实时音视频初始化

gpt: [实时音视频](https://developer.qiniu.com/rtc) > 使用指南 > Uniapp >初始化

#  初始化

最近更新时间: 2023-12-18 15:11:49

本部分介绍了实时音视频的初始化方式及其配置项。

> 在加入房间前，需要使用 SDK 提供的
> [configRTC](https://developer.qiniu.com/rtc/11415/UniappQNRTC#configRTC)
> 用来进行初始化配置。

#默认配置初始化

直接使用
[QNRTC.configRTC](https://developer.qiniu.com/rtc/11415/UniappQNRTC#configRTC)
默认配置进行初始化，示例代码如下：

    
    
    QNRTC.init()
    // 老版本 QNRTC.configRTC() 已废弃
    

若 默认配置无法满足您的场景需要，您可通过传入
[QNRTCConfiguration](https://developer.qiniu.com/rtc/11385/UniappQNRTCConfiguration)
对象进行自定义初始化配置。

#设置媒体传输方式

通过 policy 参数设置媒体传输方式，默认使用 UDP 传输。

    
    
    QNRTC.configRTC({
        policy: QNRTCPolicy.forceTCP
    })
    

其中，媒体传输方式有如下几种，可根据实际情况自行选择：

    
    
    enum QNRTCPolicy {
        forceTCP = "forceTCP",  // 强制 tcp
        forceUDP = "forceUDP",  // 强制 udp
        preferUDP = "preferUDP"  // 优先 UDP，不通的话自动改为 TCP
    }
    

#设置日志等级

通过 logLevel 参数设置 SDK 的日志等级。

    
    
    QNRTC.configRTC({
        logLevel: QNRTCLogLevel.error
    })
    

> 由于 uniapp 兼容 iOS 与 Android，除了上述两种自定义配置项，sdk 还提供了专属于 iOS 与 Android
> 的配置项，具体完整配置可参考
> [QNRTCConfiguration](https://developer.qiniu.com/rtc/11385/UniappQNRTCConfiguration)。

以上内容是否对您有帮助？
human: 如何处理七牛云的实时音视频发布和订阅

gpt: [实时音视频](https://developer.qiniu.com/rtc) > 使用指南 > Uniapp >发布和订阅

#  发布和订阅

最近更新时间: 2023-12-18 15:12:33

本文主要介绍如何实现在房间发布、订阅媒体流。

>   * **发布** 是指将创建好的音视频 Track
> 对应的音视频数据推送到七牛实时音视频服务的操作，执行发布操作后，远端用户可以选择性的进行订阅观看。
>   * **订阅** 是指向七牛实时音视频服务请求拉取远端发布的音视频数据的操作。订阅后，本地即可实时的接收远端发布的音视频数据。
>   * **有别于 CDN 转推** ，发布和订阅的音视频数据是基于实时性更好的 RTP 协议在房间内传输的，若您想要实现 RTMP
> 直播流分发的场景，请在音视频 Track 发布后，参考 [CDN
> 转推](https://developer.qiniu.com/rtc/11842/turn-the-cdn-push-uniapp) 进行实现。
>

# 发布 Track

发布 [Track](https://developer.qiniu.com/rtc/11390/UniappQNTrack) 前，需要对 Track
进行配置和创建，详情请见音视频采集，对于已经创建好的 Track，可通过
[QNRTCClient.publish](https://developer.qiniu.com/rtc/11402/UniappQNRTCClient#publish)
接口向房间内进行发布。

> 请确保在发布前已经成功加入房间，否则将发布失败。
    
    
    client.publish(tracksList, QNPublishResultCallback)
    

其中，[QNPublishResultCallback](https://developer.qiniu.com/rtc/11557/UniappQNPublishResultCallback)
回调了发布操作的结果通知：

    
    
    client.publish(trackList[], (onPublished，error) => {
        if(onPublished) {
            // 发布成功
        }else {
            // 发布失败
        }
    })
    

发布 Track 失败的错误码可参考 [Android 发布 Track
相关错误码](https://developer.qiniu.com/rtc/9904/rtc-error-code-android#3) 以及 [iOS
发布 Track 相关错误码](https://developer.qiniu.com/rtc/10084/rtc-error-code-
iOS#2)。其中两个端错误 **code** 一致，错误信息可能有略微差异。

发布 Track 成功后，远端用户会收到如下通知回调：

    
    
    client.on("onUserPublished", (params) => {
        console.log(params.remoteUserID, params.trackList)
    })
    

# 取消发布 Track

对于已发布的 track，可调用
[QNRTCClient.unpublish](https://developer.qiniu.com/rtc/11402/UniappQNRTCClient#unpublish)
接口取消发布。

    
    
    client.unpublish(tracksList)
    

取消发布成功后，远端用户会收到如下通知回调：

    
    
    client.on("onUserUnpublished", (params) => {
        console.log(params.remoteUserID, params.trackList)
    })
    

# 订阅远端 Track

SDK 提供了自动订阅的功能，可通过
[QNRTCClient.setAutoSubscribe](https://developer.qiniu.com/rtc/11402/UniappQNRTCClient#setAutoSubscribe)
接口进行自动订阅功能的开启与关闭，默认为开启状态。

    
    
    client.setAutoSubscribe(false)
    

在自动订阅功能关闭时，用户可以通过调用
[QNRTCClient.subscribe](https://developer.qiniu.com/rtc/11402/UniappQNRTCClient#subscribe)
接口订阅远端 Tracks。

    
    
    client.subscribe(tracksList)
    

本地订阅远端用户媒体流成功后，会触如下回调：

    
    
    client.on("onAudioSubscribed", () => {
        // 视频轨订阅成功触发该回调
        this.remoteAudioTrack = params.trackList
    })
    client.on("onVideoSubscribed", () => {
        // 音频轨订阅成功触发该回调
        this.remoteVideoTrack = params.trackList
    })
    

成功订阅远端视频后将获取到
[remoteTrack](https://developer.qiniu.com/rtc/11397/UniappQNRemoteTrack) 对象，
通过该对象传参给 **QNRTC-UniPlugin-SurfaceView** 组件，即可渲染远端视频流。

    
    
    <QNRTC-UniPlugin-SurfaceView :local="1" :identifyID="remoteVideoTrack.identifyID" :userID="remoteVideoTrack.userID" :trackID="remoteVideoTrack.trackID"></QNRTC-UniPlugin-SurfaceView>
    

> 其中 local 为 1 代表该组件渲染远端 **Track** 。

# 取消订阅远端 Track

调用
[QNRTCClient.unsubscribe](https://developer.qiniu.com/rtc/11402/UniappQNRTCClient#unsubscribe)
接口取消订阅远端 Tracks。

    
    
    client.unsubscribe(tracksList)
    

以上内容是否对您有帮助？
human: 如何处理七牛云的实时音视频视频大小流

gpt: [实时音视频](https://developer.qiniu.com/rtc) > 使用指南 > Uniapp >视频大小流

#  视频大小流

最近更新时间: 2023-12-18 15:13:07

本文主要介绍视频[大小流](https://developer.qiniu.com/rtc/9909/the-rtc-basic-
concept#9)的使用方式。

# 功能介绍

![大小流示意图](http://docs.qnsdk.com/multistream.png)

当用户 A 开启大流时，会发送多个不同分辨率的视频码流到服务端；此时，不同的用户需要订阅 A
的视频流时可以根据自己的需要或者服务端的策略来订阅到不同质量的视频流。

# 开启大小流

在创建音视频 [Track](https://developer.qiniu.com/rtc/9909/the-rtc-basic-
concept#track) 时，可以通过
[multiStreamEnable](https://developer.qiniu.com/rtc/11394/UniappQNCameraVideoTrackConfig#multiStreamEnable)
接口来启用大小流功能，以
[QNCameraVideoTrack](https://developer.qiniu.com/rtc/11433/UniappQNCameraVideoTrack)
为例，其启用方式如下：

    
    
    const mCameraVideoTrack = QNRTC.createCameraVideoTrack({
        multiStreamEnable: true
    });
    

开启大小流功能后，发送端可以通过获取统计信息的接口
[QNRTCClient.getLocalVideoTrackStats](https://developer.qiniu.com/rtc/11402/UniappQNRTCClient#getLocalVideoTrackStats)
来感知发送情况。

# 订阅大小流

订阅端可以通过
[QNRemoteVideoTrack.isMultiProfileEnabled](https://developer.qiniu.com/rtc/11380/UniappQNRemoteVideoTrack#isMultiProfileEnabled)
接口判断远端用户是否发布大小流。若接口返回 true，则可通过
[QNRemoteVideoTrack.setProfile](https://developer.qiniu.com/rtc/11380/UniappQNRemoteVideoTrack#setProfile)
来订阅指定的 QNTrackProfile。

示例代码如下：

    
    
    if (remoteVideoTrack.isMultiProfileEnabled()) {
        remoteVideoTrack.setProfile(QNTrackProfile.MEDIUM);
    }
    

> **注意：setProfile 接口仅是设置预期的流等级，并不代表实际的订阅等级，若实际发送端还未发送指定等级的流，则将无法订阅到指定的
> profile**

当订阅指定 profile 生效后，将通过 **Track** 的回调
[onVideoProfileChanged](https://developer.qiniu.com/rtc/11409/UniappQNRTCTrackEvent#onVideoProfileChanged)
告知，具体使用方式如下：

    
    
    remoteVideoTrack.on("onVideoProfileChanged", (params) => {
        console.log(params.profile, params.trackID)
    })
    

# 注意事项

  * **开启大小流功能设置编码宽高最低为 1280 x 720**
  * **目前仅支持在发送端发布单路视频 Track 的场景下，使用大小流功能**
  * **在`Android` 的大小流场景下，需确保在创建视频 Track 时通过 [QNVideoEncoderConfig](https://developer.qiniu.com/rtc/12593/UniappQNVideoEncoderConfig) 将视频降级模式 [QNDegradationPreference](https://developer.qiniu.com/rtc/12603/UniappQNDegradationPreference) 设置为 MAINTAIN_RESOLUTION 或者 ADAPT_BITRATE_ONLY，保证推流分辨率不会改变（该配置仅支持 `Android`）**
  * **对于开启大小流的用户，建议保证有良好的网络环境，保证多流发送质量**

以上内容是否对您有帮助？
human: 如何处理七牛云的实时音视频服务端说明

gpt: [实时音视频](https://developer.qiniu.com/rtc) > 使用指南 > 服务端 >服务端说明

#  服务端说明

最近更新时间: 2021-11-12 16:19:40

虽然实时音视频云已经提供了云端的音视频通话服务，但是想让这个服务和您的实际业务耦合还是需要您自己搭建一些业务服务的

其中必须用到的包括以下四部分：

  * RoomToken 签发服务
  * HTTP 请求鉴权
  * 应用管理
  * 房间管理

除此之外，还有可能用到的服务端功能有：

功能 | 说明  
---|---  
RTC-Pub | 可称为“在线媒体流接入”功能，可将允许将视频文件转推到RTC连麦房间内，供房间内的其他用户订阅。  
单路转推 | 直接将房间中某路媒体流转推到CDN。  
合流转推 | 设置合流的宽高、帧率、码率等信息，支持纯音频合流。  
旁路直播 | 使用单路转推或合流转推后，可在直播云查看旁路直播情况。  
录制存储 | 使用单路转推或合流转推后，可对旁路直播的媒体流内容进行录制存储。  
内容审核 | 使用单路转推或合流转推后，可对旁路直播的媒体流内容进行鉴黄鉴暴恐，可参考[内容审核 __](https://www.qiniu.com/products/censor)产品  
质量监控 | 结合七牛大数据产品，提供多维度的质量数据监控和分析，可参考 [机器数据分析平台 __](https://www.qiniu.com/products/pandora)产品  
  
以上内容是否对您有帮助？
human: 如何处理七牛云的实时音视频服务端 SDK

gpt: [实时音视频](https://developer.qiniu.com/rtc) > 使用指南 > 服务端 >服务端 SDK

#  服务端 SDK

最近更新时间: 2022-04-01 17:46:45

为了方便开发者快速部署业务服务端对接实时音视频云，我们提供了Go、Java、Node.js、PHP、Python这五种代码的服务端SDK

## Go SDK

Github 地址： <https://github.com/qiniu/go-sdk/tree/master/rtc>

  
这里示例了 RoomToken 的生成代码，其他 API 可以参考具体的代码文件

    
    
    accessKey := "your ak"
    secretKey := "your sk"
    
    mac := qbox.NewMac(accessKey, secretKey)
    manager = NewManager(mac)
    
    appID := "xxxxx"
    roomName := "xxxxx"
    userID := "xxxxxx"
    
    token, err := manager.GetRoomToken(RoomAccess{AppID: appID, RoomName: roomName, UserID: userID, ExpireAt: time.Now().Unix() + 3600})
    

## Java SDK

Github 地址： <https://github.com/qiniu/java-
sdk/tree/master/src/main/java/com/qiniu/rtc>

  
这里示例了 RoomToken 的生成代码，其他 API 可以参考具体的代码文件

    
    
    import com.qiniu.util.Auth;
    
    Auth auth = Auth.create(accessKey, secretKey);
    RtcRoomManager rmanager = new RtcRoomManager(auth);
    String token = rmanager.getRoomToken("appid", "roomname", "userid", 1525410499, "user")
    

## Node.js

Github 地址： <https://github.com/qiniu/nodejs-sdk/tree/master/qiniu/rtc>

  
这里示例了 RoomToken 的生成代码，其他 API 可以参考具体的代码文件

    
    
    const ak = "your ak";
    const sk = "your sk";
    
    const credentials = new qiniu.Credentials(ak, sk);
    const roomToken = qiniu.room.getRoomToken({
      appId: QINIU_RTN_APPID,
      roomName: roomName,
      userId: userId,
      expireAt: Date.now() + (1000 * 60 * 60 * 3), // token 的过期时间默认为当前时间之后 3 小时
      permission: 'user',
    }, credentials);
    

## PHP SDK

Github 地址： <https://github.com/qiniu/php-
sdk/blob/master/src/Qiniu/Rtc/AppClient.php>

## Python SDK

Github 地址： <https://github.com/qiniu/python-
sdk/blob/master/qiniu/services/pili/rtc_server_manager.py>

以上内容是否对您有帮助？
human: 如何处理七牛云的实时音视频roomToken

gpt: [实时音视频](https://developer.qiniu.com/rtc) > 使用指南 > 服务端 >roomToken

#  roomToken

最近更新时间: 2022-02-07 18:16:55

## roomToken 签发服务

在进入一个实时音视频房间之前，您需要通过自己七牛云账户的 AK/SK 签算出一个 roomToken。roomToken
是一个包含了一次连麦所需要的主要信息的 token，这些信息包括 七牛的账户标识、连麦的应用 ID(appId)、连麦的房间号
(roomName)、连麦的用户名(userId)、有效期等等。这个 token
通过自己七牛账户的私钥进行加密，因为涉及到私钥加密，所以您需要自己搭建一个业务服务来向您的实时音视频应用提供 roomToken。

> RoomToken 的签算逻辑可以参考以下流程，当然，您也可以选择使用 服务端 SDK 来完成这些操作。

生成 roomToken 作为一个基本功能，各个语言版本的服务端 SDK 都提供了生成它的方法，具体参见各个 SDK 的文档。这里说明一下手动生成
roomToken 的计算方法。

    
    
    // 1. 定义房间管理凭证，并对凭证字符做URL安全的Base64编码
    roomAccess = {
        "appId": "<AppID>"
        "roomName": "<RoomName>",
        "userId": "<UserID>",
        "expireAt": <ExpireAt>,
        "permission": "<Permission>"
    }
    roomAccessString = json_to_string(roomAccess) 
    encodedRoomAccess = urlsafe_base64_encode(roomAccessString)
    // 2. 计算HMAC-SHA1签名，并对签名结果做URL安全的Base64编码
    sign = hmac_sha1(encodedRoomAccess, <SecretKey>)
    encodedSign = urlsafe_base64_encode(sign)
    // 3. 将AccessKey与以上两者拼接得到房间鉴权
    roomToken = "<AccessKey>" + ":" + encodedSign + ":" + encodedRoomAccess
    

参数 | 类型 | 说明  
---|---|---  
AppID | string | 房间所属帐号的 app 。  
RoomName | string | 房间名称，长度为3～64位。可包含大小写字母、数字、中划线(`-`)、下划线(`_`)，即满足正则表达式 `^[a-zA-Z0-9_-]{3,64}$`。  
UserID | string | 请求加入房间的用户 ID。长度为3～50位，可包含大小写字母、数字、中划线(`-`)、下划线(`_`)，即满足正则表达式 `^[a-zA-Z0-9_-]{3,50}$`。  
ExpireAt | int | int64 类型，鉴权的有效时间，传入以秒为单位的 64 位 Unix 绝对时间，token 将在该时间后失效。  
Permission | string | 该用户的房间管理权限，“admin” 或 “user”，默认为 “user” 。当权限角色为 “admin” 时，拥有将其他用户移除出房间等特权。  
  
以上内容是否对您有帮助？
human: 如何处理七牛云的实时音视频旁路直播

gpt: [实时音视频](https://developer.qiniu.com/rtc) > 使用指南 > 服务端 >旁路直播

#  旁路直播

最近更新时间: 2023-02-09 11:40:49

客户端调用SDK合流接口，或者服务端调用合流接口，成功的进行合流操作以后，即可在七牛直播云中查看旁路直播。 上文中配置的旁路直播空间是“sdk-
live”;旁路直播的流名称设置为魔法变量 $(roomName)，我们可以选择 roomName= wetest 的房间开始合流。

打开[七牛直播用户管理界面](https://portal.qiniu.com/pili) ，进入“云直播”模块。 选择 “sdk-live”
直播空间，进入 “直播流管理” 模块，即可看到包括流名称为 wetest 在内的所有活跃流，可以查看该流的实时信息，以及 RTMP、HLS、FLV
的播放地址。 ![image.png](https://dn-odum9helk.qbox.me/FpGLJ897DPZArau6YIgkt-WtLHy4)

以上内容是否对您有帮助？
human: 如何处理七牛云的实时音视频录制存储

gpt: [实时音视频](https://developer.qiniu.com/rtc) > 使用指南 > 服务端 >录制存储

#  录制存储

最近更新时间: 2021-09-16 15:37:39

云端落存储是为了满足客户音视频内容录制、备案的需求。目前云端落存储的前提是必须将房间内的多路流进行服务端合流，不合流而直接将多路流落存储的场景，可以使用单路转推功能。

## 开通正式直播空间

如果需要进行云端落存储，首先必须开通直播空间。

  
直播空间的开通方法见：https://developer.qiniu.com/pili/manual/1221/the-console-quick-
start  
如果您的业务中涉及到旁路直播功能的使用，则必须提供通过公安局备案的域名用于直播业务。

## 临时存储

按国家相关法律规定，所有直播内容需要至少存储 60 天。因此，在创建「直播空间」的第二步「设置存储空间」，需要选择存储空间中 ts
文件的过期时间，可选范围为 60 天 - 120 天。

  
旁路直播时，直播云会将旁路直播的内容自动切片为 ts 临时存储，并根据您在开通直播空间时设置的存储周期存储在七牛云存储中，过期后自动删除。

![image.png](https://dn-odum9helk.qbox.me/FhvJzbEBcGsD6sS4nyAbLByu3LDX)

## 永久存储

如果需要将临时存储内容转为永久存储，有自动录制、手动录制两种方法，主要区别

命名| 录制格式| 指定时间段| 指定时间段  
---|---|---|---  
自动录制| 自动名名| 可以选择mp4、m3u8 或 flv 中的一种| 无法指定  
手动录制| 可以指定命名| 默认为 m3u8, 如果指定其他格式，则保存动作为异步模式。详细信息可以参考 转码 api| 可以指定  
  
**自动录制** 联系七牛技术支持，打开自动录制功能，则所有房间旁路直播内容可以自动录制为 mp4、m3u8 或 flv 中的一种。

**手动录制** 可以直接调用 saveas 接口（接口说明地址：
[https://developer.qiniu.com/pili/api/2777/save-the-live-
playback）](https://developer.qiniu.com/pili/api/2777/save-the-live-
playback%EF%BC%89) 将临时文件转为永久存储，saveas 方式可以根据需求自定义命名。

以上内容是否对您有帮助？
human: 如何处理七牛云的实时音视频服务端API

gpt: [实时音视频](https://developer.qiniu.com/rtc) > API 文档 > 服务端API

#  服务端API

最近更新时间: 2022-07-07 11:23:27

> 服务端API是七牛提供的针对服务端开发过程中用到的相关API的集合，提供了包括APP管理、房间管理、转推和合流相关的HTTP协议的API文档。

服务端API提供一下功能：

功能 | 说明  
---|---  
[应用管理API __](https://developer.qiniu.com/rtc/8814/api-app)|  提供应用的创建、更改、删除功能  
[房间管理API __](https://developer.qiniu.com/rtc/8815/api-room)|
提供roomtoken生成、房间创建、房间列表等功能  
[合流转推API __](https://developer.qiniu.com/rtn/12001/confluence-api)|
提供合流转推任务的创建、更新、删除功能  
  
在调用服务端API的时候，可以选择使用[服务端SDK调用
__](https://developer.qiniu.com/rtc/8812/serversdk)，可以可以选择自己实现。

以上内容是否对您有帮助？
human: 如何处理七牛云的实时音视频RTC内容审核

gpt: [实时音视频](https://developer.qiniu.com/rtc) > API 文档 >
[服务端API](https://developer.qiniu.com/rtc/api/12000/the-service-api) > RTC内容审核

#  RTC内容审核

最近更新时间: 2022-09-23 11:30:07

# 背景

随着互联网的不断发展和智能设备的大规模普及，网络上的应用功能越来越多，受众群体也越来越广，在互联网文化内容极大丰富的同时，也产生了各种各样的难以控制的危险因素，具体包括色情、涉政、暴恐等各类违反社会稳定和谐、甚至危害国家安全的内容。随着政府对于不良信息监管日渐严格，每个网站和平台都在严肃对待和处理这些危险因素，而传统人力审核的方式处理网络上每天新产生的图片和视频变成了一个不可能完成的任务。

RTC直接进行内容审核可以帮助用户进行实时音视频的内容审核

# 1.接口说明

入口地址  
Host: rtc.qiniuapi.com

## 1.1创建任务

POST /v3/apps//rooms//scan_job

认证方式  
使用七牛AK/SK签名认证

请求参数

名称 | 类型 | 必需 | 描述  
---|---|---|---  
id | string | Y | 任务ID  
playerId | string | Y | 用户ID  
callBack | string | Y | 回调地址  
tracks | string | Y | TrackID  
params | object | Y | 截帧、审核参数  
  
params参数

名称 | 类型 | 必须 | 描述  
---|---|---|---  
params.image.is_on | boolean | N | true/false，默认为false。图片审核和音频审核必须开启一个。  
params.image.scenes | array | N | 图片审核类型，如果图片审核开启，则为必填字段，没有默认值，可选项：pulp terror politician ads。  
params.image.interval_msecs | int | N | 截帧频率，如果图片审核开启，则为必填字段，单位：毫秒，取值范围为 1000 ～ 60000（即1s~60s）。  
params.image.saver.bucket | string | N | 如果开启图片审核，则为必填字段，直播图片截帧文件存入的bucket，目前只支持存入七牛云华东的 bucket。如何创建七牛云bucket，请参见文档。  
params.image.saver.prefix | string | N | 保存的图片截帧文件的前缀。  
params.image.hook_rule | int | N | 图片审核结果回调规则，0/1。默认为0，返回判定结果违规的审核结果；设为 1 时，返回所有审核结果。  
params.audio.is_on | boolean | N | true/false，默认为false。图片审核和音频审核必须开启一个。  
params.audio.scenes | array | N | 音频审核类型，如果音频审核开启，则为必填字段，没有默认值，目前可选项：antispam。  
params.audio.saver.bucket | string | N | 如果开启音频审核，则为必填字段，直播音频截帧文件存入的bucket，目前只支持存入七牛云华东的 bucket。如何创建七牛云bucket，请参见文档  
params.image.saver.prefix | string | N | 保存的音频截帧文件的前缀。  
params.audio.hook_rule | string | N | 音频审核结果回调规则，0/1。默认为0，返回判定结果违规的审核结果；设为 1 时，返回所有审核结果。  
  
请求示例  
POST /v3/apps/abcdefghi/rooms/room0/scan_job  
Host: rtc.qiniuapi.com  
Content-Type: application/json  
Authorization: Qiniu xxxxxxxxxxxx

    
    
    {
      "id": "job0",
      "playerId": "player01",
      "callBack": "http://test.callback.io/common-callback",
      "tracks":[
        {"trackId": "trackid1"},
        {"trackId": "trackid2"}
      ],
      "params":{
      "image": {
        "is_on": true,
        "scenes": [
          "pulp",
          "terror",
          "politician"
        ],
        "interval_msecs": 2000,
        "saver": {
          "bucket": "live",
          "prefix": "image/"
        },
        "hook_rule": 0
      },
      "audio":{
        "is_on":true,
        "scenes":[
          "antispam"
        ],
        "saver":{
          "bucket":"live",
          "prefix":"audio/"
        },
        "hook_rule":0
      }
     }
    }
    
    

返回值:

    
    
    {"status":"OK","id":"job0"}
    

## 1.2删除识别任务

DELETE /v3/apps//rooms//scan_job/jobid

请求参数

名称 | 类型 | 必须 | 描述  
---|---|---|---  
id | string | Y | 任务ID  
playerId | string | Y | 用户ID  
  
请求示例

    
    
    DELETE /v3/apps/abcdefghi/rooms/room0/scan_job/jobid
    Host: rtc.qiniuapi.com
    Content-Type: application/json
    Authorization: Qiniu xxxxxxxxxxxx
    {
      "id": "job0",
      "playerId": "player01"
    }
    

返回值:

    
    
    {"status":"OK","id":"job0"}
    

以上内容是否对您有帮助？
human: 如何处理七牛云的实时音视频RTC直接录制

gpt: [实时音视频](https://developer.qiniu.com/rtc) > API 文档 >
[服务端API](https://developer.qiniu.com/rtc/api/12000/the-service-api) > RTC直接录制

#  RTC直接录制

最近更新时间: 2023-08-09 17:52:49

# RTC直接录制

七牛提供实时音视频录制功能，您可以根据业务需要使用七牛的录制功能，录制功能可以将您需要录制的音视频流录制成文件，然后落到存储内，供您后续进行回放等其他用途。

有了录制功能，你可以将语音聊天、视频聊天以及直播的内容储存下来，提供给更多的人在方便的时间观看。举个例子，实时在线监考系统需要判断学生是否存在作弊等违规操作，您可以通过录制回放查看学生是否违规。

只支持七牛存储功能，可与技术支持联系如何开通存储空间保证录制功能正常使用。

单流录制、多路流录制具体API可参考：

## 1.存储配置

可与技术支持联系由技术支持帮忙配置存储空间.

或自行通过API配置：

#### HOST: rtc.qiniuapi.com

#### 请求地址: POST /v3/apps/{appid}

    
    
    {
      "storage":{
        "bucket":"abc", 
        "expireDay":15
      }
    }
    

参数说明：

名称 | 类型 | 是否可选 | 描述 | 备注  
---|---|---|---|---  
bucket | string | 必填 | TS存储位置 | bucket区域必须为 华东-浙江，同时bucket所属账号必须与RTC为同一账号。  
expireDay | int | 必填 | TS存储默认过期时间 | 为0则永不过期  
  
## 2.录制任务

录制任务可以参考 [合流转推API __](https://developer.qiniu.com/rtc/12001/confluence-
api)，区别主要在于outputs对象：

名称 | 类型 | 是否可选 | 描述 | 备注  
---|---|---|---|---  
type | String | 必填 | 请填写：file |   
url | String | 必填 | 指明TS存储位置，例如：streamName，我们建议尽量使用唯一的streamName，每次可以给任务一个独立的值，例如streamName-timestamp。 | 最终TS文件会存储在${bucket}/fragments/z1.${appid}.${streamName}/。  
  
## 3\. 生成回放

#### HOST: rtc.qiniuapi.com

#### 请求地址: POST /v4/apps/{appid}/saveas

    
    
    {
        "fname": "rtc-test",
        "start": 1665284420,
        "end": 1665284508, 
        "expireDays": 2,
    }
    

参数说明：

名称 | 类型 | 是否可选 | 描述 | 备注  
---|---|---|---|---  
streamName | String | 必填 | 流名 | 推流url中的流名  
fname | String | 必填 | 指定生成m3u8文件名 | 回放文件名  
start | Int | 选填 | 用于指定生成回放的起始时间 | 与end参数搭配使用，如果不传，默认会生成推流起止的m3u8文件  
end | Int | 选填 | 用于指定生成回放的截止时间 | 参考start参数描述  
expireDays | Int | 必填 | 用于指定m3u8文件的自动过期时间 | 为0则永不过期  
  
以上内容是否对您有帮助？