直播云

  • 直播云 > SDK 下载 > 连麦服务 V1 版 >Server 连麦 SDK

    Server 连麦 SDK

    最近更新时间: 2018-05-14 16:58:26

    重要通知

    尊敬的各位客户:

    七牛将于 2018 年 7 月 15 日 正式停止七牛连麦 v1 版本的连麦服务,如若仍在使用此版本,请尽快升级至 V2 新版本。

    升级指南

    请联系销售和技术支持,完成版本升级。

    1. 概述

    Qiniu RTC Server API 提供为 Qiniu 连麦 SDK 提供了权限验证和房间管理功能,API 均采用 REST 接口。

    1.1 下载地址

    连麦服务端 SDK 已经整合到直播服务端 SDK 中,目前提供的语言有 Java,PHP,Python

    下载地址:

    https://github.com/pili-engineering/pili-sdk-java

    https://github.com/pili-engineering/pili-sdk-php.v2

    https://github.com/pili-engineering/pili-sdk-python

    2. 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
    

    3. 创建房间

    3.1 请求包

    POST /v1/rooms
    Host: rtc.qiniuapi.com 
    Authorization: <QiniuToken> 
    Content-Type: application/json
    {
        "owner_id": "<OwnerUserId>",
        "room_name": "<RoomName>",
        "user_max": "<UserMax>"
    }
    

    OwnerUserId: 要创建房间的所有者,最大长度50,需满足规格^[a-zA-Z0-9_-]{3,50}$ ,string类型

    RoomName: 要创建的房间名称,可选,最大长度64位,需满足规格^[a-zA-Z0-9_-]{3,64}$,string类型。如果没有指定,系统返回一个uuid作为房间名称。

    UserMax: int类型,该房间支持的最大会议人数,可选。如果没有指定,则默认最多3人。

    3.2 返回包

    200 OK
    {   
        "room_name": "<RoomName>"
    }
    400
    {
        "error": "invalid args"
    }
    611 
    {
        "error": "room already exist"
    }
    

    RoomName: 已创建的房间名称。

    4. 查看房间

    4.1 请求包

    GET /v1/rooms/<RoomName> 
    Host: rtc.qiniuapi.com 
    Authorization: <QiniuToken> 
    

    RoomName: 房间名称。

    4.2 返回包

    200 OK 
    {
        "room_name": "<RoomName>",
        "owner_id": "<OwnerUserID>",
        "room_status": <RoomStatus>,
        "user_max": "<UserMax>"
    }
    612 
    {
        "error": "room not found"
    }
    

    RoomName: 房间名称。

    OwnerUserId: 房间的所有者。

    RoomStatus: enum类型,房间状态,0 刚创建,1 房间正在进行会议,2 房间会议已经结束。

    UserMax: int类型,该房间支持的最大会议人数。

    5. 删除房间

    5.1 请求包

    DELETE /v1/rooms/<RoomName> 
    Host: rtc.qiniuapi.com 
    Authorization: <QiniuToken>
    

    RoomName: 房间名称

    5.2 返回包

    200 OK
    612
    {
        "error": "room not found"
    }
    613
    {
        "error": "room in use"
    }
    

    注意,正在进行视频会议的房间(RoomStatus为1)无法删除。

    6. 查看房间活跃成员

    6.1 请求包

    GET /v1/rooms/<RoomName>/users
    Host: rtc.qiniuapi.com
    Authorization: <QiniuToken>
    

    RoomName: 房间名称

    6.2 返回包

    200 OK
    {
        "active_users": [
             {
                  "user_id": <UserId>,
                  "user_name": <UserName>
             },
             ……
        ]
    }
    612
    {
        "error": "room not found"
    }
    

    UserId: 当前在线的连麦用户的id,是区分用户的唯一标志

    UserName: 当前在线的连麦用户的昵称

    7. 剔除房间成员

    7.1 请求包

    DELETE /v1/rooms/<RoomName>/users/<UserId>
    Host: rtc.qiniuapi.com 
    Authorization: <QiniuToken> 
    

    7.2 返回包

    200 OK
    612
    {
        "error": "room not found"
    }
    614
    {
        "error": "user not found"
    }
    

    8. RoomToken 的计算

    连麦用户终端通过房间管理鉴权获取七牛连麦服务,该鉴权包含了房间名称、用户ID、用户权限、有效时间等信息,需要通过客户的业务服务器使用七牛颁发的AccessKey和SecretKey进行签算并分发给手机APP。手机端SDK以拟定的用户ID身份连接服务器,加入该房间进行视频会议。若用户ID或房间与token内的签算信息不符,则无法通过鉴权加入房间。

    计算方法:

    // 1. 定义房间管理凭证,并对凭证字符做URL安全的Base64编码
    roomAccess = {
        "room_name": "<RoomName>",
        "user_id": "<UserID>",
        "perm": "<Permission>",
        "expire_at": <ExpireAt>
    }
    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
    

    RoomName: 房间名称,需满足规格^[a-zA-Z0-9_-]{3,64}$

    UserID: 请求加入房间的用户ID,需满足规格^[a-zA-Z0-9_-]{3,50}$

    Permission: 该用户的房间管理权限,"admin"或"user",房间主播为"admin",拥有将其他用户移除出房间等特权。

    ExpireAt: int64类型,鉴权的有效时间,传入以秒为单位的64位Unix绝对时间,token将在该时间后失效。

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