云课堂API相关
日期: 2018-11-29
创盛视联数码科技(北京)有限公司
小班课管理API
管理API均需要THQS加密请求
1. 开始直播
描述
开始直播接口
地址
方法
POST/GET
请求参数
参数名称 | 参数类型 | 参数说明 | 备注 |
---|---|---|---|
userid | 字符串 | 用户ID | 可选 |
roomid | 字符串 | 直播间ID | 必须 |
返回数据格式
{
result: 'OK', # 失败: FAIL,成功:OK
liveId: '123' # 直播场次ID
}
2.结束直播
描述
结束直播接口
地址
方法
POST/GET
请求参数
参数名称 | 参数类型 | 参数说明 | 备注 |
---|---|---|---|
userid | 字符串 | 用户ID | 可选 |
roomid | 字符串 | 直播间ID | 必须 |
返回数据格式
{
result: 'OK', # 失败: FAIL,成功:OK
data:{
"start_time": "2018-04-11 10:58:59 ", # 直播开始时间
"end_time": "2018-04-11 11:58:59" # 直播结束时间
}
}
3. 创建直播间
描述
创建直播间
地址
方法
POST/GET
请求参数
参数名称 | 参数类型 | 参数说明 | 备注 |
---|---|---|---|
userid | 字符串 | 用户账号ID | 必须 |
name | 字符串 | 直播间名称 长度限制 <= 100 | 必须 |
room_type | 整型 | 房间类型 1:视频群聊 2:小班课 | 必须 |
publisherpass | 字符串 | 老师端密码 长度限制 <= 64 | 必须 |
assist_pass | 字符串 | 助教端密码 长度限制 <= 64 | 可选,默认为用户账号ID |
audience_authtype | 整型 | 旁听认证方式 0:接口验证 1:密码 2:免密码 3:白名单 | 可选, 默认为1 |
audience_pass | 字符串 | 旁听密码 长度限制 <= 256 | 可选, 默认为用户ID,认证方式为接口认证时,此处填写接口认证地址 |
talker_authtype | 整型 | 互动学员认证方式 0:接口验证 1: 密码 2:免密码 3:白名单 | 可选 默认为为1 |
talker_pass | 字符串 | 互动学员认证密码 长度限制 <= 256 | 可选, 默认为用户账号ID,认证方式为接口认证时,此处填写接口认证地址 |
inspector_authtype | 整型 | 隐身者认证方式 0:接口验证 1: 密码 2:免密码 | 可选 默认为为1 |
inspector_pass | 字符串 | 隐身者认证密码 长度限制 <= 256 | 可选, 默认为用户账号ID, 认证方式为接口认证时,此处填写接口认证地址 |
white_list | 字符串 | 如果互动者开启了白名单,则此处填写json化的用户名/密码,如 "{"user": "123"}" | 可选 |
desc | 字符串 | 直播间简介 长度限制 <= 10000 | 可选 |
templatetype | 整型 | 模版类型 1:讲课模式 2:主视角模式 4:平铺模式 8:1v1模式 16:双师模式 | 可选,默认为8 |
mergetype | 整型 | 合流模式 1:主视角模式 2:平铺模式 3:覆盖模式 | 可选, 默认为2 |
max_users | 整型 | 最大支持人数(进入房间人数), 不能超过账户允许上限 | 可选, 默认为账户允许上限 |
max_streams | 整型 | 互动人数上限(实际连麦人数), 不能超过账户允许上限 | 可选, 默认为房间max_users上限 |
video_mode | 整型 | 连麦音视频模式 1:音视频 2.仅音频 | 可选, 默认为1 |
talker_bitrate | 整型 | 学生端码率 不超2000 | 可选, 默认为200 |
publisher_bitrate | 整型 | 老师端码率 不超2000 | 可选, 默认为200 |
classtype | 整型 | 连麦模式 1:点名 2:自由 3:自动 | 可选, 默认为1 |
presenter_out | 布尔型 | 非直播状态下踢出老师 | 可选,默认为false |
light_mark | 整型 | 跑马灯 0: 关闭 1: 开启 | 可选, 默认为0 |
show_exit | 整型 | 页面是否 显示退出按钮, 0 隐藏 1 | 可选 默认为1 |
ppt_support | 布尔型 | 是否支持ppt | 可选 |
ppt_display | 布尔型 | ppt显示样式 0: 适应窗口 1: 适应宽度,默认为0 | 可选 |
screen_lock | 整型 | 桌面锁屏 0:未开通 1:开通 2:开启 3:关闭,默认为0 | 可选 |
desktop_audio | 整型 | 桌面分享声音 0: 关闭 1: 开启, 默认为0 | 可选 |
manual_record | 整型 | 手动录制 0: 关闭 1: 开启, 默认为0 | 可选 |
record_bitrate | 整型 | 回放清晰度 速度优先:500 画质优先:0,默认速度优先 | 可选 |
warm_open | 字符串 | 暖场视频 '0': 关闭, '1': 开启,默认关闭 | 可选 |
helper_switch | 整型 | 直播助手开关 0: 关闭 1:开启,默认关闭 | 可选 |
record_switch | 整型 | 录屏助手开关 0: 关闭 1:开启,默认关闭 | 可选 |
assist_switch | 整型 | 助教开关 0: 关闭 1:开启,默认关闭 | 可选 |
返回数据格式
{
result: 'OK', # 失败: FAIL,成功:OK
data:{
"roomid": "123" # 新创建房间的id
}
}
4. 更新直播间
描述
更新直播间
地址
方法
POST/GET
请求参数
参数名称 | 参数类型 | 参数说明 | 备注 |
---|---|---|---|
userid | 字符串 | 用户账号ID | 必须 |
live_roomid | 字符串 | 房间ID | 必须 |
name | 字符串 | 直播间名称 | 可选 |
publisherpass | 字符串 | 老师端密码 长度限制 <= 64 | 可选 |
assist_pass | 字符串 | 助教端密码 长度限制 <= 64 | 可选 |
audience_authtype | 整型 | 旁听认证方式 0:接口验证 1:密码 2:免密码 3:白名单 | 可选 |
audience_pass | 字符串 | 旁听密码 长度限制 <= 256 | 可选 |
talker_authtype | 整型 | 互动学员认证方式 0:接口验证 1: 密码 2:免密码 3:白名单 | 可选 |
talker_pass | 字符串 | 互动学员认证密码, 长度限制 <= 256 | 可选 |
inspector_authtype | 整型 | 隐身者认证方式 0:接口验证 1: 密码 2:免密码 | 可选 |
inspector_pass | 字符串 | 隐身者认证密码 长度限制 <= 256 | 可选 |
white_list | 字符串 | 如果互动者开启了白名单,则此处填写json化的用户名/密码,如 "{"user": "123"}" | 可选 |
desc | 字符串 | 直播间简介 长度限制 <= 10000 | 可选 |
templatetype | 整型 | 模版类型 1:讲课模式 2:主视角模式 4:平铺模式 8:1v1模式 16:双师模式 | 可选 |
mergetype | 整型 | 合流模式 1:主视角模式 2:平铺模式 3:覆盖模式 | 可选 |
max_users | 整型 | 最大支持人数, 不能超过开通人数上限 | 可选 |
max_streams | 整型 | 互动人数上限, 不能超过开通人数上限 | 可选 |
video_mode | 整型 | 连麦音视频模式 1:音视频 2.仅音频 | 可选 |
publisher_bitrate | 整型 | 老师端码率 不超2000 | 可选 |
talker_bitrate | 整型 | 学生端码率 不超2000 | 可选 |
audio_bitrate | 整型 | 音频码率 默认为50 | 可选 |
classtype | 整型 | 连麦模式 1:点名 2:自由 3:自动 | 可选 |
is_follow | 字符串 | 是否跟随 主视角模式下 否: 空字符,是: streamid | 可选 |
allow_chat | 布尔型 | 是否允许发言 房间级配置 | 可选 |
allow_audio | 布尔型 | 是否允许使用麦克风 房间级配置 | 可选 |
allow_speak | 布尔型 | 是否允许上麦 房间级配置 | 可选 |
presenter_out | 布尔型 | 非直播状态下踢出老师 | 可选 |
ppt_support | 布尔型 | 是否支持ppt | 可选 |
ppt_display | 布尔型 | ppt显示样式 0: 适应窗口 1: 适应宽度,默认为0 | 可选 |
light_mark | 整型 | 跑马灯 0: 关闭 1: 开启 | 可选 |
show_exit | 整型 | 整型 页面是否 显示退出按钮, 0: 隐藏 1:显示 | 可选 |
desktop_audio | 整型 | 桌面分享声音 0: 关闭 1: 开启, 默认为0 | 可选 |
manual_record | 整型 | 手动录制 0: 关闭 1: 开启, 默认为0 | 可选 |
record_bitrate | 整型 | 回放清晰度 速度优先:500 画质优先:0,默认速度优先 | 可选 |
warm_open | 字符串 | 暖场视频 '0': 关闭, '1': 开启,默认关闭 | 可选 |
helper_switch | 整型 | 直播助手开关 0: 关闭 1:开启,默认关闭 | 可选 |
record_switch | 整型 | 录屏助手开关 0: 关闭 1:开启,默认关闭 | 可选 |
assist_switch | 整型 | 助教开关 0: 关闭 1:开启,默认关闭 | 可选 |
返回数据格式
{
result: 'OK', # 失败: FAIL,成功:OK
}
5. 关闭直播间
描述
关闭直播间 关闭后的直播间,将无法使用
地址
方法
POST/GET
请求参数
参数名称 | 参数类型 | 参数说明 | 备注 |
---|---|---|---|
userid | 字符串 | 用户账号ID | 必须 |
roomid | 字符串 | 房间ID | 必须 |
返回数据格式
{
result: 'OK', # 失败: FAIL,成功:OK
}
6. 获取账号下房间列表
描述
获取账号下房间列表 可以指定name status roomid为过滤参数
地址
方法
POST/GET
请求参数
参数名称 | 参数类型 | 参数说明 | 备注 |
---|---|---|---|
userid | 字符串 | 用户账号ID | 必须 |
name | 字符串 | 房间名称 | 可选 |
status | 整型 | 房间房间状态 10:正常 20:关闭 | 可选 |
page | 整型 | 获取指定页 | 可选 默认为1 |
lines | 整型 | 分页每页数据量 | 可选 默认为50 |
roomid | 字符串 | 房间ID | 可选 |
返回数据格式
{
result: 'OK', # 失败: FAIL,成功:OK
rooms:[
{
"live_roomid": "123", # 房间ID
"name": "123", # 房间名称
"desc": "123" # 房间描述
"status": 10 # 房间状态 10 开启 20 关闭
"classtype": 1 # 连麦模式 1:点名模式;2:自由模式 3:自动模式
"room_type": 1 # 房间类型 1:视频群聊 2:小班课
"templatetype": 1 # 模版类型 1:讲课模式 2:主视角模式 4:平铺模式 8:1V1模式 16:双师模式
"mergetype": 1 # 合流模式 1:主视角模式 2:平铺模式, 3:覆盖模式
"recordstudent": 1 #
"publisherpass": "123" # 老师登录密码
"talker_authtype": 1 # 互动者认证方式 0:url验证 1:密码验证 2:免密码
"talker_pass": "123" # 互动者登录密码
"audience_authtype": 1 # 旁听认证方式 0:url验证 1:密码验证 2:免密码
"audience_pass": "123" # 旁听登录密码
"max_users": 10 # 最大支持人数
"max_streams": 10 # 最大连麦人数
"video_mode": 1 # 连麦音视频模式 1:音/视频都开 2:仅音频
"live_status": 1 # 直播状态 1:直播中 0:未直播
"white_list": "" # 互动者白名单 如果开启白名单
"light_mark": 1 # 跑马灯 0:关闭 1:开启
"show_exit": 0 # 页面是否 显示退出按钮 0:隐藏 1:显示
"video_zoom": "123" # 视频点击放大 流ID
"screen_lock": 0 # 锁屏相关 0:开通 1:未开通 2:开启 3:关闭
"presenter_url": "http://a.com" # 老师登录链接URL
"talker_url": "http://a.com" # 互动者登录链接URL
"audience_url": "http://a.com" # 旁观者登录链接URL
}], # 房间信息
total: 5, # 总页数
current: 1 # 当前页数
}
7. 获取房间信息
描述
获取房间信息
地址
方法
POST/GET
请求参数
参数名称 | 参数类型 | 参数说明 | 备注 |
---|---|---|---|
userid | 字符串 | 用户账号ID | 必须 |
roomid | 字符串 | 房间ID | 必须 |
返回数据格式
{
result: 'OK', # 失败: FAIL,成功:OK
"data": {
"allow_audio": true, # 是否允许使用麦克风 房间级配置
"allow_chat": true, # 是否允许发言 房间级配置
"allow_speak": true, # 是否允许上麦 房间级配置
"atlas_roomid": "5b0ebc15df4b74399dae0d26",
"audience_authtype": 1, # 旁听认证方式 0:接口验证 1:密码 2:免密码 3:白名单
"audience_pass": "123", # 旁听密码
"audience_url": "https://view.csslcloud.net/api/view/index?roomid=45CC92144D46FEAA9C33DC5901307461&userid=83F203DAC2468694", # 旁听登录链接url
"audio_bitrate": 50, # 音频码率
"calltimeout": 10,
"classtype": 2, # 连麦模式 1:点名 2:自由 3:自动
"clear_cache": 0,
"closetime": null, # 房间关闭时间
"createtime": "2018-05-30", # 房间创建时间
"desc": "<p>1231321</p>", # 房间描述
"id": 22692,
"is_follow": "", # 是否跟随 主视角模式下 是:streamid 否:空字符
"light_mark": 0, # 跑马灯 0: 关闭 1: 开启
"live_roomid": "45CC92144D46FEAA9C33DC5901307461", # 房间ID
"live_status": 0, # 直播状态 1:直播中 0:未直播
"max_streams": 7, # 最大连麦人数
"max_users": 1000, # 最大支持人数
"mergetype": 2, # 合流模式 1:主视角模式 2:平铺模式 3:覆盖模式
"name": "1232", # 直播间名称
"platform": 1, # 平台 1:web 2:android 3:ios
"ppt_support": false, # 是否支持ppt
"presenter_out": false, # 非直播状态下踢出老师
"presenter_url": "https://class.csslcloud.net/index/presenter/?roomid=45CC92144D46FEAA9C33DC5901307461&userid=83F203DAC2468694", # 老师登录链接URL
"publisher_bitrate": 200, # 老师端码率
"publisherpass": "123", # 老师端密码
"recordstudent": 1,
"room_type": 2, # 房间类型 1:视频群聊 2:小班课
"roomid": "45CC92144D46FEAA9C33DC5901307461", # 房间ID
"screen_lock": 0, # 锁屏相关 0:开通 1:未开通 2:开启 3:关闭
"show_exit": 1, # 页面是否 显示退出按钮 0:隐藏 1:显示
"status": 10, # 房间状态 10 开启 20 关闭
"talker_authtype": 1, # 互动者认证方式 0:url验证 1:密码验证 2:免密码
"talker_bitrate": 200, # 互动者码率
"talker_pass": "123", # 互动者登录密码
"talker_url": "https://class.csslcloud.net/index/talker/?roomid=45CC92144D46FEAA9C33DC5901307461&userid=83F203DAC2468694", # 互动者登录链接URL
"templatetype": 1, # 模版类型 1:讲课模式 2:主视角模式 4:平铺模式 8:1v1模式 16:双师模式
"userid": "83F203DAC2468694", # 用户账号ID
"video_mode": 1, # 连麦音视频模式 1:音视频 2.仅音频
"video_zoom": "", # 视频点击放大 流ID
"white_list": null # 白名单
}
}
8. 获取房间登录链接
描述
获取房间登录链接
地址
方法
POST/GET
请求参数
参数名称 | 参数类型 | 参数说明 | 备注 |
---|---|---|---|
userid | 字符串 | 用户账号ID | 必须 |
roomid | 字符串 | 房间ID | 必须 |
返回数据格式
{
result: 'OK', # 失败: FAIL,成功:OK
data:{
"presenter_url": "http://a.com" # 老师登录链接URL
"talker_url": "http://a.com" # 互动者登录链接URL
"audience_url": "http://a.com" # 旁观者登录链接URL
"inspector_url": "https://a.com" # 隐身者登录链接URL
"assist_url": "https://a.com" # 助教登录链接URL
}
}
9. 切换合流布局模式
描述
获取房间登录链接
地址
方法
POST/GET
请求参数
参数名称 | 参数类型 | 参数说明 | 备注 |
---|---|---|---|
userid | 字符串 | 用户账号ID | 必须 |
roomid | 字符串 | 房间ID | 必须 |
status | 整型 | 状态 1:主视角 2:平铺 | 必须 |
返回数据格式
{
result: 'OK', # 失败: FAIL,成功:OK
}
10. 获取sessionid
描述
获取登录sessionid
地址
方法
POST/GET
请求参数
参数名称 | 参数类型 | 参数说明 | 备注 |
---|---|---|---|
name | 字符串 | 登录名 | 必须 |
userid | 字符串 | 用户账号ID | 必须 |
roomid | 字符串 | 房间ID | 必须 |
password | 字符串 | 登录密码 | 可选 |
role | 字符串 | 角色 '0':老师 '1':互动 '2':旁听 '3': 隐身者 '4': 助教 | 必须 |
client | 字符串 | 客户端类型 0:web端 1:移动端 | 必须 |
返回数据格式
{
result: 'OK', # 失败: FAIL,成功:OK
data:{
"sessionid": "123" # 生成的sessionid
"userid": "123" # 生成的登录用户ID
}
}
11. 获取当前房间人员列表
描述
获取当前房间人员列表, 人员信息/老师是否存在/在线人数
地址
方法
POST/GET
请求参数
参数名称 | 参数类型 | 参数说明 | 备注 |
---|---|---|---|
userid | 字符串 | 用户账号ID | 必须 |
roomid | 字符串 | 房间ID | 必须 |
返回数据格式
{
"data": {
"presenter": 1, # 老师是否存在,
"assistant": 1 # 助教是否存在
"total": 1, # 房间总人数
"users": [ # 人员列表
{ # 人员信息
"avatar": "",
"id": "c064fee00a424029b0bcf428a834a897", # 用户ID
"ip": "111.206.170.243", # IP地址
"joinTime": "2018-09-06 20.03.59",# 加入房间时间
"lock": "false",
"name": "www", # 名称
"platform": "5", # 登录方式 5:web 7:手机
"publishTime": "", # 推流时间
"requestTime": "", # 请求时间
"role": "presenter", # 角色 老师: presenter 学生: talker
"socketId": "4umOGIPvnHh5NTvfCr27",
"status": "0", # 连麦状态
"streamId": "" # 推流ID
}
]
},
"result": "OK"
}
或者
{
"data": {
"presenter": 0,
"total": 0,
"users": []
},
"result": "OK"
}
12. 查询直播状态
描述
查询直播间 直播状态
地址
方法
POST/GET
请求参数
参数名称 | 参数类型 | 参数说明 | 备注 |
---|---|---|---|
userid | 字符串 | 用户账号ID | 必须 |
roomid | 字符串 | 房间ID | 必须 |
返回数据格式
直播中
{
"liveid": "93ACDA25756B994A", # 直播ID
"result": "OK",
"started": true # true: 直播中 false 未直播
"starttime": "2018-01-01 01:00:00" # 直播开始时间
}
未直播
{
"result": "OK",
"started": false
}
聊天相关
1. 获取聊天信息
描述
通过该接口可以分页获取直播的聊天信息
地址
方法
POST/GET
请求参数
参数名称 | 参数类型 | 参数说明 | 备注 |
---|---|---|---|
roomid | 字符串 | 直播间id | 必须 |
userid | 字符串 | CC账户ID | 必须 |
liveid | 字符串 | 直播id | 必须 |
pagenum | 整型 | 每页显示的个数 | 可选,系统默认值为50,最大值为100 |
pageindex | 整型 | 页码 | 可选,系统默认值为1 |
返回数据格式
{
"result": "OK", # 请求是否成功。OK:成功;FAIL:失败
"count": 100, # 聊天总数
"chatMsgs": [ # 聊天列表信息
{
"content": "粮仓到底还是满了", # 聊天内容
"time": "2016-11-28 20:30:33", # 聊天时间
"viewerName": "苍井满", # 观众名称
"viewerId": "0cda7ng03j9502ian", # 观众id
"viewerRole": 0 # 观众角色(0:未统计,1:主讲,2:助教,3:主持人,4:学员)
}
...
]
}
回放相关
1. 查询回放列表
描述
通过该接口可以分页获取回放列表的信息
地址
方法
POST/GET
请求参数
参数名称 | 参数类型 | 参数说明 | 备注 |
---|---|---|---|
roomid | 字符串 | 直播间id | 必须 |
userid | 字符串 | CC账户ID | 必须 |
pagenum | 整型 | 每页显示的个数 | 可选,系统默认值为50 |
pageindex | 整型 | 页码 | 可选,系统默认值为1 |
starttime | 字符串 | 查询起始时间,如需按时间范围查询可添加该参数和下面的endtime参数,该查询是按直播的开始时间作为查询条件的 | 可选,如果填写该参数则endtime参数必填;精确到分钟,例:"2015-01-01 12:30" |
endtime | 字符串 | 查询截止时间 | 可选,如果填写该参数则starttime必填;精确到分钟,例:"2015-01-02 12:30" |
liveid | 字符串 | 直播id | 可选,将只查询该直播下的回放信息 |
返回数据格式
{
"result" : "OK", # 请求是否成功。OK:成功;FAIL:失败
"count" : "100", # 回放总数
"pageIndex" : "1", # 页码
"records" : [ # 回放列表信息
{
"id" : "753C612EB38A8D5A", # 回放id
"liveId" : "853C612EB38A8D5A", # 直播id
"startTime" : "2015-01-01 00:00:00", # 开始时间
"stopTime" : "2015-01-01 23:00:00", # 结束时间
"recordStatus": 1, # 录制状态,0表示录制未结束,1表示录制完成
"recordVideoId" : "953C612EB38A8D5A", # 录制视频id,如果recordStatus为0则返回-1
"replayUrl" : "http://xxx", # 回放地址,当recordStatus为0时返回""
"offlinePackageUrl" : "http://yyy", # 离线包下载地址,注:只有开通离线播放权限才会返回该参数
"offlinePackageMd5" : "xxxxxdddddddddddddddddddddddddddd" # 离线包md5,注:只有开通离线播放权限才会返回该参数
},
...
]
}
2. 查询回放信息
描述
通过该接口获取单个回放信息
地址
方法
POST/GET
请求参数
参数名称 | 参数类型 | 参数说明 | 备注 |
---|---|---|---|
userid | 字符串 | CC账户ID | 必须 |
recordid | 字符串 | 回放id | 必须 |
返回数据格式
{
"result" : "OK", # 请求是否成功。OK:成功;FAIL:失败
"record" : { # 回放信息
"id" : "753C612EB38A8D5A", # 回放Id
"liveId" : "853C612EB38A8D5A", # 直播Id
"startTime" : "2015-01-01 00:00:00", # 开始时间, 格式为"yyyy-MM-dd HH:mm:ss"
"stopTime" : "2015-01-01 23:00:00", # 结束时间, 格式为"yyyy-MM-dd HH:mm:ss", 如果直播未结束,该值则为""
"recordStatus": 1, # 录制状态,0表示录制未结束,1表示录制完成
"recordVideoId" : "953C612EB38A8D5A", # 录制视频id,如果recordStatus为0则返回-1
"replayUrl" : "http://xxx", # 回放地址,当recordStatus为0时返回""
"offlinePackageUrl" : "http://yyy", # 离线包下载地址,注:只有开通离线播放权限才会返回该参数
"offlinePackageMd5" : "xxxxxdddddddddddddddddddddddddddd", # 离线包md5,注:只有开通离线播放权限才会返回该参数
"downloadUrl" : "http://zzz" # 回放视频下载地址,该下载地址具有时效性,有效时间为2小时
}
}
自动登录相关
说明
描述
用户参与直播或观看回放时,可以通过访问指定URL,跳过登录界面实现自动登录,下面是自动登录时请求的URL示例:
地址
教师端: https://class.csslcloud.net/index/presenter/?roomid=FC3548C1133061D09C33DC5901307461&userid=E9607DAFB705A798&username=XXX&password=XXX&autoLogin=true 互动者: https://class.csslcloud.net/index/talker/?roomid=FC3548C1133061D09C33DC5901307461&userid=E9607DAFB705A798&username=XXX&password=XXX&autoLogin=true 旁听端: http://view.csslcloud.net/api/view/index?roomid=xxx&userid=xxx&autoLogin=true&viewername=11&viewertoken=11 回放端: http://view.csslcloud.net/api/view/callback/login?liveid=xxx&roomid=xxx&userid=xxx&autoLogin=true&viewername=11&viewertoken=11 注意: 请详细比对上述URL示例
方法
POST/GET
请求参数
参数名称 | 参数类型 | 参数说明 | 备注 |
---|---|---|---|
roomid | 字符串 | 直播间id | 必须 |
userid | 字符串 | 用户ID(CC直播平台的账号ID) | 必须 |
username | 字符串 | 用户名称, 旁听和回看该参数为:viewername | 必须 |
password | 字符串 | 直播间登录密码,旁听和回看该参数为:viewertoken | 必须 |
autoLogin | 字符串 | 自动登录,true:自动登录;false:不是自动登录 | 必须 |
备注
(1)参与直播登录时的URL,你可以在admin.bokecc.com或者在老师端页面的邀请链接获取到,然后加上autoLogin、username(viewername)、password(viewertoken)即可生成观看直播登录的URL;
(2)对于观看回放登录时的URL,你可以在在回放列表页面点击回放地址链接获得replayUrl,然后加上autoLogin、viewername、viewertoken即可生成观看回放登录的URL。
注:如果自动登录验证成功,则进入直播页面;如果验证失败,则跳到登录页面,显示错误提示信息。
接口认证相关
接口验证
概述
通过CC视频云课堂登录接口验证,客户的用户系统可对观看直播的用户进行鉴权验证接口由客户进行开发,在学员登录时,由CC视频云课堂 将登录信息提交给该接口验证用户身份信息。
接口地址
创建直播间时,验证方式选择接口验证并填写接口地址
请求方式
POST
接口参数说明
参数名称 | 参数类型 | 参数说明 | 备注 |
---|---|---|---|
roomid | 字符串 | 直播间id | 必须 |
viewername | 字符串 | 登录用户名 | 必须 |
viewertoken | 字符串 | 登录密码 | 必须 |
返回数据格式
{
"result": "ok",
"message": "登录成功", # 可传可不传
"user":{
"id": "E6A232B2DEDF69469C33DC5901307461", # 用户对应的id
"name": "学员A", # 用户名
"avatar": "http://domain.com/icon.png", # 用户头像路径,可传可不传
}
}
说明
返回值应 以json形式返回
返回值result表明验证是否通过,如果成功,客户应返回 'OK', 'ok', 'true', 'yes', 'YES',中的任一个,云平台将其他结果均认为验证失败,即不允许登录
旁听接口验证仅支持返回'ok',互动者支持以上
THQS相关
说明
当需要和 Live API系统进行 HTTP 通信时,需要将原始的 Query String 转换为和请求时刻相关的 Hashed Query String 后再通过 GET 方法请求 Live API。为了描述的方便,我们将 Query String 转换为 Hashed Query String 的算法称为 THQS 算法。在描述详细的算法流程之前,我们先介绍一下 Unix 时间戳的概念。
Unix 时间戳,即该时间到 1970 年 1 月 1 日(UTC/GMT 的午夜)之间的秒数。 例如,北京时间 2010 年 12 月 9 日 15 点 23 分 12 秒的 Unix 时间戳为 1291879392。THQS 算法
假设原来的 QueryString 为 q, 通过以下 4 个步骤,即可得到最终用于通信的 HashedQueryString:
- 对于q中的每个键值对按照键的字母顺序升序排序,得到排序后的请求字符串qs;
- 加入当前时间的 Unix 时间戳和直播平台帐号对应的 API Key 值,得到散列前的字符串 qf: qf ← qs&time=12345&salt=aSdF1234
- 计算得到 qf 的 md5 值,假设为 abcdefg hash ← md5(qf)
- 最终的 HashedQueryString 为: hqs ← qs&time=12345&hash=abcdefg 用 hqs 代替 q 进行 Http 通信。 下⾯举一个例⼦子说明计算过程。假设用户从直播平台获取到的API Key值是aSdF1234,当前时间为2010年12月9日15点23分12秒,原始的QueryString 是: name=harry&level=top&salary=1000
第一步,将上述QueryString 按照字⺟顺序进行升序排序,结果是: level=top&name=harry&salary=1000
第二步,附加time值和salt值,得到取hash前的字符串 level=top&name=harry&salary=1000&time=1291879392&salt=aSdF1234
第三步,对上述字符串取 md5 值 hash=BF04A55B30CFF562F7ADD9F054AB7FFB!
因此,最终进⾏行Http通信的字符串为level=top&name=harry&salary=1000&time=1291879392&hash=BF04A55B30CFF562F7ADD9F054AB7FFB
使用java代码编写如下:
/**
* 功能:将一个Map按照Key字母升序构成一个QueryString. 并且加入时间混淆的hash串
* @param queryMap query内容
* @param time 加密时候,为当前时间;解密时,为从querystring得到的时间;
* @param salt 加密salt
* @return
*/
public static String createHashedQueryString(Map<String, String> queryMap,long time, String salt) {
Map<String, String> map = new TreeMap<String, String>(queryMap);
String qs = createQueryString(map); //生成queryString方法可自己编写
if (qs == null) {
return null;
}
time = time / 1000;
String hash = Md5Encrypt.md5(String.format("%s&time=%d&salt=%s", qs, time, salt));
hash = hash.toUpperCase();
String thqs = String.format("%s&time=%d&hash=%s", qs, time, hash);
return thqs;
}
使用python语言编写如下:
class thqs(object):
'生成thqs请求url'
def my_urlencode(self, q):
'对请求的字段进行urlencode,返回值是包含所有字段的list'
l = []
#遍历字典,进行quote_plus操作,并把所有字段拼成list
for k in q:
k = urllib.quote_plus(str(k))
v = urllib.quote_plus(str(q[k]))
url_param = '%s=%s' % (k, v)
l.append(url_param)
l.sort()
return '&'.join(l)
def get_thqs(self, q):
'按照thqs算法对所有的字段进行处理'
qftime = 'time=%d' % int(time.time())
salt = 'salt=%s' % API_KEY
qftail = '&%s&%s' % (qftime, salt)
qs = self.my_urlencode(q)
qf = qs + qftail
hashqf = 'hash=%s' % (hashlib.new('md5', qf).hexdigest().upper())
thqs = '&'.join((qs, qftime, hashqf))
return thqs
文档库相关接口
一、流程说明
文档上传实际上到账户下面,要在房间内使用,需要调用关联/取消关联接口进行操作
二、相关接口
1.上传文档
描述
创建文档信息并获取上传信息, 通过返回上传信息,执行上传文档操作
注意,第一步doc_size参数需要和第二步实际上传文档大小一致
1.1 获取文档上传信息
地址:
备注:
需要THQS加密请求
方法:
POST/GET
请求参数
参数名称 | 参数类型 | 参数说明 | 备注 |
---|---|---|---|
account_id | 字符串 | 账号ID | 必须 |
doc_name | 字符串 | 文件名 | 必须 |
doc_size | 整型 | 文档大小,单位Byte(最大不能超过104857600) | 必须 |
返回数据格式:
{
"data": {
"upload_url": "https://document.csslcloud.net/api/document/upload?userid=41E8063FC799ACE5&docid=06EDECC84FB4F764"
},
"result": "OK"
}
1.2 文档上传
地址:
上传地址通过 上一步 获取文档信息接口 返回(data.upload_url) 文件格式支持: .doc .docx .ppt .pptx .pdf .png 后续支持jpg
方法:
POST
请求参数
参数名称 | 参数类型 | 参数说明 | 备注 |
---|---|---|---|
file | 二进制 | 文档 | 必须 |
supportanimation | 整型 | 支持动画,0:不支持 1:支持 (只对PPT有效) | 可选 |
备注:file需要放到request body里面,supportanimation参数需要拼接到URL中, 如果需要
返回数据格式:
{
"datas": {
"docId": "0A0833E541533352"
},
"errorCode": 0,
"success": true
}
2.删除账户共享文件
描述
实际删除账户下的共享文档
地址:
备注:
需要THQS加密请求
方法:
POST/GET
请求参数
参数名称 | 参数类型 | 参数说明 | 备注 |
---|---|---|---|
account_id | 字符串 | 账号ID | 必须 |
doc_id | 字符串 | 文档ID | 必须 |
返回数据格式:
{
result: 'OK', # 失败: FAIL,成功:OK
}
3.获取账户共享文档列表
描述:
获取某个账户下共享文档列表
地址:
备注:
需要THQS加密请求
方法:
POST/GET
请求参数
参数名称 | 参数类型 | 参数说明 | 备注 |
---|---|---|---|
account_id | 字符串 | 用户账号ID | 必须 |
page | 整型 | 获取指定页,默认返回第一页 | 可选 |
lines | 整型 | 每页的数据条数,默认每页50 | 可选 |
room_id | 整型 | 查询该账户下的文档 是否与该房间已关联 | 可选 |
doc_id | 整型 | 文档ID, 用于查询 | 可选 |
doc_name | 字符串 | 文档名, 用于查询 | 可选 |
time_gte | 日期 date/datetime | 根据此参数,选择上传时间>= 该值的文档 | 可选 |
time_lte | 日期 date/datetime | 根据此参数,选择上传时间<= 该值的文档 | 可选 |
返回数据格式:
{
result: "OK",
picDomain: "https://image.csslcloud.net", # 实际去访问文档的地址
docs: [
{
id: "CFD3C4FB8D2B6148", # 文件ID
name: "MBA讲座.ppt", # 文件名称
pageSize: 24, # 文件页数
roomId: "2EE731074C8D64679C33DC5901307461", # 共享盘房间ID
size: 3679232 # 文件大小
useSDK: 0 # ppt动效 0: 未开启 1: 开启
create_time: "2018-01-01 12:00:00" # 上传时间
status: 1 # -2: 未上传 -1:上传失败 0: 上传成功 1: 转换成功 2: 转换中 3: 转换失败
related: 1 # 1: 已关联 0 未关联,如果room_id参数没传,则不返回该字段
}
...
],
total: 1, # 总页数
current: 1 # 当前页数
}
4.获取房间文档列表
描述:
客户端根据返回的共享盘房间ID和文件ID去访问实际文档地址
地址:
备注:
需要THQS加密请求
方法:
POST/GET
请求参数
参数名称 | 参数类型 | 参数说明 | 备注 |
---|---|---|---|
account_id | 字符串 | 账号ID | 必须 |
room_id | 字符串 | 房间ID | 必须 |
page | 整型 | 获取指定页,默认返回第一页 | 可选 |
lines | 整型 | 每页的数据条数,默认每页50 | 可选 |
doc_id | 字符串 | 文件ID 用于查询 | 可选 |
doc_name | 字符串 | 文件名 用于查询 | 可选 |
返回数据格式:
{
result: "OK",
picDomain: "https://image.csslcloud.net", # 实际去访问文档的地址
docs: [
{
id: "CFD3C4FB8D2B6148", # 文件ID
name: "MBA讲座.ppt", # 文件名称
pageSize: 24, # 文件页数
roomId: "2EE731074C8D64679C33DC5901307461", # 共享盘房间ID
size: 3679232 # 文件大小
useSDK: 0 # ppt动效 0: 未开启 1: 开启
create_time: "2018-01-01 12:00:00" # 上传时间
status: 1 # 文档状态 0 上传成功 1 转换成功 2 转换失败
}
...
],
total: 1, # 总页数
current: 1 # 当前页数
}
5.文档关联接口
描述:
将账户共享文档与房间关联, 支持批量关联
地址:
备注:
需要THQS加密请求
方法:
GET/POST
请求参数
参数名称 | 参数类型 | 参数说明 | 备注 |
---|---|---|---|
account_id | 字符串 | 账号ID | 必须 |
room_id | 字符串 | 房间ID | 必须 |
doc_id | 字符串 | 文档ID | 必须 |
返回数据格式:
{
result: 'OK', # 失败: FAIL,成功:OK
}
6.取消文档关联
描述:
将账户共享文档与房间取消关联, 支持批量取消关联
地址:
备注:
需要THQS加密请求
方法:
GET/POST
请求参数
参数名称 | 参数类型 | 参数说明 | 备注 |
---|---|---|---|
account_id | 字符串 | 账号ID | 必须 |
room_id | 字符串 | 房间ID | 必须 |
doc_id | 字符串 | 文档ID | 必须 |
返回数据格式:
{
result: 'OK', # 失败: FAIL,成功:OK
}
7. 设置文档转码回调通知
描述:
当文档转码成功/失败后,以API POST的方式通知客户
地址:
备注:
需要THQS加密请求
文档转码完成后, 以POST方式通知的到客户
请求客户API接口参数
{
"doc_id":"DFDFGGFD54545SFEW34552", # 文档ID
"convert_status":1 # 转码完成为1 转码失败为3
}
如果客户收到回调通知需返回
{
"result":"OK"
}
方法:
GET/POST
请求参数
参数名称 | 参数类型 | 参数说明 | 备注 |
---|---|---|---|
account_id | 字符串 | 账号ID | 必须 |
service_name | 字符串 | 请填写 doc | 必须 |
action_name | 字符串 | 请填写 doc_transcode | 必须 |
callback_api | 字符串 | 回调API地址 | 必须 |
switch_on | 整型 | 回调开关 1:开启 0:关闭 | 必须 |
返回数据格式:
{
result: 'OK', # 失败: FAIL,成功:OK
}
8. 取消设置文档转码回调通知
描述:
删除文档回调设置
地址:
备注:
需要THQS加密请求
方法:
GET/POST
请求参数
参数名称 | 参数类型 | 参数说明 | 备注 |
---|---|---|---|
account_id | 字符串 | 账号ID | 必须 |
service_name | 字符串 | 请填写 doc | 必须 |
action_name | 字符串 | 请填写 doc_transcode | 必须 |
返回数据格式:
{
result: 'OK', # 失败: FAIL,成功:OK
}
9. 更新设置文档转码回调通知
描述:
更新文档回调设置
地址:
备注:
需要THQS加密请求
方法:
GET/POST
请求参数
参数名称 | 参数类型 | 参数说明 | 备注 |
---|---|---|---|
account_id | 字符串 | 账号ID | 必须 |
service_name | 字符串 | 请填写 doc | 必须 |
action_name | 字符串 | 请填写 doc_transcode | 必须 |
new_callback_api | 字符串 | 新的回调URL地址 | 必须 |
返回数据格式:
{
result: 'OK', # 失败: FAIL,成功:OK
}
媒体库相关
一.流程
1.通过调用createuploadinfo接口获取video_id等参数 2.前端js拿到video_id相关参数,执行上传操作 3.将视频关联到房间
二.相关接口
1.上传视频
地址:
备注:
需要THQS加密请求
方法:
POST/GET
请求参数
参数名称 | 参数类型 | 参数说明 | 备注 |
---|---|---|---|
account_id | 字符串 | 账号ID | 必须 |
title | 字符串 | 视频标题 | 必须 |
filename | 字符串 | 视频文件名 | 必须 |
filesize | 字符串 | 视频大小 | 可选 |
categoryid | 字符串 | 视频分类ID | 可选 |
返回数据格式:
{
"result": 'OK', # 失败: FAIL,成功:OK
"videoUploadInfo": {
"videoid": "F7B8DA319DE99681FC9558351D509E7C", # 系统分配的视频id
"userid": "1725A8A9604EAE30", # 用户ID
"servicetype": "DF0236B91AECD81C", # 服务类型
"metaurl": "http://1-15-vacombiner.bokecc.com/servlet/uploadmeta/v2", # 系统分配的文件状态及断点位置查询接口
"chunkurl": "http://1-15-vacombiner.bokecc.com/servlet/uploadchunk/v2" # 系统分配的上传文件内容块的接口
}
}
2.上传视频
由前端js封装实际上传操作
3.关联视频
地址:
备注:
需要THQS加密请求,video_id支持批量操作,以|分隔
方法:
POST/GET
请求参数
参数名称 | 参数类型 | 参数说明 | 备注 |
---|---|---|---|
account_id | 字符串 | 账号ID | 必须 |
room_id | 字符串 | 房间ID | 必须 |
video_id | 字符串 | 视频ID | 必须 |
media_type | 整型 | 媒体类型 | 可选 1:视频 2:音频, 默认为视频 |
返回数据格式:
{
result: 'OK', # 失败: FAIL,成功:OK
}
4.取消关联视频
地址:
备注:
需要THQS加密请求,video_id支持批量操作,以|分隔
方法:
POST/GET
请求参数
参数名称 | 参数类型 | 参数说明 | 备注 |
---|---|---|---|
account_id | 字符串 | 账号ID | 必须 |
room_id | 字符串 | 房间ID | 必须 |
video_id | 字符串 | 视频ID | 必须 |
返回数据格式:
{
result: 'OK', # 失败: FAIL,成功:OK
}
5.标记删除关联视频
地址:
备注:
需要THQS加密请求,video_id支持批量操作,以|分隔
方法:
POST/GET
请求参数
参数名称 | 参数类型 | 参数说明 | 备注 |
---|---|---|---|
account_id | 字符串 | 账号ID | 必须 |
room_id | 字符串 | 房间ID | 必须 |
video_id | 字符串 | 视频ID | 必须 |
返回数据格式:
{
result: 'OK', # 失败: FAIL,成功:OK
}
6.设为暖场视频
地址:
备注:
需要THQS加密请求
方法:
POST/GET
请求参数
参数名称 | 参数类型 | 参数说明 | 备注 |
---|---|---|---|
account_id | 字符串 | 账号ID | 必须 |
room_id | 字符串 | 房间ID | 必须 |
video_id | 字符串 | 视频ID | 必须 |
返回数据格式:
{
result: 'OK', # 失败: FAIL,成功:OK
}
7.取消设为暖场视频
地址:
备注:
需要THQS加密请求
方法:
POST/GET
请求参数
参数名称 | 参数类型 | 参数说明 | 备注 |
---|---|---|---|
account_id | 字符串 | 账号ID | 必须 |
room_id | 字符串 | 房间ID | 必须 |
video_id | 字符串 | 视频ID | 必须 |
返回数据格式:
{
result: 'OK', # 失败: FAIL,成功:OK
}
8.查询某房间下已关联的媒体
地址:
备注:
需要THQS加密请求,video_id支持批量操作,以|分隔
方法:
POST/GET
请求参数
参数名称 | 参数类型 | 参数说明 | 备注 |
---|---|---|---|
account_id | 字符串 | 账号ID | 必须 |
room_id | 字符串 | 房间ID | 必须 |
video_id | 字符串 | 视频ID | 可选 |
page | 整型 | 获取指定页 | 可选 默认为1 |
lines | 整型 | 分页每页数据量 | 可选 默认为50 |
sort | 整型 | 排序方式 'CREATION_DATE:ASC': 日期升序,'CREATION_DATE:DESC': 日期降序,'FILE_SIZE:ASC': 大小升序, 'FILE_SIZE:DESC':大小降序,'VIDEO_TITLE:ASC': 标题升序,'VIDEO_TITLE:DESC': 标题降序 | 可选 默认日期升序 |
status | 字符串 | 视频状态,支持多选,以,分割 正常:0 处理中:2或者10 标记删除:6 转码失败:7 彻底删除:11 | 可选 |
isvaild | 整型 | 审核状态 1:已审核 0:未审核 | 可选 |
categoryid | 字符串 | 视频分类ID | 可选 |
start_time | 日期 date | 创建时间 | 可选 |
end_time | 日期 date | 结束时间 | 可选 |
onlydata | 整型 | 1:只查记录数据 | 可选 |
onlycount | 整型 | 1:只查视频总数 | 可选 |
isactive | 整型 | 只查询可用的视频(排除 标记删除/转码失败/删除), 1:是 0:否 | 可选 |
返回数据格式:
{
"result": 'OK', # 失败: FAIL,成功:OK
"videos": {
"total": 3, # 视频总数
"video": [
{
"id": "A4DE83629B02A0617E6C9CEE8B422289", # 视频ID
"userid": "1725A8A9604EAE30", # 账号ID
"title": "测试视频", # 视频标题
"desp": "这是第二条测试用的信息", # 视频描述
"tags": " ", # 视频标签
"duration": 30, # 视频时长(s)
"status": 0, # 视频状态 0:正常 处理中:2或者10 标记删除:6 转码失败:7 彻底删除:11
"isvalid": 0, # 是否已经审核(0未审核,1已审核)
"filesize": 489848, # 视频大小
"type": 80, # 视频类型(清晰度大小)
"creation-time": "2017-11-14 19:18:58", # 创建时间
"uploaduserid": "1725A8A9604EAE30", # 上传用户ID
"category": "8395FBC2E22C76D2", # 视频分类ID
"hasvideofile": 0, # 视频文件是否存在(0存在,1删除)
"playurl": "", # 播放地址
"mediaType": 2 # 视频类型是否是音频(1视频,2音频)
}
……
]
}
}}