human: 如何处理七牛云的实时音视频应用管理

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

#  应用管理

最近更新时间: 2021-09-16 15:31:30

这一部分服务是为了让您的业务后台能够自动地完成一些在控制台上需要完成的操作，比如创建应用，编辑应用等。 对于这些服务，我们统一封装了 Restful
的接口方便给您调用，在调用各个接口之前，您还需要在 http headers 中添加鉴权头以识别您的权限。

> 这些服务都可以通过服务端 SDK 来完成，以下都是介绍手动请求的情况。

## HTTP 请求鉴权

Qiniu RTC Server API 通过 Qiniu Authorization 方式进行鉴权，每个房间管理 HTTP 请求头部需增加一个
Authorization 字段：

    
    
    Authorization: "<QiniuToken>"
    

QiniuToken 是管理凭证，用于鉴权。  
使用七牛颁发的AccessKey和SecretKey，对本次 http 请求的信息进行签名，生成管理凭证。签名的原始数据包括 http 请求的
Method, Path, RawQuery, Content-Type 及 Body
等信息，这些信息的获取方法取决于具体所用的编程语言，建议参照七牛提供的 SDK 代码。 计算过程及伪代码如下：

    
    
    // 1.构造待签名的 Data
    // 添加 Method 和 Path
    data = "<Method> <Path>"
    // 添加 Query，如果Query不存在或者为空，则跳过此步
    if "<RawQuery>" != "" {
            data += "?<RawQuery>"
    }
    // 添加 Host
    data += "\nHost: <Host>"
    // 添加 Content-Type，如果Content-Type不存在或者为空，则跳过此步
    if "<Content-Type>" != "" {
            data += "\nContent-Type: <Content-Type>"
    }
    // 添加回车
    data += "\n\n"
    // 添加 Body， 如果Content-Length, Content-Type和Body任意一个不存在或者为空，则跳过此步；如果Content-Type为application/octet-stream，也跳过此步
    bodyOK := "<Content-Length>" != "" && "<Body>" != ""
    contentTypeOK := "<Content-Type>" != "" && "<Content-Type>" != "application/octet-stream"
    if bodyOK && contentTypeOK {
            data += "<Body>"
    }
    // 2. 计算 HMAC-SHA1 签名，并对签名结果做 URL 安全的 Base64 编码
    sign = hmac_sha1(data, "Your_Secret_Key")
    encodedSign = urlsafe_base64_encode(sign)  
    // 3. 将 Qiniu 标识与 AccessKey、encodedSign 拼接得到管理凭证
    <QiniuToken> = "Qiniu " + "Your_Access_Key" + ":" + encodedSign
    

## CreateApp 创建一个应用

在七牛云控制台页面打开实时音视频云可以看到 连麦应用列表，这里每个应用都应该和您的实际业务上的应用相对应，也就是我们这里说的 app。app
是您在七牛实时音视频云的业务配置集合。 一个 app 帐号下的连麦房间（频道）拥有独立的命名空间，并且这些房间的可配置功能选项遵从 app
的配置，例如人数限制、是否允许抢流、合流、旁路直播等。您可以创建多个不同的 app（最 多 10 个） ，以实现不同的配置需求。注意，不同 app
下面所属的同名房间并不互通（因为 app 相互独立）

  
下面列举了操作和管理这些 app 的接口，如果您希望通过服务端 SDK 来调用，请具体参照各个 SDK 自己的文档。

    
    
    Host rtc.qiniuapi.com
    POST /v3/apps
    Authorization: qiniu mac
    Content-Type: application/json
    {
        "hub": "<Hub>",
        "title": "<Title>",
        "maxUsers": <MaxUsers>,
        "noAutoKickUser": <NoAutoKickUser>
    }
    
    

参数| 说明  
---|---  
Hub| 绑定的直播 hub，可选，使用此 hub 的资源进行推流等业务功能，hub 与 app 必须属于同一个七牛账户。  
Title| app 的名称，可选，注意，Title 不是唯一标识，重复 create 动作将生成多个 app。  
MaxUsers| int 类型，可选，连麦房间支持的最大在线人数。  
NoAutoKickUser| bool 类型，可选，禁止自动踢人（抢流）。默认为 false ，即同一个身份的 client
(app/room/user) ，新的连麦请求可以成功，旧连接被关闭。  
      
    
    200 OK 
    {
        "appId": "<AppID>",
        "hub": "<Hub>",
        "title": "<Title>",
        "maxUsers": <MaxUsers>,
        "noAutoKickUser": <NoAutoKickUser>,
        "createdAt": <CreatedAt>,
        "updatedAt": <UpdatedAt>
    }
    616
    {
        "error": "hub not match"
    }
    

