房间管理
这一部分服务是为了让您的业务后台能够自动地完成一些在控制台上需要完成的操作,比如查看房间成员列表,踢出指定用户等。
一次连麦过程,多个终端音视频通信行为的管理是通过 room 进行的。一个连麦房间必然属于某一个 app。房间无需主动创建或删除,用户直接使用客户端 sdk 指定某个 app 和 room 进行连麦即可加入房间。通过接口可以查询 app
下所有的活跃房间,也可以对某一个房间做相关的业务操作。
同样,您也可以使用服务端 SDK 提供的方法来完成下列操作,具体请参照相应的 SDK 文档。这里只说明手动发送控制请求的情况。
对于这些服务,我们统一封装了 Restful 的接口方便给您调用,在调用各个接口之前,您还需要在 http headers 中添加鉴权头以识别您的权限。
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
ListUser 列出指定房间下当前所有用户
Host rtc.qiniuapi.com
GET /v3/apps/<AppID>/rooms/<RoomName>/users
Authorization: qiniu mac
200 OK
{
"users": [{
"userId": "<UserID>"
}]
}
612
{
"error": "app not found"
}
KickUser 指定一个用户踢出房间
Host rtc.qiniuapi.com
DELETE /v3/apps/<AppID>/rooms/<RoomName>/users/<UserID>
Authorization: qiniu mac
200 OK
612
{
"error": "app not found"
}
612
{
"error": "user not found"
}
615
{
"error": "room not active"
}
Message 向房间内用户发送消息
Host rtc.qiniuapi.com
POST /v3/apps/<AppID>/rooms/<RoomName>/message
Authorization: qiniu mac
{
"text":"消息内容",
"msgId":"消息ID,自行定义",
"targets":["user1", "user2"]
}
##返回值
200 OK
612
{
"error": "app not found"
}
612
{
"error": "user not found"
}
615
{
"error": "room not active"
}
参数 | 说明 |
---|---|
text | 要发送的消息题,字符串类型 |
msgId | 消息ID,业务方自行定义 |
targets | 列表类型,要发送给的用户名列表,为空表示发送给房间内所有人 |
ListActiveRoom 获取当前所有活跃的房间
Host rtc.qiniuapi.com
GET /v3/apps/<AppID>/rooms?prefix=<RoomNamePrefix>&offset=<Offset>&limit=<Limit>
Authorization: qiniu mac
200 OK
{
"end": <IsEnd>,
"offset": <Offset>,
"rooms": [
"<RoomName>",
...
]
}
612
{
"error": "app not found"
}
参数 | 说明 |
---|---|
参数 | 说明 |
AppID | 连麦房间所属的 app |
RoomName | 房间名 |
RoomNamePrefix | 所查询房间名的前缀索引,可以为空。 |
Offset | int 类型,分页查询的位移标记。 |
Limit | int 类型,此次查询的最大长度。 |
IsEnd | bool 类型,分页查询是否已经查完所有房间。 |
Close Room 关闭房间
用于关闭指定房间。
Host rtc.qiniuapi.com
DELETE /v3/apps/<AppID>/rooms/<RoomName>
Authorization: qiniu mac
200 OK
612
{
"error": "app not found"
}
615
{
"error": "room not active"
}
文档反馈
(如有产品使用问题,请 提交工单)