diff --git a/README.md b/README.md index 5e20180..638a292 100644 --- a/README.md +++ b/README.md @@ -268,6 +268,8 @@ B站 API 采用 C/S 结构,大多数接口为 REST API 和 gRPC,少部分接 - [ ] [礼物相关](docs/live/gift.md) - [ ] [大航海/粉丝团](docs/live/guard.md) - [ ] [直播回放](docs/live/live_replay.md) + - [ ] [直播数据](docs/live/live_data.md) + - [ ] [直播投票](docs/live/live_vote.md) - [ ] [活动](docs/activity) - [ ] [活动列表](docs/activity/list.md) - [ ] [活动主题信息](docs/activity/info.md) diff --git a/docs/live/live_data.md b/docs/live/live_data.md new file mode 100644 index 0000000..5cec881 --- /dev/null +++ b/docs/live/live_data.md @@ -0,0 +1,183 @@ +# 直播数据 + +## 获取直播场次的直播数据 + +> https://api.live.bilibili.com/xlive/app-blink/v1/live/StopLiveData + +*请求方法: GET* + +认证方式: Cookie (SESSDATA) + +只能获取自己的直播数据。最好在直播结束时立即请求,否则直播时长可能不准确。 + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----- | --- | ---- | ----- | --- | +| live_key | str | 标记直播场次的key | 必要 | 若不提供将会获得无效数据 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | num | 返回值 | 0:成功
-101:未登录 | +| message | str | 提示信息 | 成功时为`"0"` | +| ttl | num | `1` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| LiveTime | num | 该直播场次的直播时长 | 单位:秒,直播结束后还会增长 | +| AddFans | num | 该直播场次的新增粉丝 | | +| HamsterRmb | num | 该直播场次的收益 | | +| NewFansClub | num | 该直播场次新获得粉丝勋章数量 | | +| DanmuNum | num | 该直播场次的弹幕条数 | | +| MaxOnline | num | 该直播场次的最大在线? | [需要验证] | +| WatchedCount | num | 该直播场次的看过人数 | | + +**示例:** + +获取自己的直播数据 + +```shell +curl 'https://api.live.bilibili.com/xlive/app-blink/v1/live/StopLiveData?live_key=634808443264569139' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "LiveTime": 77603, + "AddFans": 0, + "HamsterRmb": 0, + "NewFansClub": 0, + "DanmuNum": 3, + "MaxOnline": 13, + "WatchedCount": 2 + } +} +``` + +
+ +## 获取直播表现 + +> https://api.live.bilibili.com/xlive/app-blink/v1/date/Overview + +*请求方法: GET* + +认证方式: Cookie (SESSDATA) + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | num | 返回值 | 0:成功
-101:未登录 | +| message | str | 提示信息 | 成功时为`"0"` | +| ttl | num | `1` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| graph | arr | 图表数据 | 在界面显示为雷达图 | +| propose | null | (?) | | + +`data.graph` 数组: + +| 索引 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| 0 | obj | 数据类别 | | +| … | obj | 数据类别 | | + +`data.graph` 数组中对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| name | str | 显示的名称 | | +| index | str | 类别标识 | | +| me | num | 自己在这个类别的数值 | | +| max | num | 这个类别最外侧那条线的数值 | | +| aver | num | 同水平主播在这个类别的数值 | | + +**示例:** + +获取自己的直播表现 + +```shell +curl 'https://api.live.bilibili.com/xlive/app-blink/v1/date/Overview' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "graph": [ + { + "name": "收益", + "index": "income", + "me": 0, + "max": 9.27, + "aver": 8.04 + }, + { + "name": "累计观看", + "index": "watchedCount", + "me": 5.13, + "max": 7.01, + "aver": 6.17 + }, + { + "name": "新增粉丝", + "index": "fans", + "me": 0, + "max": 2.58, + "aver": 0 + }, + { + "name": "用户平均观看时长", + "index": "watchTime", + "me": 9.31, + "max": 11.82, + "aver": 10.88 + }, + { + "name": "开播时长", + "index": "broadcast", + "me": 17.57, + "max": 17.42, + "aver": 16.6 + }, + { + "name": "弹幕数量", + "index": "barrage", + "me": 7.37, + "max": 8.02, + "aver": 6.91 + } + ], + "propose": null + } +} +``` + +
diff --git a/docs/live/live_replay.md b/docs/live/live_replay.md index 0bad582..72166a3 100644 --- a/docs/live/live_replay.md +++ b/docs/live/live_replay.md @@ -40,6 +40,8 @@ | pagination | obj | 分页信息 | | | archive_flag | bool | (?) | 作用尚不明确 | | can\_edit | num | (?) | 作用尚不明确 | +| can_upload | bool | (?) | 作用尚不明确 | +| has_third_platform_live| bool | (?) | 作用尚不明确 | `data.replay_info` 数组中的对象: @@ -62,6 +64,7 @@ | cover | str | 直播封面 | | | live_time | num | 直播时间 | 同`data.replay_info[i].start_time` | | live_type | num | 直播类型? | 作用尚不明确 | +| platform | str | 直播平台 | | `data.replay_info[i].video_info` 对象: @@ -111,65 +114,69 @@ curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/AnchorGetRepl "data": { "replay_info": [ { - "replay_id": 10707737, + "replay_id": 13517082, "live_info": { - "title": "摆", + "title": "随缘摸鱼", "cover": "https://i0.hdslb.com/bfs/live/59fc254c1f51a962dbf69ae85e4920f2f6fb8dcd.png", - "live_time": 1747509268, - "live_type": 1 + "live_time": 1756479520, + "live_type": 1, + "platform": "android_link" }, "video_info": { - "replay_status": 2, + "replay_status": -8, "estimated_time": "1970-01-01 08:00:00", - "duration": 1820, + "duration": 9350, "alert_code": 2, "alert_message": "录像时长远小于开播时长,请关注直播时网络状况" }, "alarm_info": { - "code": 2, - "message": "录像生成失败,请稍后再试", - "cur_time": 1747557808, + "code": -8, + "message": "直播内容存在违规片段", + "cur_time": 1756496581, "is_ban_publish": false }, - "room_id": 18992371, - "live_key": "609043243693510451", - "start_time": 1747509268, - "end_time": 1747511088 + "room_id": 1899237171, + "live_key": "637117671085969203", + "start_time": 1756479520, + "end_time": 1756488870 }, { - "replay_id": 10707664, + "replay_id": 13487274, "live_info": { - "title": "摆", + "title": "随缘摸鱼", "cover": "https://i0.hdslb.com/bfs/live/59fc254c1f51a962dbf69ae85e4920f2f6fb8dcd.png", - "live_time": 1747508293, - "live_type": 1 + "live_time": 1756385910, + "live_type": 1, + "platform": "android_link" }, "video_info": { "replay_status": 2, "estimated_time": "1970-01-01 08:00:00", - "duration": 206, + "duration": 14985, "alert_code": 2, "alert_message": "录像时长远小于开播时长,请关注直播时网络状况" }, "alarm_info": { "code": 2, "message": "录像生成失败,请稍后再试", - "cur_time": 1747557808, + "cur_time": 1756496581, "is_ban_publish": false }, - "room_id": 18992371, - "live_key": "609041817764368179", - "start_time": 1747508293, - "end_time": 1747508499 + "room_id": 1899237171, + "live_key": "636823272552664883", + "start_time": 1756385910, + "end_time": 1756400895 } ], "pagination": { "page": 1, "page_size": 2, - "total": 29 + "total": 16 }, "archive_flag": false, - "can_edit": 1 + "can_edit": 1, + "can_upload": false, + "has_third_platform_live": false } } ``` @@ -469,7 +476,7 @@ curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/DeleteSliceDr 鉴权方式: Cookie中`bili_jct`的值正确并与`csrf`相同 -未生成整场直播回放时将进行生成。 +是否生成回放取决于回放状态,处于可生成回放状态且未生成整场直播回放时将进行生成。 **正文参数( application/x-www-form-urlencoded ):** @@ -486,7 +493,7 @@ curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/DeleteSliceDr | 字段 | 类型 | 内容 | 备注 | | --- | --- | --- | --- | -| code | num | 返回值 | -101:未登录
-111:csrf校验失败
0:成功
100:非法参数
210:回放id或场次key无效 | +| code | num | 返回值 | -101:未登录
-111:csrf校验失败
0:成功
100:非法参数
210:回放id或场次key无效
217:未找到直播录像 | | message | str | 错误信息 | 成功时为`"0"` | | ttl | num | `1` | | | data | obj | 信息本体 | | @@ -634,7 +641,7 @@ curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/GetAnchorVide -## 轮询回放合成状态 +## 轮询回放状态 > https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/GetAnchorVideoUidRecord @@ -769,7 +776,8 @@ curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/GetAnchorVide | 字段 | 类型 | 内容 | 备注 | | --- | --- | --- | --- | -| list | arr | 直播回放视频列表 | 如果该场回放没有视频流将为`null` | +| list | arr 或 null | 直播回放视频列表 | 如果该场回放没有视频流将为`null` | +| ban_list | null 或 arr | 不可发布的回放时间 | 如果该场回放没有不可发布的时间将为`null` | `data.list` 数组中的对象: @@ -780,12 +788,19 @@ curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/GetAnchorVide | stream | str | 直播回放视频流 | | | type | num | 类型? | 2:一般回放? | +`data.ban_list` 数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| start_time | num | 不可发布片段的开始时间戳 | Unix秒时间戳 | +| end_time | num | 不可发布片段的结束时间戳 | Unix秒时间戳 | + **示例:** 获取某个场次的视频流 ```shell -curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/GetSliceStream?live_key=607113721045847859&start_time=1746863101&end_time=1746879299' \ +curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/GetSliceStream?live_key=637117671085969203&start_time=1756479520&end_time=1756488870' \ -b 'SESSDATA=xxx' ``` @@ -800,22 +815,16 @@ curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/GetSliceStrea "data": { "list": [ { - "start_time": 1746863103, - "end_time": 1746879246, - "stream": "https://bvc-live.bilivideo.com/hls-record-gateway/videoPlay?biz_id=live2vod-clip&end_time=1746879246&header_name=1746863103.m4s&host_id=edge-hls-bvc-self-cn-jsyz-ct-03-59-6d854b4bd8-gnlb7&no_end=0&schema=https&sign=12f649dd540096672745d60b84f18eda&start_time=1746863103&stream_name=live_438160221_32373699&ts=1752930893&version=2", + "start_time": 1756479528, + "end_time": 1756488870, + "stream": "https://bvc-live.bilivideo.com/hls-record-gateway/videoPlay?none=为了防止信息泄露,不提供完整链接。目前该视频流可以获取违规片段的视频。", "type": 2 - }, + } + ], + "ban_list": [ { - "start_time": 1746879267, - "end_time": 1746879269, - "stream": "https://bvc-live.bilivideo.com/hls-record-gateway/videoPlay?biz_id=live2vod-clip&end_time=1746879269&header_name=1746863104.m4s&host_id=edge-hls-bvc-self-cn-jsyz-ct-03-59-6d854b4bd8-gnlb7&no_end=0&schema=https&sign=5c63605f1fa88561a6257b6812725b4f&start_time=1746879267&stream_name=live_438160221_32373699&ts=1752930893&version=2", - "type": 2 - }, - { - "start_time": 1746879269, - "end_time": 1746879298, - "stream": "https://bvc-live.bilivideo.com/hls-record-gateway/videoPlay?biz_id=live2vod-clip&end_time=1746879298&header_name=1746863105.m4s&host_id=edge-hls-bvc-self-cn-jsyz-ct-03-59-6d854b4bd8-gnlb7&no_end=0&schema=https&sign=70929627354f4380b54b97fcdb69c8a2&start_time=1746879269&stream_name=live_438160221_32373699&ts=1752930893&version=2", - "type": 2 + "start_time": 1756487070, + "end_time": 1756488870 } ] } @@ -837,8 +846,8 @@ curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/GetSliceStrea | 参数名 | 类型 | 内容 | 必要性 | 备注 | | ----- | --- | ---- | ----- | --- | | live_key | str | 标记直播场次的key | 必要 | | -| start_tm | str | 开始时间 | 必要 | 格式为`yyyy-mm-dd+HH:MM:SS`,时区为`UTC+08:00`(中国标准时间);取值对实际无影响 | -| end_tm | str | 开始时间 | 必要 | 格式为`yyyy-mm-dd+HH:MM:SS`,时区为`UTC+08:00`(中国标准时间);取值对实际无影响 | +| start_tm | str | 开始时间 | 必要 | 格式为`yyyy-mm-dd HH:MM:SS`,时区为`UTC+08:00`(中国标准时间);取值对实际无影响 | +| end_tm | str | 开始时间 | 必要 | 格式为`yyyy-mm-dd HH:MM:SS`,时区为`UTC+08:00`(中国标准时间);取值对实际无影响 | | web_location | str | (?) | | **json回复:** @@ -862,6 +871,7 @@ curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/GetSliceStrea | max_value | num | (?) | 效果未知 | | high_light_data | arr | 高光时刻数据 | | | ass_url | str | ASS字幕链接 | 用作弹幕显示 | +| high_light_stat | obj | 高亮状态信息 | | `data.session_data` 数组中的对象: @@ -882,6 +892,15 @@ curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/GetSliceStrea | cover | str | (?) | 目前为`""` | | extra | str | (?) | 目前为`""` | +`data.high_light_stat` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| original_hl | num | “高光时刻”数量 | 有“高光时刻”时存在 | +| manual_hl | num | “已保存”数量 | 有“已保存”时存在,调用[手动保存高亮片段](#手动保存高亮片段)进行保存 | + +注: 可能还存在一个“回溯录制”的字段。 + **示例:** 获取场次key为`607113721045847859`的会话数据 @@ -902,144 +921,241 @@ curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/GetLiveSessio "data": { "session_data": [ { - "ts": 1746863100, + "ts": 1752927300, "value": 0 }, { - "ts": 1746863160, + "ts": 1752927360, "value": 0 }, { - "ts": 1746863220, + "ts": 1752927420, + "value": 0 + }, + // 省略掉大部分重复内容 + { + "ts": 1752946620, "value": 0 }, { - "ts": 1746863280, + "ts": 1752946680, "value": 0 }, { - "ts": 1746863340, - "value": 0 - }, - { - "ts": 1746863400, - "value": 0 - }, - { - "ts": 1746863460, - "value": 0 - }, - { - "ts": 1746863520, - "value": 0 - }, - { - "ts": 1746863580, - "value": 0 - }, - { - "ts": 1746863640, - "value": 0 - }, - { - "ts": 1746863700, - "value": 0 - }, - { - "ts": 1746863760, - "value": 0 - }, - { - "ts": 1746863820, - "value": 0 - }, - // 省略100多条数据 - { - "ts": 1746878520, - "value": 0 - }, - { - "ts": 1746878580, - "value": 0 - }, - { - "ts": 1746878640, - "value": 0 - }, - { - "ts": 1746878700, - "value": 0 - }, - { - "ts": 1746878760, - "value": 0 - }, - { - "ts": 1746878820, - "value": 0 - }, - { - "ts": 1746878880, - "value": 0 - }, - { - "ts": 1746878940, - "value": 0 - }, - { - "ts": 1746879000, - "value": 0 - }, - { - "ts": 1746879060, - "value": 0 - }, - { - "ts": 1746879120, - "value": 0 - }, - { - "ts": 1746879180, - "value": 0 - }, - { - "ts": 1746879240, + "ts": 1752946740, "value": 0 } ], - "max_danmaku": 1746864660, - "max_pcu": 1746864660, + "max_danmaku": 1752928860, + "max_pcu": 1752928200, "max_value": 0, "high_light_data": [ { - "id": 6226272, + "id": 9628113, "type": 1, - "start_time": 1746873300, - "end_time": 1746873480, + "start_time": 1752928860, + "end_time": 1752929040, "title": "弹幕高光 Top 1", "cover": "", "extra": "" }, { - "id": 6226274, + "id": 9628114, "type": 1, - "start_time": 1746873120, - "end_time": 1746873420, + "start_time": 1752938460, + "end_time": 1752938640, "title": "弹幕高光 Top 2", "cover": "", "extra": "" }, { - "id": 6226271, + "id": 9628115, + "type": 1, + "start_time": 1752938040, + "end_time": 1752938220, + "title": "弹幕高光 Top 3", + "cover": "", + "extra": "" + }, + { + "id": 9628112, "type": 2, - "start_time": 1746864600, - "end_time": 1746864780, + "start_time": 1752928140, + "end_time": 1752928320, "title": "进房高光时刻", "cover": "", "extra": "" } ], - "ass_url": "https://jssz-boss.hdslb.com/live2arc_anchor_video/dmass_1899237171_607113721045847859.ass?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=y4zI4XTQzlOkmSKg%2F20250520%2Fjssz%2Fs3%2Faws4_request&X-Amz-Date=20250520T130358Z&X-Amz-Expires=7200&X-Amz-SignedHeaders=host&X-Amz-Signature=5e3ddfbcb8893dc6e76deea7981165e18e5df9a7579f4e6e97c7a32abec53d84" + "ass_url": "https://jssz-boss.hdslb.com/live2arc_anchor_video/dmass_1899237171_625727121464233779.ass?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Credential=y4zI4XTQzlOkmSKg%2F20250802%2Fjssz%2Fs3%2Faws4_request\u0026X-Amz-Date=20250802T072504Z\u0026X-Amz-Expires=7200\u0026X-Amz-SignedHeaders=host\u0026X-Amz-Signature=384b42382469059a1f4c6b04c7bd2290a0c74c01375df1681eedb3ba8aca5c3c", + "high_light_stat": { + "original_hl": 4, + "manual_hl": 6 + } + } +} +``` + + + +## 获取用户高光列表 + +> https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/UserGetManualHighlightList + +*请求方法: GET* + +认证方式: Cookie (SESSDATA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----- | --- | ---- | ----- | --- | +| live_key | str | 标记直播场次的key | 必要 | | +| manual_type | num | 查询类型 | 必要 | 1:回溯录制
2:已保存片段 | +| web_location | str | (?) | 非必要 | 作用尚不明确 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | num | 返回值 | -400:请求错误
-101:未登录
0:成功 | +| message | str | 错误信息 | 成功时为`"0"` | +| ttl | num | `1` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| high_light_stat | obj | 高亮状态信息 | | +| manual_highlight_list | arr | 高光列表 | 有内容时存在 | + +`data.manual_highlight_list` 数组: + +| 索引 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| 0 | obj | 第一条高光信息 | 最少存在1条,目前没有高光内容将看不到这个数组 | +| … | obj | 某一条高光信息 | | +| i | obj | 最后一条高光信息 | | + +`data.manual_highlight_list` 数组中对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| manual_id | num | 片段id | | +| highlight_title | str | 片段标题 | | +| start_ts | num | 开始时间戳 | Unix 秒时间戳 | +| end_ts | num | 结束时间戳 | Unix 秒时间戳 | +| uid | num | 保存者uid? | | +| ruid | num | 主播uid | | +| live_key | str | 标记直播场次的key | | + +`data.high_light_stat` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| original_hl | num | “高光时刻”数量 | 有“高光时刻”时存在 | +| manual_hl | num | “已保存”数量 | 有“已保存”时存在,调用[手动保存高亮片段](#手动保存高亮片段)进行保存 | + +注: 可能还存在一个“回溯录制”的字段。 + +**示例:** + +获取用户保存列表 + +```shell +curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/UserGetManualHighlightList?live_key=625727121464233779&manual_type=2' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +只有高光时刻的示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "high_light_stat": { + "original_hl": 4 + } + } +} +``` + +有保存片段的示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "manual_highlight_list": [ + { + "manual_id": 14434, + "highlight_title": "手动保存片段【6】", + "start_ts": 1752935402, + "end_ts": 1752935402, + "uid": 438160221, + "ruid": 438160221, + "live_key": "625727121464233779" + }, + { + "manual_id": 14428, + "highlight_title": "手动保存片段【5】", + "start_ts": 1752935402, + "end_ts": 1752935204, + "uid": 438160221, + "ruid": 438160221, + "live_key": "625727121464233779" + }, + { + "manual_id": 14426, + "highlight_title": "手动保存片段【4】", + "start_ts": 1752935402, + "end_ts": 1752935404, + "uid": 438160221, + "ruid": 438160221, + "live_key": "625727121464233779" + }, + { + "manual_id": 14425, + "highlight_title": "手动保存片段【3】", + "start_ts": 1752935402, + "end_ts": 1752935404, + "uid": 438160221, + "ruid": 438160221, + "live_key": "625727121464233779" + }, + { + "manual_id": 14424, + "highlight_title": "手动保存片段【2】", + "start_ts": 1752927342, + "end_ts": 1752935404, + "uid": 438160221, + "ruid": 438160221, + "live_key": "625727121464233779" + }, + { + "manual_id": 14423, + "highlight_title": "手动保存片段【1】", + "start_ts": 1752927336, + "end_ts": 1752946748, + "uid": 438160221, + "ruid": 438160221, + "live_key": "625727121464233779" + } + ], + "high_light_stat": { + "original_hl": 4, + "manual_hl": 6 + } } } ``` @@ -1134,6 +1250,72 @@ curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/GetAnchorVide
+## 手动保存高亮片段 + +> https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/UserManualSaveHighlight + +*请求方法: POST* + +认证方式: Cookie (SESSDATA) + +鉴权方式: Cookie中`bili_jct`的值正确并与`csrf`相同 + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----- | --- | ---- | ----- | --- | +| live_key | str | 标记直播场次的key | 必要 | 必须为自己的live_key | +| start_ts | num | 开始时间戳 | 必要 | Unix 秒时间戳 | +| end_ts | num | 结束时间戳 | 必要 | Unix 秒时间戳 | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +注: 开始时间减结束时间的结果小于1可能导致[直播回放片段发布页面](#直播回放片段发布页面)无法处理这个片段。 + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | num | 返回值 | -400:请求错误
-111:csrf校验失败
-101:未登录
0:成功
| +| message | str | 错误信息 | | +| ttl | num | `1` | | +| data | obj | 信息本体 | 成功时为空对象 | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | num | `-1` | | +| message | str | 错误提示 | `主播没有对应场次` , `保存时间点未开播` | + +**示例:** + +手动保存一个片段 + +```shell +curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/UserManualSaveHighlight' \ + --data-urlencode 'live_key=625727121464233779' \ + --data-urlencode 'start_ts=1752935402' \ + --data-urlencode 'end_ts=1752935404' \ + --data-urlencode 'csrf=xxx' \ + -b 'SESSDATA=xxx;bili_jct=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": {} +} +``` + +
+ ## 投稿直播回放片段 > https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/AnchorPublishVideoSlice @@ -1156,7 +1338,8 @@ curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/GetAnchorVide | av_highlight | num | 高光绑定? | 非必要 | | | with_subtitle | num | 是否自动生成字幕? | 非必要 | 效果不明确 | | with_danmaku | num | 是否带弹幕? | 非必要 | 传递`1`时可能导致处于“发布中”状态时不在[获取已发布片段的信息](#获取已发布片段的信息)中显示 | -| with_reserve | num | (?) | 非必要 | 作用尚不明确 | +| with_reserve | num | 投稿携带下场直播提醒 | 非必要 | 0:不携带,1:携带 | +| av_speed | str | 倍速投稿 | 非必要 | 格式为 `倍速值 + "x"` ,使用非1x倍速时可能导致处于“发布中”状态时不在[获取已发布片段的信息](#获取已发布片段的信息)中显示
允许值: `0.5x` , `0.75x` , `1.0x` , `1.25x` , `1.5x` , `2.0x` | | csrf | str | CSRF Token(位于cookie) | 必要 | | **json回复:** @@ -1165,7 +1348,7 @@ curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/GetAnchorVide | 字段 | 类型 | 内容 | 备注 | | --- | --- | --- | --- | -| code | num | 返回值 | -111:csrf校验失败
-101:未登录
0:成功
4000:时长过长
4001:操作太快
4002:片段已投稿
4003:请选择精彩片段再投稿哦
4006:标题已使用 | +| code | num | 返回值 | -111:csrf校验失败
-101:未登录
0:成功
4000:时长过长
4001:操作太快
4002:片段已投稿
4003:请选择精彩片段再投稿哦
4006:标题已使用
4008:不被允许的视频倍速
4009:该片段存在违规内容,不允许投稿 | | message | str | 错误信息 | | | ttl | num | `1` | | | data | obj | 信息本体 | 成功时有效 | @@ -1220,7 +1403,7 @@ curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/AnchorPublish 2. (可选)请求[获取回放的信息](#获取回放的信息)接口,生成合成进度页面; -3. [轮询回放合成状态](#轮询回放合成状态),当状态变为`30`转到流程4,变为`-30`转到流程5; +3. [轮询回放合成状态](#轮询回放状态),当状态变为`30`转到流程4,变为`-30`转到流程5; 4. 再次[请求整场直播回放下载链接](#请求整场直播回放下载链接),获取下载链接并下载。 diff --git a/docs/live/live_vote.md b/docs/live/live_vote.md new file mode 100644 index 0000000..8e2af3f --- /dev/null +++ b/docs/live/live_vote.md @@ -0,0 +1,470 @@ +# 直播投票 + +## 查询投票信息 + +> https://api.live.bilibili.com/xlive/app-room/v1/dm/interaction/votePanel + +*请求方法: GET* + +认证方式: Cookie (SESSDATA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----- | --- | ---- | ----- | --- | +| room_id | num | 直播间id | 必要 | 必须为登录信息对应的直播间 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | num | 返回值 | -400:请求错误
-101:未登录
0:成功 | +| message | str | 错误信息 | 成功时为`"0"` | +| ttl | num | `1` | | +| data | obj | 信息本体 | 不是登录信息对应的直播间时将为 `null` | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| vote_info | obj | 当前活动的投票信息 | 若当前没有活动的投票将为空对象 | +| templates | arr | 投票模板 | | + +`data.vote_info` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| status | num | 投票状态 | 见[投票状态](#投票状态)枚举 | +| question | str | 投票问题 | | +| options | arr | 投票选项 | | +| duration | num | 投票持续时间 | 单位:毫秒 | +| result | num | 投票结果偏向哪一方状态 | | +| result_text | str | 投票结果偏向哪一方 | | +| etime_str | str | 投票结束时间 | | +| left_duration | num | 投票剩余时间 | 单位:毫秒,投票结束后不存在 | +| interaction_id | num | 投票互动id | | +| template_id | num | 投票模板id | 使用模板时存在 | + +`data.vote_info.options` 数组: + +| 索引 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| 0 | obj | 投票选项1 | | +| 1 | obj | 投票选项2 | | + +`data.vote_info.options` 数组中对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| idx | num | 选项id | | +| desc | str | 投票选项描述 | | +| percent | num | 投票选项占比显示 | | + +`data.templates` 数组: + +| 索引 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| 0 | obj | 投票模板信息 | | +| … | obj | 投票模板信息 | | + +`data.templates` 数组中对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| template_id | num | 模板id | | +| question | str | 投票问题 | | +| option_a | str | 投票选项A | | +| option_b | str | 投票选项B | | + +**示例:** + +查询投票信息 + +```shell +curl 'https://api.live.bilibili.com/xlive/app-room/v1/dm/interaction/votePanel?room_id=1' +``` + +
+查看响应示例: + +```jsonc +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "vote_info": { + "status": 4, + "question": "醒醒", + "options": [ + { + "idx": 1, + "desc": "醒", + "percent": 0.5 + }, + { + "idx": 2, + "desc": "睡", + "percent": 0.5 + } + ], + "duration": 600000, + "result": 1, + "result_text": "平局", + "etime_str": "08-31 15:44", + "left_duration": 549660, + "interaction_id": 120122595433984 + }, + "templates": [ + { + "template_id": 54339003518976, + "question": "哪边赢", + "option_a": "左", + "option_b": "右" + }, + { + "template_id": 48570973661696, + "question": "只因你太美唱的好吗?", + "option_a": "你干嘛", + "option_b": "哎哟" + }, + // 省略了大部分内容 + { + "template_id": 46203444257280, + "question": "№!", + "option_a": "虾头", + "option_b": "抽象" + }, + { + "template_id": 96177095781888, + "question": "相信奇迹吗", + "option_a": "相信", + "option_b": "必须相信" + }, + { + "template_id": 103827382481920, + "question": "1", + "option_a": "1", + "option_b": "1" + } + ] + } +} +``` + +
+ +## 查询投票历史 + +> https://api.live.bilibili.com/xlive/app-room/v1/dm/interaction/voteHistory + +*请求方法: GET* + +认证方式: Cookie (SESSDATA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----- | --- | ---- | ----- | --- | +| room_id | num | 直播间id | 必要 | 必须为登录信息对应的直播间 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | num | 返回值 | -400:请求错误
-101:未登录
0:成功 | +| message | str | 错误信息 | 成功时为`"0"` | +| ttl | num | `1` | | +| data | obj | 信息本体 | 不是登录信息对应的直播间时将为空对象 | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| history | arr | 投票历史列表 | | + +`data.history` 数组: + +| 索引 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| 0 | obj | 投票历史 | 与[查询投票信息](#查询投票信息)`data.vote_info`相同 | +| … | obj | 投票历史 | 与[查询投票信息](#查询投票信息)`data.vote_info`相同 | +| 9 | obj | 投票历史 | 与[查询投票信息](#查询投票信息)`data.vote_info`相同 | + +`data.history` 数组中对象: + +与 [查询投票信息](#查询投票信息) json回复的 `data.vote_info` 相同。 + +**示例:** + +```shell +curl 'https://api.live.bilibili.com/xlive/app-room/v1/dm/interaction/voteHistory?room_id=1' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```jsonc +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "history": [ + { + "status": 5, + "question": "醒醒", + "options": [ + { + "idx": 1, + "desc": "醒", + "percent": 0.5 + }, + { + "idx": 2, + "desc": "睡", + "percent": 0.5 + } + ], + "duration": 600000, + "result": 1, + "result_text": "平局", + "etime_str": "08-31 15:44", + "interaction_id": 120122595433984 + }, + { + "status": 5, + "question": "会不会睡死?", + "options": [ + { + "idx": 1, + "desc": "包会的", + "percent": 0.5 + }, + { + "idx": 2, + "desc": "不会的", + "percent": 0.5 + } + ], + "duration": 60000, + "result": 1, + "result_text": "平局", + "etime_str": "08-31 14:57", + "interaction_id": 120117830648832 + }, + { + "status": 5, + "question": "会不会睡着?", + "options": [ + { + "idx": 1, + "desc": "包会的", + "percent": 0.5 + }, + { + "idx": 2, + "desc": "不会的", + "percent": 0.5 + } + ], + "duration": 180000, + "result": 1, + "result_text": "平局", + "etime_str": "08-31 14:53", + "interaction_id": 120117121798656 + }, + { + "status": 5, + "question": "能不能一把过", + "options": [ + { + "idx": 1, + "desc": "能", + "percent": 0.5 + }, + { + "idx": 2, + "desc": "不能", + "percent": 0.5 + } + ], + "duration": 60000, + "result": 1, + "result_text": "平局", + "etime_str": "08-31 14:41", + "interaction_id": 120115796409344, + "template_id": 3109187328000 + } + // 省略其余6项 + ] + } +} +``` + +
+ +## 投票状态 + +此处列出已发现的投票状态,在投票信息和直播信息流 `DM_INTERACTION` 的类型 `101` 等地方使用。 + +当前状态信息来自混淆代码寻找而来。 + +| 值 | 含义 | 备注 | +| -- | ---- | ---- | +| 0 | | 键名 `NONE` | +| 1 | 等待审核 | 键名 `WAITING_AUDIT` | +| 2 | 审核失败 | 键名 `AUDIT_FAILED` | +| 4 | 投票进行中 | 键名 `DURING` | +| 5 | 投票结束 | 键名 `END` | +| 6 | | 键名 `STOP` | + +## 创建直播投票 + +> https://api.live.bilibili.com/xlive/app-room/v1/dm/interaction/createVote + +*请求方法: POST* + +认证方式: Cookie (SESSDATA) + +鉴权方式: Cookie中`bili_jct`的值正确并与`csrf`相同 + +投票创建完成后,投票信息和审核结果将以直播信息流 `DM_INTERACTION` 的类型 `101` 下发。 + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----- | --- | ---- | ----- | --- | +| room_id | num | 直播间id | 必要 | 必须为登录信息对应的直播间 | +| duration | num | 持续时间 | 必要 | 必须为整数,目前范围`0-400:参数错误
-101:未登录
-111:csrf校验失败
0:成功 | +| message | str | 错误信息 | 成功时为`"0"` | +| ttl | num | `1` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| interaction_id | num | 投票互动id | | + +**示例:** + +创建一个投票 + +```shell +curl 'https://api.live.bilibili.com/xlive/app-room/v1/dm/interaction/createVote' \ + --data-urlencode 'room_id=3' \ + --data-urlencode 'duration=1' \ + --data-urlencode 'question=abcdef' \ + --data-urlencode 'option_a=A' \ + --data-urlencode 'option_b=B' \ + --data-urlencode 'csrf=xxx' \ + -b 'SESSDATA=xxx;bili_jct=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data":{ + "interaction_id":120008099262976 + } +} +``` + +
+ +## 中断直播投票 + +> https://api.live.bilibili.com/xlive/app-room/v1/dm/interaction/terminateVote + +*请求方法: POST* + +认证方式: Cookie (SESSDATA) + +鉴权方式: Cookie中`bili_jct`的值正确并与`csrf`相同 + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----- | --- | ---- | ----- | --- | +| interaction_id | num | 投票互动id | 必要 | 必须为该登录信息创建的投票 | +| room_id | num | 直播间id | 必要 | 必须为登录信息对应的直播间 | +| csrf_token | str | CSRF Token(位于cookie) | 非必要 | | +| csrf | str | CSRF Token(位于cookie) | 必要 | | +| visit_id | str | (?) | 非必要 | 作用尚不明确 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | num | 返回值 | -400:参数错误
-101:未登录
-111:csrf校验失败
0:成功
1003402:修改投票状态失败 | +| message | str | 错误信息 | 成功时为`"0"` | +| ttl | num | `1` | | +| data | null | 无 | | + +**示例:** + +中断某个投票 + +```shell +curl 'https://api.live.bilibili.com/xlive/app-room/v1/dm/interaction/terminateVote' \ + --data-urlencode 'interaction_id=120122595433984' \ + --data-urlencode 'room_id=1' \ + --data-urlencode 'csrf=xxx' \ + -b 'SESSDATA=xxx;bili_jct=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": null +} +``` + +
+ +## 弹幕投票主播侧界面 + +> https://live.bilibili.com/p/html/live-app-guessing-game/anchor_vote.html + +直接访问此页面存在部分功能不可用的情况。 + +**URL查询参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----- | --- | ---- | ----- | --- | +| room_id | num | 直播间id | 必要 | 必须为自己的直播间 | diff --git a/docs/live/message_stream.md b/docs/live/message_stream.md index 8a13320..be7c355 100644 --- a/docs/live/message_stream.md +++ b/docs/live/message_stream.md @@ -30,7 +30,7 @@ | 字段 | 类型 | 内容 | 备注 | | ------- | ---- | -------- | ------------------------------------------------------------ | -| code | num | 返回值 | 0: 成功
65530: token 错误 (登录错误)
1: 错误
60009: 分区不存在
**(其他错误码有待补充)** | +| code | num | 返回值 | 0: 成功
1: 错误
65530: token 错误 (登录错误)
60009: 分区不存在
1002002: 房间号错误
**(其他错误码有待补充)** | | message | str | 错误信息 | 默认为空 | | ttl | num | 1 | | | data | obj | 信息本体 | | @@ -339,6 +339,10 @@ while (!s.isclosed()) { | cmd | str | `DANMU_MSG` | | | dm_v2 | str | 空串? | | | info | array | 弹幕信息 | 感谢 [#1084](https://github.com/SocialSisterYi/bilibili-API-collect/issues/1084) 补充 | +| msg_id | str | 弹幕id? | 极低概率存在 | +| p_is_ack | bool | | 极低概率存在 | +| p_msg_type | num | | 极低概率存在 | +| send_time | num | 发送时间戳 | Unix 毫秒时间戳,极低概率存在 | `info` 数组: @@ -960,6 +964,8 @@ type===106 注: 有用户进入直播间、关注主播、分享直播间时触发 +已被`INTERACT_WORD_V2`替换。 + **JSON消息:** 根对象: @@ -967,7 +973,7 @@ type===106 | 字段 | 类型 | 内容 | 备注 | | ---- | ---- | ------ | --------- | | cmd | str | `INTERACT_WORD` | | -| data | obj | 进入直播间的用户的信息 | | +| data | obj | 用户交互信息 | | `data` 对象: @@ -1041,6 +1047,47 @@ type===106 +#### 用户交互消息V2 (INTERACT_WORD_V2) + +注: 该cmd已将`INTERACT_WORD`替换 + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| cmd | str | `INTERACT_WORD_V2` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| dmscore | num | | | +| pb | str | 使用 base64 编码 protobuf 后的数据 | 解析后数据基本与`INTERACT_WORD`的`data`相同 | + +用于解析protobuf数据的proto文件: [#1332(comment)](https://github.com/SocialSisterYi/bilibili-API-collect/issues/1332#issuecomment-3047237367) + +注: 先用 base64 解码 `data.pb` 内的字符串为字节数据pb,再使用proto文件解码pb数据。 + +**示例:** + +
+查看消息示例: + +```json +{ + "cmd": "INTERACT_WORD_V2", + "data": { + "dmscore": 3, + "pb": "CJTwwNEBEgpTdGFyU2VhMjQ2IgIDASgBMNWgITispaTDBkDUubHe/jJKLAiv8CkQEhoG55Sf5oCBIKS6ngYopLqeBjCkup4GOKS6ngZAAWDVoCFo9JQRYgB4gZ/v1tmc1qcYmgEAsgHPAQiU8MDRARJYCgpTdGFyU2VhMjQ2EkpodHRwczovL2kwLmhkc2xiLmNvbS9iZnMvZmFjZS8xMDliNzg3YzVmMTEzYzRhM2M3NDE1YmI5YmY2YjgyYmMzM2JjNGUyLmpwZxpnCgbnlJ/mgIEQEhikup4GIKS6ngYopLqeBjCkup4GOP/hAUgBUK/wKWD0lBF6CSNEQzZCNkI5OYIBCSNEQzZCNkI5OYoBCSNEQzZCNkI5OZIBCSNGRkZGRkZGRpoBCSM4MTAwMUY5OSICCAkyALoBAA==" + } +} +``` + +
+ #### 上舰通知 (GUARD_BUY) 注: 当有用户购买 舰长 / 提督 / 总督 时 @@ -1703,6 +1750,95 @@ type===106 +#### 礼物星球进度更新 (WIDGET_GIFT_STAR_PROCESS) + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| cmd | str | `WIDGET_GIFT_STAR_PROCESS` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| start_date | num | 开始时间? | 一个年月日数字,格式 `Number(String(年) + String(月) + String(日))`,详见消息示例 | +| process_list | arr | 礼物进度列表 | | +| finished | bool | 是否完成? | | +| ddl_timestamp | num | 截止时间? | Unix 秒时间戳 | +| version | num | 更新时间 | Unix 毫秒时间戳 | +| reward_gift | num | | | +| reward_gift_img | str | | | +| reward_gift_name | str | | | +| level_info | null | (?) | | + +`data.process_list` 数组: + +| 索引 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| 0 | obj | 礼物需求1 | | +| 1 | obj | 礼物需求2 | | +| 2 | obj | 礼物需求3 | | + +`data.process_list` 数组中对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| gift_id | num | 礼物id | | +| gift_img | str | 礼物图片 | | +| gift_name | str | 礼物名称 | `礼物星球` | +| completed_num | num | 当前数量 | | +| target_num | num | 目标数量 | | + +**示例:** + +
+查看消息示例: + +```json +{ + "cmd": "WIDGET_GIFT_STAR_PROCESS", + "data": { + "start_date": 20250728, + "process_list": [ + { + "gift_id": 33988, + "gift_img": "https://s1.hdslb.com/bfs/live/7164c955ec0ed7537491d189b821cc68f1bea20d.png", + "gift_name": "礼物星球", + "completed_num": 155, + "target_num": 1000 + }, + { + "gift_id": 31036, + "gift_img": "https://s1.hdslb.com/bfs/live/8b40d0470890e7d573995383af8a8ae074d485d9.png", + "gift_name": "礼物星球", + "completed_num": 123, + "target_num": 500 + }, + { + "gift_id": 34382, + "gift_img": "https://s1.hdslb.com/bfs/live/3a1cc7ca50da48670d9f7aa6c8d3cd874228f7b0.png", + "gift_name": "礼物星球", + "completed_num": 0, + "target_num": 1 + } + ], + "finished": false, + "ddl_timestamp": 1754236800, + "version": 1754030237877, + "reward_gift": 0, + "reward_gift_img": "", + "reward_gift_name": "", + "level_info": null + } +} +``` + +
+ #### 礼物连击 (COMBO_SEND) **JSON消息:** @@ -2107,7 +2243,7 @@ type===106
查看消息示例: - + ```json { "cmd": "ROOM_REAL_TIME_MESSAGE_UPDATE", @@ -2122,10 +2258,406 @@ type===106
+#### 播放链接刷新 (PLAYURL_RELOAD) + +注: 该cmd通常不提供播放链接。 + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| cmd | str | `PLAYURL_RELOAD` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| reload_option | obj | 刷新选项? | | +| playurl | obj | 播放链接信息 | | + +`data.reload_option` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| reload_stream_name | arr | 空数组? | | +| reload_format | arr | 空数组? | | +| scatter | num | | | + +`data.playurl` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| cid | num | 直播间真实id | | +| g_qn_desc | arr | 画质描述 | | +| stream | arr | 直播流信息 | | +| p2p_data | obj | P2P信息 | | +| dolby_qn | null | dolby画质信息? | | + +`data.playurl.g_qn_desc` 数组: + +| 索引 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| 0 | obj | 首个画质信息 | | +| … | obj | 多个画质信息 | | +| i | obj | 最后画质信息 | | + +`data.playurl.g_qn_desc` 数组中对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| qn | num | 画质代码 | | +| desc | str | 画质描述 | | +| hdr_desc | str | | | +| attr_desc | null | | | +| hdr_type | num | | | +| media_base_desc | null 或 obj | 媒体描述 | + +`data.playurl.g_qn_desc[i].media_base_desc` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| detail_desc | obj | 详细? | | +| brief_desc | obj | 简洁? | | + +`data.playurl.g_qn_desc[i].media_base_desc.detail_desc` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| desc | str | 画质描述 | | +| tag | arr | 画质标签 | 字符串数组,部分画质存在 | + +`data.playurl.g_qn_desc[i].media_base_desc.brief_desc` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| desc | str | 画质描述 | | +| badge | str | 画质描述 | 部分画质存在 | + +`data.stream` 数组中对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| protocol_name | str | 协议名称 | | +| format | arr | 封装格式列表 | | + +`data.stream[i].format` 数组中对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| format_name | str | 视频封装格式名称 | | +| codec | arr | 编码列表 | | +| master_url | str | | | + +`data.stream[i].format[i].codec` 数组中对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| codec_name | str | 视频编码名称 | | +| current_qn | num | 当前画质代码? | | +| accept_qn | arr | 允许的画质代码? | 数字数组 | +| base_url | str | | | +| url_info | arr | | | +| hdr_qn | null | | | +| dolby_type | num | | | +| attr_name | str | | | +| hdr_type | num | | | +| drm | bool | | | +| drm_key_systems | null | | | +| video_codecs | obj | 视频编码信息 | 不一定存在 | +| audio_codecs | obj | 音频编码信息 | 不一定存在 | + +`data.stream[i].format[i].codec[i].video_codecs` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| base | str | 编码格式 | | + +`data.stream[i].format[i].codec[i].audio_codecs` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| base | str | 编码格式 | | + +`data.playurl.p2p_data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| p2p | bool | | | +| p2p_type | num | | | +| m_p2p | bool | | | +| m_servers | null | | | + +**示例:** + +
+查看消息示例: + +```json +{ + "cmd": "PLAYURL_RELOAD", + "data": { + "reload_option": { + "reload_stream_name": [], + "reload_format": [], + "scatter": 3000 + }, + "playurl": { + "cid": 41682, + "g_qn_desc": [ + { + "qn": 30000, + "desc": "杜比", + "hdr_desc": "", + "attr_desc": null, + "hdr_type": 0, + "media_base_desc": null + }, + { + "qn": 20000, + "desc": "4K", + "hdr_desc": "", + "attr_desc": null, + "hdr_type": 0, + "media_base_desc": null + }, + { + "qn": 10000, + "desc": "原画", + "hdr_desc": "", + "attr_desc": null, + "hdr_type": 0, + "media_base_desc": { + "detail_desc": { + "desc": "1080P 原画", + "tag": [ + "高帧率" + ] + }, + "brief_desc": { + "desc": "1080P", + "badge": "原画" + } + } + }, + { + "qn": 400, + "desc": "蓝光", + "hdr_desc": "", + "attr_desc": null, + "hdr_type": 0, + "media_base_desc": null + }, + { + "qn": 250, + "desc": "超清", + "hdr_desc": "", + "attr_desc": null, + "hdr_type": 0, + "media_base_desc": { + "detail_desc": { + "desc": "720P 超清" + }, + "brief_desc": { + "desc": "720P" + } + } + }, + { + "qn": 150, + "desc": "高清", + "hdr_desc": "", + "attr_desc": null, + "hdr_type": 0, + "media_base_desc": null + }, + { + "qn": 80, + "desc": "流畅", + "hdr_desc": "", + "attr_desc": null, + "hdr_type": 0, + "media_base_desc": null + } + ], + "stream": [ + { + "protocol_name": "http_stream", + "format": [ + { + "format_name": "flv", + "codec": [ + { + "codec_name": "avc", + "current_qn": 10000, + "accept_qn": [ + 10000 + ], + "base_url": "", + "url_info": [], + "hdr_qn": null, + "dolby_type": 0, + "attr_name": "", + "hdr_type": 0, + "drm": false, + "drm_key_systems": null, + "video_codecs": { + "base": "avc1.64002a" + }, + "audio_codecs": { + "base": "mp4a.40.2" + } + }, + { + "codec_name": "hevc", + "current_qn": 250, + "accept_qn": [ + 250 + ], + "base_url": "", + "url_info": [], + "hdr_qn": null, + "dolby_type": 0, + "attr_name": "", + "hdr_type": 0, + "drm": false, + "drm_key_systems": null, + "video_codecs": { + "base": "hvc1.1.6.L120" + }, + "audio_codecs": { + "base": "mp4a.40.2" + } + } + ], + "master_url": "" + } + ] + }, + { + "protocol_name": "http_hls", + "format": [ + { + "format_name": "ts", + "codec": [ + { + "codec_name": "avc", + "current_qn": 10000, + "accept_qn": [ + 10000 + ], + "base_url": "", + "url_info": [], + "hdr_qn": null, + "dolby_type": 0, + "attr_name": "", + "hdr_type": 0, + "drm": false, + "drm_key_systems": null, + "video_codecs": { + "base": "avc1.64002a" + }, + "audio_codecs": { + "base": "mp4a.40.2" + } + }, + { + "codec_name": "hevc", + "current_qn": 250, + "accept_qn": [ + 250 + ], + "base_url": "", + "url_info": [], + "hdr_qn": null, + "dolby_type": 0, + "attr_name": "", + "hdr_type": 0, + "drm": false, + "drm_key_systems": null, + "video_codecs": { + "base": "hvc1.1.6.L120" + }, + "audio_codecs": { + "base": "mp4a.40.2" + } + } + ], + "master_url": "" + }, + { + "format_name": "fmp4", + "codec": [ + { + "codec_name": "avc", + "current_qn": 10000, + "accept_qn": [ + 10000 + ], + "base_url": "", + "url_info": [], + "hdr_qn": null, + "dolby_type": 0, + "attr_name": "", + "hdr_type": 0, + "drm": false, + "drm_key_systems": null, + "video_codecs": { + "base": "avc1.64002a" + }, + "audio_codecs": { + "base": "mp4a.40.2" + } + }, + { + "codec_name": "hevc", + "current_qn": 250, + "accept_qn": [ + 250 + ], + "base_url": "", + "url_info": [], + "hdr_qn": null, + "dolby_type": 0, + "attr_name": "", + "hdr_type": 0, + "drm": false, + "drm_key_systems": null, + "video_codecs": { + "base": "hvc1.1.6.L120" + }, + "audio_codecs": { + "base": "mp4a.40.2" + } + } + ], + "master_url": "" + } + ] + } + ], + "p2p_data": { + "p2p": false, + "p2p_type": 0, + "m_p2p": false, + "m_servers": null + }, + "dolby_qn": null + } + } +} +``` + +
+ #### 直播间高能榜 (ONLINE_RANK_V2) 注: 直播间高能用户数据刷新 +在线榜已被 `ONLINE_RANK_V3` 替换 + **JSON消息:** 根对象: @@ -2140,7 +2672,7 @@ type===106 | 字段 | 类型 | 内容 | 备注 | | ---- | ---- | ------ | --------- | | list | array | 在直播间高能用户中的用户信息 | | -| rank_type | str | 待调查 | | +| rank_type | str | 榜单类型 | | `data.list[n]` 对象: @@ -2152,6 +2684,8 @@ type===106 | uname | str | 用户名称 | | | rank | num | 该用户在高能榜中的排名 | | | guard_level | num | 大航海等级? | | +| is_mystery | bool | | | +| uinfo | obj | 用户信息 | | **示例:** @@ -2195,6 +2729,45 @@ type===106 +#### 直播间高能榜V3 (ONLINE_RANK_V3) + +注: 直播间高能用户数据刷新 + +替换 `ONLINE_RANK_V2` + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| cmd | str | `ONLINE_RANK_V3` | | +| data | obj | 数据本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| pb | str | 使用 base64 编码 protobuf 后的数据 | 解析后数据基本与`ONLINE_RANK_V2`的`data`相同 | + +用于解析protobuf数据的proto文件: [#1332(comment)](https://github.com/SocialSisterYi/bilibili-API-collect/issues/1332#issuecomment-3055621742) + +**示例:** + +
+查看消息示例: + +```json +{ + "cmd": "ONLINE_RANK_V3", + "data": { + "pb": "CgtvbmxpbmVfcmFuaxqqAwi8jscKEkpodHRwczovL2kyLmhkc2xiLmNvbS9iZnMvZmFjZS9iODM3MGMzMGM3ZDg5NDg4YjRjOWYyNWZmMTgyNjc4OTEyYTRiOTA3LmpwZxoCMTIiDOW4jOWwlOWonOWonCgBMAFCwAIIvI7HChKfAgoM5biM5bCU5aic5aicEkpodHRwczovL2kyLmhkc2xiLmNvbS9iZnMvZmFjZS9iODM3MGMzMGM3ZDg5NDg4YjRjOWYyNWZmMTgyNjc4OTEyYTRiOTA3LmpwZypaCgzluIzlsJTlqJzlqJwSSmh0dHBzOi8vaTIuaGRzbGIuY29tL2Jmcy9mYWNlL2I4MzcwYzMwYzdkODk0ODhiNGM5ZjI1ZmYxODI2Nzg5MTJhNGI5MDcuanBnMloKDOW4jOWwlOWonOWonBJKaHR0cHM6Ly9pMi5oZHNsYi5jb20vYmZzL2ZhY2UvYjgzNzBjMzBjN2Q4OTQ4OGI0YzlmMjVmZjE4MjY3ODkxMmE0YjkwNy5qcGc6CyD///////////8BMhcIARITMjAyNS0wNy0yOSAyMzo1OTo1ORrNAwjnyMIDEkpodHRwczovL2kxLmhkc2xiLmNvbS9iZnMvZmFjZS9mZWNhYTQ3ZTQ2ODljOWVmYTg0MzBiNmViNzRmNTM2ZTMxN2ZmODYwLmpwZxoBOCIV5byl6IC26IC26IC26IC26IC26IC2KAIwAkLbAgjnyMIDEroCChXlvKXogLbogLbogLbogLbogLbogLYSSmh0dHBzOi8vaTEuaGRzbGIuY29tL2Jmcy9mYWNlL2ZlY2FhNDdlNDY4OWM5ZWZhODQzMGI2ZWI3NGY1MzZlMzE3ZmY4NjAuanBnKmMKFeW8peiAtuiAtuiAtuiAtuiAtuiAthJKaHR0cHM6Ly9pMS5oZHNsYi5jb20vYmZzL2ZhY2UvZmVjYWE0N2U0Njg5YzllZmE4NDMwYjZlYjc0ZjUzNmUzMTdmZjg2MC5qcGcyYwoV5byl6IC26IC26IC26IC26IC26IC2EkpodHRwczovL2kxLmhkc2xiLmNvbS9iZnMvZmFjZS9mZWNhYTQ3ZTQ2ODljOWVmYTg0MzBiNmViNzRmNTM2ZTMxN2ZmODYwLmpwZzoLIP///////////wEyFwgCEhMyMDI1LTA4LTAzIDIzOjU5OjU5GvUDCMTF4wQSS2h0dHBzOi8vaTEuaGRzbGIuY29tL2Jmcy9mYWNlLzcxMmMzNjExMzg1ZTJlMGRjYmU4MDc2YmRkM2ViNmYwZWNjNmZkYWYud2VicBoBNiIe5oKg5ZOJ55qE6buR5ZCs5aSn546L5aSq5Zuw6L69KAMwA0L5AgjExeMEEtgCCh7mgqDlk4nnmoTpu5HlkKzlpKfnjovlpKrlm7Dovr0SS2h0dHBzOi8vaTEuaGRzbGIuY29tL2Jmcy9mYWNlLzcxMmMzNjExMzg1ZTJlMGRjYmU4MDc2YmRkM2ViNmYwZWNjNmZkYWYud2VicCptCh7mgqDlk4nnmoTpu5HlkKzlpKfnjovlpKrlm7Dovr0SS2h0dHBzOi8vaTEuaGRzbGIuY29tL2Jmcy9mYWNlLzcxMmMzNjExMzg1ZTJlMGRjYmU4MDc2YmRkM2ViNmYwZWNjNmZkYWYud2VicDJtCh7mgqDlk4nnmoTpu5HlkKzlpKfnjovlpKrlm7Dovr0SS2h0dHBzOi8vaTEuaGRzbGIuY29tL2Jmcy9mYWNlLzcxMmMzNjExMzg1ZTJlMGRjYmU4MDc2YmRkM2ViNmYwZWNjNmZkYWYud2VicDoLIP///////////wEyFwgDEhMyMDI1LTA3LTI2IDIzOjU5OjU5GtkDCLzSxwkSSmh0dHBzOi8vaTEuaGRzbGIuY29tL2Jmcy9mYWNlLzAyMGYxOWEwNTNjZDBkNGZjNGMyYmQzOTlmYWNjMTk3YWJiZWY5N2EuanBnGgE2IhjmuLjmiYvlpb3pl7LnmoTmtYXogIHluIgoBDADQuQCCLzSxwkSwwIKGOa4uOaJi+WlvemXsueahOa1heiAgeW4iBJKaHR0cHM6Ly9pMS5oZHNsYi5jb20vYmZzL2ZhY2UvMDIwZjE5YTA1M2NkMGQ0ZmM0YzJiZDM5OWZhY2MxOTdhYmJlZjk3YS5qcGcqZgoY5ri45omL5aW96Zey55qE5rWF6ICB5biIEkpodHRwczovL2kxLmhkc2xiLmNvbS9iZnMvZmFjZS8wMjBmMTlhMDUzY2QwZDRmYzRjMmJkMzk5ZmFjYzE5N2FiYmVmOTdhLmpwZzJmChjmuLjmiYvlpb3pl7LnmoTmtYXogIHluIgSSmh0dHBzOi8vaTEuaGRzbGIuY29tL2Jmcy9mYWNlLzAyMGYxOWEwNTNjZDBkNGZjNGMyYmQzOTlmYWNjMTk3YWJiZWY5N2EuanBnOgsg////////////ATIXCAMSEzIwMjUtMDgtMDQgMjM6NTk6NTkakAMIp9P+CRJKaHR0cHM6Ly9pMS5oZHNsYi5jb20vYmZzL2ZhY2UvZTJkYmM4ZTQ5NzA3NzFiNjlhNWEyYzYzMDI0YTg5NzhjMjc3YWNmMi5qcGcaATYiDOmaj+WFieaykOW9sSgFQqkCCKfT/gkSnwIKDOmaj+WFieaykOW9sRJKaHR0cHM6Ly9pMS5oZHNsYi5jb20vYmZzL2ZhY2UvZTJkYmM4ZTQ5NzA3NzFiNjlhNWEyYzYzMDI0YTg5NzhjMjc3YWNmMi5qcGcqWgoM6ZqP5YWJ5rKQ5b2xEkpodHRwczovL2kxLmhkc2xiLmNvbS9iZnMvZmFjZS9lMmRiYzhlNDk3MDc3MWI2OWE1YTJjNjMwMjRhODk3OGMyNzdhY2YyLmpwZzJaCgzpmo/lhYnmspDlvbESSmh0dHBzOi8vaTEuaGRzbGIuY29tL2Jmcy9mYWNlL2UyZGJjOGU0OTcwNzcxYjY5YTVhMmM2MzAyNGE4OTc4YzI3N2FjZjIuanBnOgsg////////////ATIAGrYDCPWvn4sBEkpodHRwczovL2kxLmhkc2xiLmNvbS9iZnMvZmFjZS80ZTNkYTdmYWJiOWZlMTkyNzRhYmQ0ZTdlYWMyNmQ3MjI4OGQyNmEwLmpwZxoBNiIV5pKS5qyi5YS/55qE5rCU5rOh5YS/KAZCxQII9a+fiwESugIKFeaSkuasouWEv+eahOawlOazoeWEvxJKaHR0cHM6Ly9pMS5oZHNsYi5jb20vYmZzL2ZhY2UvNGUzZGE3ZmFiYjlmZTE5Mjc0YWJkNGU3ZWFjMjZkNzIyODhkMjZhMC5qcGcqYwoV5pKS5qyi5YS/55qE5rCU5rOh5YS/EkpodHRwczovL2kxLmhkc2xiLmNvbS9iZnMvZmFjZS80ZTNkYTdmYWJiOWZlMTkyNzRhYmQ0ZTdlYWMyNmQ3MjI4OGQyNmEwLmpwZzJjChXmkpLmrKLlhL/nmoTmsJTms6HlhL8SSmh0dHBzOi8vaTEuaGRzbGIuY29tL2Jmcy9mYWNlLzRlM2RhN2ZhYmI5ZmUxOTI3NGFiZDRlN2VhYzI2ZDcyMjg4ZDI2YTAuanBnOgsg////////////ATIAGusDCPTXwbEBEkpodHRwczovL2kxLmhkc2xiLmNvbS9iZnMvZmFjZS8yN2RiOGQ5MTY3ZDRhMmUyMDg0NjUzNDJkOGVmZjQzZWUzMGJiOGNlLmpwZxoBNiIc57OW5b+D6JuL6JuLLeWNg+WNg+azoue6r+WGoCgHMANC8QII9NfBsQESzwIKHOezluW/g+ibi+ibiy3ljYPljYPms6Lnuq/lhqASSmh0dHBzOi8vaTEuaGRzbGIuY29tL2Jmcy9mYWNlLzI3ZGI4ZDkxNjdkNGEyZTIwODQ2NTM0MmQ4ZWZmNDNlZTMwYmI4Y2UuanBnKmoKHOezluW/g+ibi+ibiy3ljYPljYPms6Lnuq/lhqASSmh0dHBzOi8vaTEuaGRzbGIuY29tL2Jmcy9mYWNlLzI3ZGI4ZDkxNjdkNGEyZTIwODQ2NTM0MmQ4ZWZmNDNlZTMwYmI4Y2UuanBnMmoKHOezluW/g+ibi+ibiy3ljYPljYPms6Lnuq/lhqASSmh0dHBzOi8vaTEuaGRzbGIuY29tL2Jmcy9mYWNlLzI3ZGI4ZDkxNjdkNGEyZTIwODQ2NTM0MmQ4ZWZmNDNlZTMwYmI4Y2UuanBnOgsg////////////ATIXCAMSEzIwMjUtMDctMjUgMjM6NTk6NTk=" + } +} +``` + +
+ #### 直播间高能用户数量 (ONLINE_RANK_COUNT) **JSON消息:** @@ -2210,19 +2783,25 @@ type===106 | 字段 | 类型 | 内容 | 备注 | | ---- | ---- | ------ | --------- | -| count | num | 直播间高能用户数量 | | +| count | num | 直播间高能用户数量 | 存在上限 | +| count_text | str | 直播间高能用户数量文本 | | +| online_count | num | 直播间在线用户数量 | 存在上限 | +| online_count_text | str | 直播间在线用户数量文本 | | **示例:**
查看消息示例: - + ```json { - "cmd": "ONLINE_RANK_COUNT", - "data": { - "count": 4 - } + "cmd": "ONLINE_RANK_COUNT", + "data": { + "count": 1084, + "count_text": "1084", + "online_count": 1084, + "online_count_text": "1084" + } } ``` @@ -2296,7 +2875,7 @@ type===106
查看消息示例: - + ```json { "cmd": "ONLINE_RANK_TOP3", @@ -2339,7 +2918,7 @@ type===106
查看消息示例: - + ```json { "cmd": "POPULAR_RANK_CHANGED", @@ -2577,7 +3156,7 @@ type===106
查看消息示例: - + ```json { "cmd": "LIKE_INFO_V3_CLICK", @@ -2638,7 +3217,7 @@ type===106
查看消息示例: - + ```json { "cmd": "LIKE_INFO_V3_UPDATE", @@ -2688,7 +3267,7 @@ type===106 | wait_num | num | 待调查 | | `data.awards[n]` 对象: - + | 字段 | 类型 | 内容 | 备注 | | ---------- | --- | ------ | --------- | | gift_id | num | 礼物ID | | @@ -2782,7 +3361,7 @@ type===106
查看消息示例: - + ```json { "cmd": "POPULARITY_RED_POCKET_NEW", @@ -2873,10 +3452,10 @@ type===106 | award_pic | str | 礼物图标 URL | | | award_big_pic | str | 礼物大图 URL | | | award_price | num | 礼物价值 | | - +
查看消息示例: - + ```json { "cmd": "POPULARITY_RED_POCKET_WINNER_LIST", @@ -2961,7 +3540,7 @@ type===106
查看消息示例: - + ```json { "cmd": "WATCHED_CHANGE", @@ -3032,7 +3611,7 @@ type===106
查看消息示例: - + ```json { "cmd": "ENTRY_EFFECT", @@ -3275,7 +3854,7 @@ type===106
查看消息示例: - + ```json { "cmd": "AREA_RANK_CHANGED", @@ -3317,19 +3896,28 @@ type===106 | ---------- | --- | ------ | --------- | | biz_id | num | 待调查 | | | content_segments | array | 文本分段 | | -| danmaku_style | obj | 文本样式信息 | | +| danmaku_style | obj | 文本样式信息 | 可能不存在 | | danmaku_url | str | 待调查 | | | dmscore | num | 待调查 | | -| terminals | array | 待调查 | | +| terminals | array | 指定显示的终端 | 数字数组 | `data.content_segments[n]` 数组中的对象 | 字段 | 类型 | 内容 | 备注 | | ---------- | --- | ------ | --------- | -| font_color | str | text 字段的十六进制颜色值 | | -| font_color_dark | str | text 字段的十六进制颜色值 | APP端设置为深色模式时使用 | -| text | str | 文本 | | -| type | num | 待调查 | | +| background_color | arr 或 null | 背景颜色? | 字符串数组,可能不存在 | +| background_color_dark | arr 或 null | 深色模式背景颜色? | 可能不存在 | +| font_bold | bool | text 字段是否加粗? | 可能不存在 | +| font_color | str | text 字段的十六进制颜色值 | | +| font_color_dark | str | text 字段的十六进制颜色值 | APP端设置为深色模式时使用,可能不存在 | +| highlight_font_color | str | text 字段高亮部分的十六进制颜色值? | 可能不存在 | +| highlight_font_color_dark | str | text 字段高亮部分的十六进制颜色值? | 深色模式时使用,可能不存在 | +| img_height | num | 图片高度 | 可能不存在 | +| img_url | str | 图片链接 | 可能不存在 | +| img_width | str | 图片宽度 | 可能不存在 | +| text | str | 文本 | | +| type | num | 文本组件类型 | 1:普通文本
2:图片
3:链接 | +| uri | str | 链接 | 文本组件类型为 `3` 时存在 | `data.danmaku_style` 对象: @@ -3400,6 +3988,59 @@ type===106 } ``` +```json +{ + "cmd": "COMMON_NOTICE_DANMAKU", + "data": { + "content_segments": [ + { + "background_color": null, + "background_color_dark": null, + "font_bold": false, + "font_color": "#F294AE", + "font_color_dark": "", + "highlight_font_color": "", + "highlight_font_color_dark": "", + "img_height": 0, + "img_url": "", + "img_width": 0, + "text": "疯狂星期五:疯狂任务今日24点结束,请关注任务完成情况~", + "type": 1 + }, + { + "background_color": [ + "#FA729A" + ], + "background_color_dark": null, + "font_bold": false, + "font_color": "#FFFFFF", + "font_color_dark": "", + "highlight_font_color": "", + "highlight_font_color_dark": "", + "img_height": 0, + "img_url": "", + "img_width": 0, + "text": "立即查看", + "type": 3, + "uri": "https://live.bilibili.com/p/html/bilili-page-gift-intro-container/index.html?is_live_half_webview=1&hybrid_rotate_d=1&hybrid_half_ui=1,3,100p,70p,0,0,30,100,12;2,2,375,100p,0,0,30,100,0;3,3,100p,544,0,0,30,100,12;4,2,375,100p,0,0,30,100,0;5,3,100p,70p,0,0,30,100,0;6,3,100p,70p,0,0,30,100,0;7,3,100p,70p,0,0,30,100,0;8,3,100p,70p,0,0,30,100,0&gift_id=32251&roomId=6154037&anchorId=194484313&sendTargetUid=194484313&active_tab=1" + } + ], + "danmaku_style": { + "background_color": null, + "background_color_dark": null + }, + "dmscore": 1008, + "terminals": [ + 1, + 2, + 3, + 4, + 5 + ] + } +} +``` +
#### 直播间信息更改 (ROOM_CHANGE) @@ -3602,7 +4243,7 @@ type===106
查看消息示例: - + ```json { "cmd": "WIDGET_BANNER", @@ -3872,7 +4513,7 @@ type===106
查看消息示例: - + ```json { "cmd": "STOP_LIVE_ROOM_LIST", @@ -4529,8 +5170,8 @@ type===106 ```json { - cmd: "ROOM_ADMINS", - uids: [ 898424, 384203692, 1309513, 30816752, 23931549, 223134 ] + "cmd": "ROOM_ADMINS", + "uids": [ 898424, 384203692, 1309513, 30816752, 23931549, 223134 ] } ``` @@ -4596,6 +5237,461 @@ type===106
+#### 多个直播视角信息 (LIVE_MULTI_VIEW_NEW_INFO) + +部分活动直播间会下发。 + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| cmd | str | `LIVE_MULTI_VIEW_NEW_INFO` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| title | str | 活动标题 | 活动结束后为`""` | +| room_id | num | 主直播间id | 活动结束后为`0` | +| copy_writing | str | 提示文本 | 活动结束后为`""` | +| bg_image | str | 背景图片 | 活动结束后为`""` | +| sub_slt_color | str | 切换按钮颜色? | 活动结束后为`""` | +| sub_bg_color | str | 切换按钮背景颜色? | 活动结束后为`""` | +| sub_text_color | str | 切换按钮文本颜色? | 活动结束后为`""` | +| view_type | num | | | +| room_list | arr | 房间列表 | 不包括“未直播”状态的直播间,活动结束后为`null` | +| relation_view | arr | 详细关系? | 不包括“未直播”状态的直播间,活动结束后为`null` | +| view_pattern | num | | | +| gather_room_list | arr | 空数组? | 活动结束后为`null` | + +`data.room_list` 数组中对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| order_id | num | 顺序id | | +| room_id | num | 直播间id | 似乎是长号 | +| room_name | str | 主播名称 | | +| live_status | num | 直播状态 | 1:直播中
2:轮播中 | +| jump_url | str | 加入直播间的链接 | | + +`data.relation_view` 数组中对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| order_id | num | 顺序id | | +| view_type | num | | | +| view_id | num | 直播间id | | +| view_name | str | 主播名称 | | +| title | str | 直播间标题 | | +| cover | str | 直播间封面 | | +| jump_url | str | 加入直播间的链接 | | +| switch | bool | | | +| num | num | 看过人数 | | +| watch_icon | str | 看过图标 | | +| live_status | num | 直播状态 | 同`data.room_list[i].live_status` | +| text_small | str | 看过人数文本 | | +| use_view_vt | bool | | | +| anchor_face | str | 主播头像 | | +| match_live_room | bool | | | +| match_info | null | | | +| duration | num | | | +| up_name | str | `""` | | +| pub_date | str | | | +| gather_id | num | | | +| sub_name | str | | | + +**示例:** + +
+查看响应示例: + +```json +{ + "cmd": "LIVE_MULTI_VIEW_NEW_INFO", + "data": { + "title": "战地风云6公开测试", + "room_id": 5050, + "copy_writing": "更多视角", + "bg_image": "https://i0.hdslb.com/bfs/live/edaa9477a1d8325dd0c36c419b6fd5f9646b2419.png", + "sub_slt_color": "#FFFFFF", + "sub_bg_color": "#333333", + "sub_text_color": "#FFFFFF", + "view_type": 0, + "room_list": [ + { + "order_id": 2, + "room_id": 6154037, + "room_name": "Asaki大人", + "live_status": 2, + "jump_url": "https://live.bilibili.com/6154037?broadcast_type=0&is_room_feed=1&live_from=28022" + }, + { + "order_id": 4, + "room_id": 1521765, + "room_name": "南云鸟羽", + "live_status": 1, + "jump_url": "https://live.bilibili.com/1521765?broadcast_type=0&is_room_feed=1&live_from=28022" + }, + { + "order_id": 8, + "room_id": 24065, + "room_name": "闻香识", + "live_status": 1, + "jump_url": "https://live.bilibili.com/24065?broadcast_type=0&is_room_feed=1&live_from=28022" + }, + { + "order_id": 14, + "room_id": 38528, + "room_name": "乔伊奥斯托雷", + "live_status": 1, + "jump_url": "https://live.bilibili.com/38528?broadcast_type=0&is_room_feed=1&live_from=28022" + }, + { + "order_id": 15, + "room_id": 21263282, + "room_name": "Yommyko", + "live_status": 2, + "jump_url": "https://live.bilibili.com/21263282?broadcast_type=0&is_room_feed=1&live_from=28022" + }, + { + "order_id": 16, + "room_id": 5513659, + "room_name": "狙佬-zuener", + "live_status": 1, + "jump_url": "https://live.bilibili.com/5513659?broadcast_type=0&is_room_feed=1&live_from=28022" + }, + { + "order_id": 18, + "room_id": 146007, + "room_name": "Kisflow", + "live_status": 1, + "jump_url": "https://live.bilibili.com/146007?broadcast_type=0&is_room_feed=1&live_from=28022" + }, + { + "order_id": 19, + "room_id": 1163043, + "room_name": "人形鹿头自走炮", + "live_status": 1, + "jump_url": "https://live.bilibili.com/1163043?broadcast_type=0&is_room_feed=1&live_from=28022" + }, + { + "order_id": 20, + "room_id": 3343118, + "room_name": "版尤黑紫", + "live_status": 1, + "jump_url": "https://live.bilibili.com/3343118?broadcast_type=0&is_room_feed=1&live_from=28022" + }, + { + "order_id": 21, + "room_id": 25212992, + "room_name": "贝施汀", + "live_status": 1, + "jump_url": "https://live.bilibili.com/25212992?broadcast_type=0&is_room_feed=1&live_from=28022" + }, + { + "order_id": 22, + "room_id": 11313, + "room_name": "丧心病狂的魔笑", + "live_status": 1, + "jump_url": "https://live.bilibili.com/11313?broadcast_type=0&is_room_feed=1&live_from=28022" + }, + { + "order_id": 24, + "room_id": 902302, + "room_name": "LF叶绿", + "live_status": 1, + "jump_url": "https://live.bilibili.com/902302?broadcast_type=0&is_room_feed=1&live_from=28022" + } + ], + "relation_view": [ + { + "order_id": 2, + "view_type": 0, + "view_id": 6154037, + "view_name": "Asaki大人", + "title": "猪猪猪", + "cover": "https://i0.hdslb.com/bfs/live/new_room_cover/87e0332a5c3c8cd73fa7616045111b90b0199087.jpg", + "jump_url": "https://live.bilibili.com/6154037?broadcast_type=0&is_room_feed=1&live_from=28022", + "switch": true, + "num": 2305, + "watch_icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png", + "live_status": 2, + "text_small": "2305", + "use_view_vt": false, + "anchor_face": "https://i1.hdslb.com/bfs/face/84a861facfa041b46f7a30897e9ed3f2e05e0519.jpg", + "match_live_room": false, + "match_info": null, + "duration": 0, + "up_name": "", + "pub_date": "", + "gather_id": 0, + "sub_name": "" + }, + { + "order_id": 4, + "view_type": 0, + "view_id": 1521765, + "view_name": "南云鸟羽", + "title": "【战地6B测】下午四点开!聊天摸鱼", + "cover": "https://i0.hdslb.com/bfs/live/new_room_cover/a8216e0b5469949fcbcc72458c7955b562838a89.jpg", + "jump_url": "https://live.bilibili.com/1521765?broadcast_type=0&is_room_feed=1&live_from=28022", + "switch": true, + "num": 36987, + "watch_icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png", + "live_status": 1, + "text_small": "3.6万", + "use_view_vt": false, + "anchor_face": "https://i1.hdslb.com/bfs/face/f4744b6346ddaccb4642a0f05f25d798fb5d8474.jpg", + "match_live_room": false, + "match_info": null, + "duration": 0, + "up_name": "", + "pub_date": "", + "gather_id": 0, + "sub_name": "" + }, + { + "order_id": 8, + "view_type": 0, + "view_id": 24065, + "view_name": "闻香识", + "title": "4点战地6!!", + "cover": "https://i0.hdslb.com/bfs/live/new_room_cover/6e309306fcb7bdeeb5e72f8b4c2d1ed7ba7e1e29.jpg", + "jump_url": "https://live.bilibili.com/24065?broadcast_type=0&is_room_feed=1&live_from=28022", + "switch": true, + "num": 32408, + "watch_icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png", + "live_status": 1, + "text_small": "3.2万", + "use_view_vt": false, + "anchor_face": "https://i0.hdslb.com/bfs/face/df21869b067816e03c517bc774f6ebf5a86563de.jpg", + "match_live_room": false, + "match_info": null, + "duration": 0, + "up_name": "", + "pub_date": "", + "gather_id": 0, + "sub_name": "" + }, + { + "order_id": 14, + "view_type": 0, + "view_id": 38528, + "view_name": "乔伊奥斯托雷", + "title": "[战地六B测]捞薯条,吃薯条,谁是薯条?", + "cover": "https://i0.hdslb.com/bfs/live/new_room_cover/a89ebcd8b4f3e841ddb7cb53fbdc6013a9956013.jpg", + "jump_url": "https://live.bilibili.com/38528?broadcast_type=0&is_room_feed=1&live_from=28022", + "switch": true, + "num": 3660, + "watch_icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png", + "live_status": 1, + "text_small": "3660", + "use_view_vt": false, + "anchor_face": "https://i1.hdslb.com/bfs/face/82ef4b09c26751649da2a48960d23fd87baa6db5.jpg", + "match_live_room": false, + "match_info": null, + "duration": 0, + "up_name": "", + "pub_date": "", + "gather_id": 0, + "sub_name": "" + }, + { + "order_id": 15, + "view_type": 0, + "view_id": 21263282, + "view_name": "Yommyko", + "title": "和广东双马尾搏斗!禁闭求生2", + "cover": "https://i0.hdslb.com/bfs/live/new_room_cover/86ac43cf0c1db277b92a5e83324558ceab2bb108.jpg", + "jump_url": "https://live.bilibili.com/21263282?broadcast_type=0&is_room_feed=1&live_from=28022", + "switch": true, + "num": 1583, + "watch_icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png", + "live_status": 2, + "text_small": "1583", + "use_view_vt": false, + "anchor_face": "https://i2.hdslb.com/bfs/face/9718e4c59c2cfcc9f8b747ad8ea5006fad78a76a.jpg", + "match_live_room": false, + "match_info": null, + "duration": 0, + "up_name": "", + "pub_date": "", + "gather_id": 0, + "sub_name": "" + }, + { + "order_id": 16, + "view_type": 0, + "view_id": 5513659, + "view_name": "狙佬-zuener", + "title": "战地6!开玩!七年之约已到!", + "cover": "https://i0.hdslb.com/bfs/live/new_room_cover/b1779156686031460633d31362205456d1bb53df.jpg", + "jump_url": "https://live.bilibili.com/5513659?broadcast_type=0&is_room_feed=1&live_from=28022", + "switch": true, + "num": 30035, + "watch_icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png", + "live_status": 1, + "text_small": "3.0万", + "use_view_vt": false, + "anchor_face": "https://i0.hdslb.com/bfs/face/bdb4b214d3446aca7c11b408ae6f35c89f52a5cc.jpg", + "match_live_room": false, + "match_info": null, + "duration": 0, + "up_name": "", + "pub_date": "", + "gather_id": 0, + "sub_name": "" + }, + { + "order_id": 18, + "view_type": 0, + "view_id": 146007, + "view_name": "Kisflow", + "title": "战地6 BETA 战场老登职业哥", + "cover": "https://i0.hdslb.com/bfs/live/new_room_cover/0007988a93c06215f0ffd96f7a4e3834d1396408.jpg", + "jump_url": "https://live.bilibili.com/146007?broadcast_type=0&is_room_feed=1&live_from=28022", + "switch": true, + "num": 7839, + "watch_icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png", + "live_status": 1, + "text_small": "7839", + "use_view_vt": false, + "anchor_face": "https://i1.hdslb.com/bfs/face/5761dbf3f03b1a31ad8a6aec01452c97e93c16c0.jpg", + "match_live_room": false, + "match_info": null, + "duration": 0, + "up_name": "", + "pub_date": "", + "gather_id": 0, + "sub_name": "" + }, + { + "order_id": 19, + "view_type": 0, + "view_id": 1163043, + "view_name": "人形鹿头自走炮", + "title": "神秘远光84男", + "cover": "https://i0.hdslb.com/bfs/live/new_room_cover/cea622fe174d8c3fd26e58ea5a7e3b709fd8aee4.jpg", + "jump_url": "https://live.bilibili.com/1163043?broadcast_type=0&is_room_feed=1&live_from=28022", + "switch": true, + "num": 20796, + "watch_icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png", + "live_status": 1, + "text_small": "2.0万", + "use_view_vt": false, + "anchor_face": "https://i2.hdslb.com/bfs/face/259c1f3b485ad5e2182446246fccb87114701ed8.jpg", + "match_live_room": false, + "match_info": null, + "duration": 0, + "up_name": "", + "pub_date": "", + "gather_id": 0, + "sub_name": "" + }, + { + "order_id": 20, + "view_type": 0, + "view_id": 3343118, + "view_name": "版尤黑紫", + "title": "爽玩!战地6B测", + "cover": "https://i0.hdslb.com/bfs/live/user_cover/039be5f223d26d4108941f1f056ee5842e3e5720.jpg", + "jump_url": "https://live.bilibili.com/3343118?broadcast_type=0&is_room_feed=1&live_from=28022", + "switch": true, + "num": 1704, + "watch_icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png", + "live_status": 1, + "text_small": "1704", + "use_view_vt": false, + "anchor_face": "https://i2.hdslb.com/bfs/face/3cdcbc8945d18575279ac55c75f4da9f0a7dbc9e.jpg", + "match_live_room": false, + "match_info": null, + "duration": 0, + "up_name": "", + "pub_date": "", + "gather_id": 0, + "sub_name": "" + }, + { + "order_id": 21, + "view_type": 0, + "view_id": 25212992, + "view_name": "贝施汀", + "title": "战地6还没开服,先直播剪会儿视频聊聊天", + "cover": "https://i0.hdslb.com/bfs/live/new_room_cover/fb0227b71dca8555588c9c6c0af329cf250123a9.jpg", + "jump_url": "https://live.bilibili.com/25212992?broadcast_type=0&is_room_feed=1&live_from=28022", + "switch": true, + "num": 2207, + "watch_icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png", + "live_status": 1, + "text_small": "2207", + "use_view_vt": false, + "anchor_face": "https://i0.hdslb.com/bfs/face/7242e856562166a27e8be4a184e4cddbaed8177f.jpg", + "match_live_room": false, + "match_info": null, + "duration": 0, + "up_name": "", + "pub_date": "", + "gather_id": 0, + "sub_name": "" + }, + { + "order_id": 22, + "view_type": 0, + "view_id": 11313, + "view_name": "丧心病狂的魔笑", + "title": "等待测试开启!但是先直播周边开箱!", + "cover": "https://i0.hdslb.com/bfs/live/new_room_cover/48fb912da0f665427eb230ef3273defdb1a33fa4.jpg", + "jump_url": "https://live.bilibili.com/11313?broadcast_type=0&is_room_feed=1&live_from=28022", + "switch": true, + "num": 2924, + "watch_icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png", + "live_status": 1, + "text_small": "2924", + "use_view_vt": false, + "anchor_face": "https://i2.hdslb.com/bfs/face/e672848bc2718b79ca2f44eb447e84282c6f806d.jpg", + "match_live_room": false, + "match_info": null, + "duration": 0, + "up_name": "", + "pub_date": "", + "gather_id": 0, + "sub_name": "" + }, + { + "order_id": 24, + "view_type": 0, + "view_id": 902302, + "view_name": "LF叶绿", + "title": "《田 野 打 架 6》", + "cover": "https://i0.hdslb.com/bfs/live/new_room_cover/3b18086f9e70f719917c5d4561c25defdd13cd82.jpg", + "jump_url": "https://live.bilibili.com/902302?broadcast_type=0&is_room_feed=1&live_from=28022", + "switch": true, + "num": 1897, + "watch_icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png", + "live_status": 1, + "text_small": "1897", + "use_view_vt": false, + "anchor_face": "https://i2.hdslb.com/bfs/face/5e3570095f5af77d20188ea45d45da216a31e52d.jpg", + "match_live_room": false, + "match_info": null, + "duration": 0, + "up_name": "", + "pub_date": "", + "gather_id": 0, + "sub_name": "" + } + ], + "view_pattern": 1, + "gather_room_list": [] + } +} +``` + +
+ #### 天选时刻合法检查 (ANCHOR_LOT_CHECKSTATUS) **示例:** @@ -4904,6 +6000,682 @@ type===106
+#### 连线礼物信息 (UNIVERSAL_EVENT_GIFT) + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| cmd | str | `UNIVERSAL_EVENT_GIFT` | | +| data | obj | 信息本体 | | +| msg_id | str | | | +| p_is_ack | bool | | | +| p_msg_type | num | | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| anchor_uid | num | 主播uid | | +| info | obj | 连线信息 | | +| room_id | num | 直播间id | | + +`data.info` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| biz_session_id | str | 连线会话id? | | +| business_label | str | | | +| interact_channel_id | str | 频道id? | | +| interact_connect_type | num | | | +| interact_max_users | num | 最大连线数? | | +| interact_mode | obj | | | +| interact_template | obj | 展示模板 | | +| invoking_time | num | | | +| members | arr | 连线成员 | 参见 `UNIVERSAL_EVENT_GIFT_V2` 的 `data.members` ,缺少部分字段 | +| members_version | num | | | +| multi_conn_info | obj | 连线信息 | | +| room_owner | num | 发起者uid | | +| room_start_at | str | | | +| room_start_at_ts | num | | | +| room_status | num | | | +| session_start_at | str | | | +| session_start_at_ts | num | | | +| session_status | num | | | +| system_time_unix | num | 服务器时间戳 | Unix 秒时间戳 | +| trace_id | str | | | +| version | num | 数据版本 | Unix 毫秒时间戳 | + +`data.info.interact_mode` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| apply_timeout | num | 超时? | | +| interact_mode_type | num | | | +| invite_timeout | num | 邀请超时? | | +| join_types | arr | 加入类型? | 数字数组 | +| position_mode | num | | | + +`data.info.interact_template` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| is_variable_layout | bool | 布局是否可变? | | +| layout_data | obj | 布局信息 | | +| layout_id | str | 布局id | | +| layout_list | null | ? | | +| show_interact_ui | bool | 显示交互UI? | | +| template_id | str | 模板id? | | + +`data.info.interact_template.layout_data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| best_area_show_pos | num | | | +| cells | arr | 具体布局信息 | | +| default_cell | obj | | | +| height | num | | | +| rtc_resolution | obj | | | +| width | num | | | + +`data.info.interact_template.layout_data.cells` 数组中对象: + +与 `data.info.interact_template.layout_data.default_cell` 对象相同 + +`data.info.interact_template.layout_data.default_cell` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| can_zoom | num | | | +| default_open | num | | | +| height | num | | | +| mobile_avatar_size | num | | | +| mobile_font_size | num | | | +| pc_web_avatar_size | num | | | +| pc_web_font_size | num | | | +| position | num | 定位? | | +| width | num | | | +| x | num | | | +| y | num | | | +| z_index | num | | | + +`data.info.interact_template.layout_data.rtc_resolution` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code_rate_init | num | | | +| code_rate_max | num | | | +| code_rate_min | num | | | +| horizontal_height | num | | | +| horizontal_width | num | | | +| vertical_height | num | | | +| vertical_width | num | | | + +`data.info.members` 数组中对象: + +参见 [`UNIVERSAL_EVENT_GIFT_V2`](#连线礼物信息v2-universal_event_gift_v2) 的 `data.members` 数组中对象,本cmd缺少部分字段。 + +`data.info.multi_conn_info` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| room_owner | num | 发起人uid | | +| scores | arr | 礼物信息 | | +| show_score | num | 是否显示? | | + +`data.info.multi_conn_info.scores` 数组中对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| price | num | 礼物累计价值 | CNY × 100 | +| price_text | str | 礼物累计价值文本 | | +| uid | num | 对应主播uid | | + +**示例:** + +
+查看消息示例: + +```json +{ + "cmd": "UNIVERSAL_EVENT_GIFT", + "data": { + "anchor_uid": 1950658, + "info": { + "biz_session_id": "17545643420522077733317", + "business_label": "universal_multi_conn", + "interact_channel_id": "4679025140177408", + "interact_connect_type": 0, + "interact_max_users": 9, + "interact_mode": { + "apply_timeout": 20, + "interact_mode_type": 0, + "invite_timeout": 30, + "join_types": [ + 1, + 2 + ], + "position_mode": 0 + }, + "interact_template": { + "is_variable_layout": true, + "layout_data": { + "best_area_show_pos": 0, + "cells": [ + { + "can_zoom": 2, + "default_open": 0, + "height": 48, + "mobile_avatar_size": 64, + "mobile_font_size": 0, + "pc_web_avatar_size": 112, + "pc_web_font_size": 0, + "position": 0, + "width": 30, + "x": 0, + "y": 0, + "z_index": 0 + }, + { + "can_zoom": 1, + "default_open": 0, + "height": 0, + "mobile_avatar_size": 0, + "mobile_font_size": 0, + "pc_web_avatar_size": 0, + "pc_web_font_size": 0, + "position": 1, + "width": 0, + "x": 30, + "y": 0, + "z_index": 0 + }, + { + "can_zoom": 1, + "default_open": 0, + "height": 0, + "mobile_avatar_size": 0, + "mobile_font_size": 0, + "pc_web_avatar_size": 0, + "pc_web_font_size": 0, + "position": 2, + "width": 0, + "x": 45, + "y": 0, + "z_index": 0 + }, + { + "can_zoom": 1, + "default_open": 0, + "height": 0, + "mobile_avatar_size": 0, + "mobile_font_size": 0, + "pc_web_avatar_size": 0, + "pc_web_font_size": 0, + "position": 3, + "width": 0, + "x": 30, + "y": 16, + "z_index": 0 + }, + { + "can_zoom": 1, + "default_open": 0, + "height": 0, + "mobile_avatar_size": 0, + "mobile_font_size": 0, + "pc_web_avatar_size": 0, + "pc_web_font_size": 0, + "position": 4, + "width": 0, + "x": 45, + "y": 16, + "z_index": 0 + }, + { + "can_zoom": 1, + "default_open": 0, + "height": 0, + "mobile_avatar_size": 0, + "mobile_font_size": 0, + "pc_web_avatar_size": 0, + "pc_web_font_size": 0, + "position": 5, + "width": 0, + "x": 30, + "y": 32, + "z_index": 0 + }, + { + "can_zoom": 1, + "default_open": 0, + "height": 0, + "mobile_avatar_size": 0, + "mobile_font_size": 0, + "pc_web_avatar_size": 0, + "pc_web_font_size": 0, + "position": 6, + "width": 0, + "x": 45, + "y": 32, + "z_index": 0 + } + ], + "default_cell": { + "can_zoom": 0, + "default_open": 1, + "height": 16, + "mobile_avatar_size": 40, + "mobile_font_size": 10, + "pc_web_avatar_size": 72, + "pc_web_font_size": 14, + "position": 0, + "width": 15, + "x": 0, + "y": 0, + "z_index": 0 + }, + "height": 48, + "rtc_resolution": { + "code_rate_init": 500, + "code_rate_max": 700, + "code_rate_min": 375, + "horizontal_height": 400, + "horizontal_width": 500, + "vertical_height": 576, + "vertical_width": 360 + }, + "width": 60 + }, + "layout_id": "left1_right6", + "layout_list": null, + "show_interact_ui": true, + "template_id": "multi_conn_grid" + }, + "invoking_time": 1, + "members": [ + { + "face": "https://i1.hdslb.com/bfs/face/2ddb513f600c203f21aefb9725ab0eb84f093943.jpg", + "gender": 0, + "join_time": 1754564992, + "link_id": "44479117", + "position": 0, + "room_id": 41682, + "uid": 1950658, + "uname": "早稻叽" + }, + { + "face": "https://i1.hdslb.com/bfs/face/5958bb6814f25d832775ca37043d38f893b4a478.jpg", + "gender": -1, + "join_time": 1754564347, + "link_id": "44478459", + "position": 1, + "room_id": 26376408, + "uid": 2077733317, + "uname": "烛不遥" + }, + { + "face": "https://i0.hdslb.com/bfs/face/7c862b4ad1a29cdd2b849bcea3c3812b67770d21.jpg", + "gender": 0, + "join_time": 1754564347, + "link_id": "44478460", + "position": 2, + "room_id": 1774970222, + "uid": 1035559935, + "uname": "新砂Athia" + }, + { + "face": "https://i0.hdslb.com/bfs/face/81c1f45b45958c19523bb7cbae7fc3fa99b4aae1.jpg", + "gender": -1, + "join_time": 1754564361, + "link_id": "44478500", + "position": 3, + "room_id": 31361500, + "uid": 3546581471070432, + "uname": "颂温暖_Swanna" + }, + { + "face": "https://i2.hdslb.com/bfs/face/eceb8fa58c41b7cd733bebafcd7c1f3e33b37b07.jpg", + "gender": 0, + "join_time": 1754564385, + "link_id": "44478528", + "position": 4, + "room_id": 1937830041, + "uid": 3546768203582225, + "uname": "暴躁小辣jo" + }, + { + "face": "https://i0.hdslb.com/bfs/face/12c1cd0df2ee6e6bb09b279b0553cdc9ae4af4f0.jpg", + "gender": -1, + "join_time": 1754564774, + "link_id": "44478875", + "position": 5, + "room_id": 23090250, + "uid": 475912512, + "uname": "抵抗Resistance" + } + ], + "members_version": 3974722551, + "multi_conn_info": { + "room_owner": 2077733317, + "scores": [ + { + "price": 82900, + "price_text": "829", + "uid": 1950658 + }, + { + "price": 21200, + "price_text": "212", + "uid": 2077733317 + }, + { + "price": 30400, + "price_text": "304", + "uid": 1035559935 + }, + { + "price": 675600, + "price_text": "6756", + "uid": 3546581471070432 + }, + { + "price": 96800, + "price_text": "968", + "uid": 3546768203582225 + }, + { + "price": 79200, + "price_text": "792", + "uid": 475912512 + } + ], + "show_score": 1 + }, + "room_owner": 2077733317, + "room_start_at": "", + "room_start_at_ts": 0, + "room_status": 1, + "session_start_at": "", + "session_start_at_ts": 0, + "session_status": 1, + "system_time_unix": 1754568295, + "trace_id": "", + "version": 1754568295428 + }, + "room_id": 41682 + }, + "msg_id": "34610565842749442:1000:1000", + "p_is_ack": true, + "p_msg_type": 1, + "send_time": 1754568295441 +} +``` + +
+ +#### 连线礼物信息V2 (UNIVERSAL_EVENT_GIFT_V2) + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| cmd | str | `UNIVERSAL_EVENT_GIFT_V2` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| biz_session_id | str | 连线会话id? | | +| interact_channel_id | str | 频道id? | | +| interact_template | obj | 交互模板信息 | | +| members | arr | 连线成员 | | +| stream_control | null | | | +| version | num | 数据版本 | Unix 毫秒时间戳 | +| session_status | num | | | +| business_label | str | | | +| invoking_time | num | | | +| members_version | num | | | +| room_status | num | | | +| system_time_unix | num | 服务器时间戳 | Unix 秒时间戳 | +| room_owner | num | 发起人uid | | +| session_start_at | str | 会话开始时间 | | +| session_start_at_ts | num | 会话经过时间 | | +| room_start_at | str | 当前直播间加入会话时间 | | +| room_start_at_ts | num | 当前直播间自加入会话开始经过的时间 | | +| trace_id | str | 追踪id? | | +| biz_extra_data | obj | | | +| channel_users | arr | 当前连线频道内uid列表 | | + +`data.interact_template` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| template_id | str | 模板id? | | +| show_interact_ui | bool | 显示交互UI? | | +| layout_id | str | 样式id? | | + +`data.members` 数组中对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| uid | num | 连线主播uid | | +| uname | str | 连线主播名称 | | +| face | str | 连线主播头像 | | +| position | num | 位置? | | +| join_time | num | 加入时间 | Unix 秒时间戳 | +| link_id | str | | | +| gender | num | | | +| room_id | num | 连线主播直播间id | | +| fans_num | num | | | +| display_name | str | 显示名称 | | +| biz_extra_data | obj | | | +| join_time_ts | num | | | + +`data.members[i].biz_extra_data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| multi_conn | obj | | | + +`data.members[i].biz_extra_data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| price | num | 礼物累计价值 | CNY × 100 | +| price_text | str | 礼物累计价值文本 | | + +`data.biz_extra_data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| multi_conn | obj | | | + +`data.biz_extra_data.multi_conn` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| show_score | num | | | +| support_full_zoom | num | | | + +`data.channel_users` 数组: + +| 索引 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| 0 | num | 主播uid | | +| … | num | 主播uid | | + +**示例:** + +
+查看消息示例: + +```json +{ + "cmd": "UNIVERSAL_EVENT_GIFT_V2", + "data": { + "biz_session_id": "17545643420522077733317", + "interact_channel_id": "4679025140177408", + "interact_template": { + "template_id": "multi_conn_grid", + "show_interact_ui": true, + "layout_id": "left1_right6" + }, + "members": [ + { + "uid": 1950658, + "uname": "早稻叽", + "face": "https://i1.hdslb.com/bfs/face/2ddb513f600c203f21aefb9725ab0eb84f093943.jpg", + "position": 0, + "join_time": 1754564992, + "link_id": "44479117", + "gender": 0, + "room_id": 41682, + "fans_num": 0, + "display_name": "本房主播", + "biz_extra_data": { + "multi_conn": { + "price": 82900, + "price_text": "829" + } + }, + "join_time_ts": 0 + }, + { + "uid": 2077733317, + "uname": "烛不遥", + "face": "https://i1.hdslb.com/bfs/face/5958bb6814f25d832775ca37043d38f893b4a478.jpg", + "position": 1, + "join_time": 1754564347, + "link_id": "44478459", + "gender": -1, + "room_id": 26376408, + "fans_num": 0, + "display_name": "烛不遥", + "biz_extra_data": { + "multi_conn": { + "price": 21200, + "price_text": "212" + } + }, + "join_time_ts": 0 + }, + { + "uid": 1035559935, + "uname": "新砂Athia", + "face": "https://i0.hdslb.com/bfs/face/7c862b4ad1a29cdd2b849bcea3c3812b67770d21.jpg", + "position": 2, + "join_time": 1754564347, + "link_id": "44478460", + "gender": 0, + "room_id": 1774970222, + "fans_num": 0, + "display_name": "新砂Athia", + "biz_extra_data": { + "multi_conn": { + "price": 30400, + "price_text": "304" + } + }, + "join_time_ts": 0 + }, + { + "uid": 3546581471070432, + "uname": "颂温暖_Swanna", + "face": "https://i0.hdslb.com/bfs/face/81c1f45b45958c19523bb7cbae7fc3fa99b4aae1.jpg", + "position": 3, + "join_time": 1754564361, + "link_id": "44478500", + "gender": -1, + "room_id": 31361500, + "fans_num": 0, + "display_name": "颂温暖_Swanna", + "biz_extra_data": { + "multi_conn": { + "price": 675600, + "price_text": "6756" + } + }, + "join_time_ts": 0 + }, + { + "uid": 3546768203582225, + "uname": "暴躁小辣jo", + "face": "https://i2.hdslb.com/bfs/face/eceb8fa58c41b7cd733bebafcd7c1f3e33b37b07.jpg", + "position": 4, + "join_time": 1754564385, + "link_id": "44478528", + "gender": 0, + "room_id": 1937830041, + "fans_num": 0, + "display_name": "暴躁小辣jo", + "biz_extra_data": { + "multi_conn": { + "price": 96800, + "price_text": "968" + } + }, + "join_time_ts": 0 + }, + { + "uid": 475912512, + "uname": "抵抗Resistance", + "face": "https://i0.hdslb.com/bfs/face/12c1cd0df2ee6e6bb09b279b0553cdc9ae4af4f0.jpg", + "position": 5, + "join_time": 1754564774, + "link_id": "44478875", + "gender": -1, + "room_id": 23090250, + "fans_num": 0, + "display_name": "抵抗Resistance", + "biz_extra_data": { + "multi_conn": { + "price": 79200, + "price_text": "792" + } + }, + "join_time_ts": 0 + } + ], + "stream_control": null, + "version": 1754568295421, + "session_status": 1, + "business_label": "universal_multi_conn", + "invoking_time": 2, + "members_version": 1262102210, + "room_status": 1, + "system_time_unix": 1754568295, + "room_owner": 2077733317, + "session_start_at": "2025-08-07 18:59:06", + "session_start_at_ts": 3949, + "room_start_at": "2025-08-07 19:09:52", + "room_start_at_ts": 3303, + "trace_id": "55df19c042f09f5c625d7b8b60689496", + "biz_extra_data": { + "multi_conn": { + "show_score": 1, + "support_full_zoom": 2 + } + }, + "channel_users": [ + 1950658, + 2077733317, + 1035559935, + 3546581471070432, + 3546768203582225, + 475912512 + ] + } +} +``` + +
+ #### ??? (PLAY_TOGETHER) **示例:** @@ -5159,6 +6931,51 @@ type===106
+#### 冲榜提示卡 (POPULAR_RANK_GUIDE_CARD) + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| cmd | str | `POPULAR_RANK_GUIDE_CARD` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| ruid | num | 主播uid | | +| title | str | 提示标题 | | +| sub_text | str | 提示副标题 | | +| icon_img | str | 提示卡图标 | 主播头像 | +| gift_id | num | 礼物id | | +| countdown | num | 显示时间 | | +| popup_title | str | 提示文本 | | + +**示例:** + +
+查看消息示例: + +```json +{ + "cmd": "POPULAR_RANK_GUIDE_CARD", + "data": { + "ruid": 194484313, + "title": "目前人气榜NO.1", + "sub_text": "帮我投喂人气票冲榜吧~", + "icon_img": "https://i1.hdslb.com/bfs/face/84a861facfa041b46f7a30897e9ed3f2e05e0519.jpg", + "gift_id": 33988, + "countdown": 10, + "popup_title": "投喂一个人气票帮助主播打榜~" + } +} +``` + +
+ #### ??? (RECALL_DANMU_MSG) **JSON消息:**