直播间接口
| 接口 | 路径 | 说明 |
|---|---|---|
| 开播前校验 | /liveroom/check_live | 校验是否具备开播条件,返回默认标题/封面 |
| 开播 | /liveroom/start_live | 创建直播会话,初始化 live_log 和缓存 |
| 关播 | /liveroom/close_live | 主播主动关闭当前直播 |
| 直播间信息 | /liveroom/info | 查询主播当前直播间的缓存信息 |
| 修改直播间信息 | /liveroom/update | 直播中修改标题/封面/简介(仅缓存) |
| 实时直播数据 | /liveroom/live_stats | 查询时长/人数/粉丝/收入/净消耗 |
公共说明
所有接口均为 POST,Content-Type 为 application/x-protobuf,响应同为 protobuf 二进制。开启 debug 模式时支持 JSON 格式调试。
公共请求头 OyeBaseReq
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
key | string | 必填 | 客户端与服务端约定的 key |
timestamp | int64 | 必填 | 当前时间戳(秒) |
nonce | int64 | 必填 | 随机数(10位) |
token | string | 必填 | 用户 token(登录后获取) |
language | string | 可选 | 语言标识:en / ar / zh / hi,影响错误信息语言 |
公共响应头 OyeBaseRsp
| 字段 | 类型 | 说明 |
|---|---|---|
err_code | int32 | 0 = 成功,其余为错误码 |
err_msg | string | 错误描述(语言由请求的 language 决定) |
1. 开播前校验
POST/chatroom/liveroom/check_live
校验当前 token 对应用户是否具备开播条件,返回默认标题和封面供客户端预填。此接口仅做只读校验,不创建任何状态,可重复调用。
请求参数
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
base | OyeBaseReq | 必填 | 公共请求头 |
room_type | int32 | 可选 | 房间类型(预留字段,暂不使用) |
响应字段
| 字段 | 类型 | 说明 |
|---|---|---|
base | OyeBaseRsp | 公共响应头 |
can_live | bool | 是否允许开播 |
reason_code | int32 | 不允许原因错误码(can_live=false 时有效) |
reason_msg | string | 不允许原因描述 |
default_title | string | 默认直播间标题 |
default_cover | string | 默认封面 URL |
default_intro | string | 默认简介 |
family_id | int64 | 主播所属家族 ID(0 表示无家族) |
preset_room_id | int64 | 预设直播房 ID(固定等于 uid) |
2. 开播
POST/chatroom/liveroom/start_live
执行开播:校验身份 → 创建/复用直播房 → 初始化 live_log 和 ROOM/LIVEROOM/LIVELOG 缓存。若主播已在播,重复调用返回已有会话(幂等)。
直播房 ID 固定等于主播 UID,全局唯一。开播成功后客户端需保存
room_id,关播和查询接口依赖此值。请求参数
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
base | OyeBaseReq | 必填 | 公共请求头 |
title | string | 可选 | 直播标题,为空时使用 default_title |
cover | string | 可选 | 封面 URL,为空时使用 default_cover |
intro | string | 可选 | 直播间简介 |
响应字段
| 字段 | 类型 | 说明 |
|---|---|---|
base | OyeBaseRsp | 公共响应头 |
can_live | bool | 是否开播成功 |
reason_code | int32 | 失败原因错误码 |
reason_msg | string | 失败原因描述 |
room_id | int64 | 直播房间 ID(= 主播 uid) |
is_new_room | bool | 是否本次新建房间(false 表示复用已有房间) |
default_title | string | 实际生效的标题 |
default_cover | string | 实际生效的封面 |
family_id | int64 | 主播所属家族 ID |
3. 关播
POST/chatroom/liveroom/close_live
主播主动关闭当前直播。服务端执行:防重锁 → 双重状态校验(Redis + DB)→ 清理 DB/缓存 → 向房间所有用户推送 TCP 消息 LiveEndC2S2C (1018)。
同一主播同一时刻只允许一次关播请求通过(原子防重锁)。并发重复请求返回
ErrorLiveAlreadyClosed。若 Redis 和 DB 均已非直播状态,也直接返回 ErrorLiveAlreadyClosed,不重复执行清理。请求参数
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
base | OyeBaseReq | 必填 | 公共请求头(token 标识主播身份) |
响应字段
| 字段 | 类型 | 说明 |
|---|---|---|
base | OyeBaseRsp | 公共响应头 |
duration | int32 | 本次直播时长(秒) |
interactive_viewers | int32 | 本场互动观众数(峰值) |
income_gold | int64 | 本场主播收入(金币,已含分成计算) |
consume_diamond | int64 | 本场净消耗钻石(= 总送礼钻石 − 幸运礼物返还,可能为负) |
new_fans | int32 | 本场新增粉丝数 |
4. 直播间信息
POST/chatroom/liveroom/info
查询主播当前直播间的缓存态信息(标题、封面、是否在播)。数据来自 Redis 缓存,未开播时 title/cover/intro 退回到主播个人信息默认值。
请求参数
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
base | OyeBaseReq | 必填 | 公共请求头 |
响应字段
| 字段 | 类型 | 说明 |
|---|---|---|
base | OyeBaseRsp | 公共响应头 |
room_id | int64 | 直播房间 ID |
is_living | bool | 当前是否处于直播中 |
title | string | 当前直播间标题(来自缓存) |
cover | string | 当前封面 URL |
intro | string | 当前直播间简介 |
5. 修改直播间信息
POST/chatroom/liveroom/update
直播进行中修改标题、封面或简介。变更仅写入 Redis 缓存,不落数据库,并实时向房间内所有用户推送 TCP 消息 ChatRoomInfoChangeS2C (2240)。
仅限直播中调用(
liveState == LiveStateLive,或房间内有用户作为兜底)。标题会经过风控过滤,违规内容自动替换为 ***。请求参数
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
base | OyeBaseReq | 必填 | 公共请求头 |
title | string | 可选 | 新标题(为空则不修改) |
cover | string | 可选 | 新封面 URL(为空则不修改) |
intro | string | 可选 | 新简介(传空字符串则清空) |
响应字段
| 字段 | 类型 | 说明 |
|---|---|---|
base | OyeBaseRsp | 公共响应头 |
room_id | int64 | 直播房间 ID |
is_living | bool | 当前是否处于直播中 |
title | string | 修改后实际生效的标题 |
cover | string | 修改后实际生效的封面 |
intro | string | 修改后实际生效的简介 |
6. 实时直播数据
POST/chatroom/liveroom/live_stats
查询当前正在进行的直播的实时统计数据,供主播端数据面板轮询使用。若主播当前不在播,is_living=false,其余字段均为 0。
2 秒内重复请求返回 Redis 快照缓存,不重复计算。超过 2 秒才重新从缓存聚合计算并刷新快照,可按此频率合理设置轮询间隔。
请求参数
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
base | OyeBaseReq | 必填 | 公共请求头 |
响应字段
| 字段 | 类型 | 说明 |
|---|---|---|
base | OyeBaseRsp | 公共响应头 |
is_living | bool | 当前是否处于直播中,false 时其余字段均为 0 |
duration | int32 | 当前已播时长(秒),实时计算(now − opentime) |
total_viewers | int32 | 本场峰值观看人数 |
new_fans | int32 | 本场新增粉丝数 |
new_coins | int64 | 本场主播收入(金币,已除以 100) |
send_diamonds | int64 | 本场净消耗钻石(= 总送礼钻石 − 幸运礼物返还,可能为负) |
错误码参考
| 错误码 | 说明 |
|---|---|
0 | 成功 |
ErrorLiveAlreadyClosed | 直播已关闭(关播防重/幂等返回) |
ErrorLiveCreateRoomFail | 创建直播房失败 |
ErrorLiveRoom | 直播间状态异常(非直播中操作) |
ErrorRoomId | 房间不存在 |