参数| 说明  
---|---  
AppID| app 的唯一标识。  
Hub| 绑定的直播 hub，使用此 hub 的资源进行推流等业务功能，hub 与 app 必须属于同一个七牛账户。  
Title| app 的名称，注意，Title 不是唯一标识。  
MaxUsers| int 类型，连麦房间支持的最大在线人数。  
NoAutoKickUser| bool 类型，禁止自动踢人。  
CreatedAt| time 类型，app 创建的时间。  
UpdatedAt| time 类型，app 更新的时间。  
  
## GetApp 获取一个应用当前的配置信息

    
    
    Host rtc.qiniuapi.com
    GET /v3/apps/<AppID> 
    Authorization: <qiniu mac>
    
    
    
    200 OK 
    {
        "appId": "<AppID>",
        "hub": "<Hub>",
        "title": "<Title>",
        "maxUsers": <MaxUsers>,
        "noAutoKickUser": <NoAutoKickUser>,
        "mergePublishRtmp": {
            "enable": <Enable>,
            "audioOnly": <AudioOnly>,
            "height": <OutputHeight>,
            "width": <OutputHeight>,
            "fps": <OutputFps>,
            "kbps": <OutputKbps>,
            "url": "<URL>",
            "streamTitle": "<StreamTitle>"
        },
        "createdAt": <CreatedAt>,
        "updatedAt": <UpdatedAt>
    }
    612
    {
        "error": "app not found"
    }
    

参数| 说明  
---|---  
AppID| app 的唯一标识。  
UID| 客户的七牛帐号。  
Hub| 绑定的直播 hub，使用此 hub 的资源进行推流等业务功能，hub 与 app 必须属于同一个七牛账户。  
Title| app 的名称，注意，Title 不是唯一标识。  
MaxUsers| int 类型，连麦房间支持的最大在线人数。  
NoAutoKickUser| bool 类型，禁止自动踢人。  
MergePublishRtmp| 连麦合流转推 RTMP 的配置。  
CreatedAt| time 类型，app 创建的时间。  
UpdatedAt| time 类型，app 更新的时间。  
  
## DeleteApp 删除应用

    
    
    Host rtc.qiniuapi.com
    DELETE /v3/apps/<AppID> 
    Authorization: <qiniu mac>
    
    
    
    200 OK
    612
    {
        "error": "app not found"
    }
    

## UpdateApp 更新一个应用的配置信息

> 注意！调用这个接口后仅对调用后新创建的房间有效，已经存在的房间需要等待被关闭重新创建后生效
    
    
    Host rtc.qiniuapi.com
    Post /v3/apps/<AppID>
    Authorization: qiniu mac
    {
        "hub": "<Hub>",
        "title": "<Title>",
        "maxUsers": <MaxUsers>,
        "noAutoKickUser": <NoAutoKickUser>,
        "mergePublishRtmp": {
            "enable": <Enable>,
            "audioOnly": <AudioOnly>,
            "height": <OutputHeight>,
            "width": <OutputHeight>,
            "fps": <OutputFps>,
            "kbps": <OutputKbps>,
            "url": "<URL>",
            "streamTitle": "<StreamTitle>"
        }
    }
    
    
    
    200 OK 
    {
        "appId": "<AppID>",
        "hub": "<Hub>",
        "title": "<Title>",
        "maxUsers": <MaxUsers>,
        "noAutoKickUser": <NoAutoKickUser>,
        "mergePublishRtmp": {
            "enable": <Enable>,
            "audioOnly": <AudioOnly>,
            "height": <OutputHeight>,
            "width": <OutputHeight>,
            "fps": <OutputFps>,
            "kbps": <OutputKbps>,
            "url": "<URL>",
            "streamTitle": "<StreamTitle>"
        },
        "createdAt": <CreatedAt>,
        "updatedAt": <UpdatedAt>
    }
    612
    {
        "error": "app not found"
    }
    616
    {
        "error": "hub not match"
    }
    

以上内容是否对您有帮助？