44 KiB
直播回放
注: 直播回放相关接口较新,随时可能出现变化。
获取直播回放列表
https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/AnchorGetReplayList
请求方法: GET
认证方式: Cookie (SESSDATA)
只能获取自己14天的回放,详细信息请查看对应页面
url参数:
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
|---|---|---|---|---|
| page | num | 页码 | 非必要 | 默认第1页 |
| page_size | num | 每页内容数量 | 非必要 | 默认30项,最大30项 |
json回复:
根对象:
| 字段 | 类型 | 内容 | 备注 |
|---|---|---|---|
| code | num | 返回值 | 0:成功 -101:未登录 |
| message | str | 提示信息 | 成功时为"0" |
| ttl | num | 1 |
|
| data | obj | 信息本体 |
data 对象:
| 字段 | 类型 | 内容 | 备注 |
|---|---|---|---|
| replay_info | arr | 回放信息列表 | 无结果时为null |
| pagination | obj | 分页信息 | |
| archive_flag | bool | (?) | 作用尚不明确 |
| can_edit | num | (?) | 作用尚不明确 |
| can_upload | bool | (?) | 作用尚不明确 |
| has_third_platform_live | bool | (?) | 作用尚不明确 |
data.replay_info 数组中的对象:
| 字段 | 类型 | 内容 | 备注 |
|---|---|---|---|
| replay_id | num | 直播回放id | |
| live_info | obj | 直播信息 | |
| video_info | obj | 回放视频信息 | |
| alarm_info | obj | 警报信息 | |
| room_id | num | 直播间id | |
| live_key | str | 标记直播场次的key | |
| start_time | num | 直播开始秒时间戳 | 调用开始直播接口的时间 |
| end_time | num | 直播结束秒时间戳 | 调用关闭直播接口的时间 |
data.replay_info[i].live_info 对象:
| 字段 | 类型 | 内容 | 备注 |
|---|---|---|---|
| title | str | 直播标题 | 直播结束时的标题 |
| cover | str | 直播封面 | |
| live_time | num | 直播时间 | 同data.replay_info[i].start_time |
| live_type | num | 直播类型? | 作用尚不明确 |
| platform | str | 直播平台 |
data.replay_info[i].video_info 对象:
| 字段 | 类型 | 内容 | 备注 |
|---|---|---|---|
| replay_status | num | 回放状态 | 作用尚不明确 |
| estimated_time | str | 直播回放合成结束时间 | 未合成时为"1970-01-01 08:00:00" |
| duration | num | 直播时长 | 单位秒 |
| download_url | str | 下载链接片段 | 整场直播回放合成成功时存在 建议通过请求整场直播回放下载链接来获取下载链接 |
| alert_code | num | 快速检查警告代码 | 整场直播回放合成失败时不存在 |
| alert_message | str | 快速检查警告信息 | 整场直播回放合成失败时不存在 |
data.replay_info[i].alarm_info 对象:
| 字段 | 类型 | 内容 | 备注 |
|---|---|---|---|
| code | num | 回放合成警报代码 | |
| message | str | 回放合成错误信息 | |
| cur_time | num | 当前时间戳 | Unix秒时间戳 |
| is_ban_publish | bool | 是否禁止发布? |
data.pagination 对象:
| 字段 | 类型 | 内容 | 备注 |
|---|---|---|---|
| page | num | 请求的页码 | |
| page_size | num | 内容数量 | |
| total | num | 总计内容数量 |
示例:
获取自己直播回放列表的第1页,每页2项
curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/AnchorGetReplayList?page=1&page_size=2' \
-b 'SESSDATA=xxx'
查看响应示例:
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"replay_info": [
{
"replay_id": 13517082,
"live_info": {
"title": "随缘摸鱼",
"cover": "https://i0.hdslb.com/bfs/live/59fc254c1f51a962dbf69ae85e4920f2f6fb8dcd.png",
"live_time": 1756479520,
"live_type": 1,
"platform": "android_link"
},
"video_info": {
"replay_status": -8,
"estimated_time": "1970-01-01 08:00:00",
"duration": 9350,
"alert_code": 2,
"alert_message": "录像时长远小于开播时长,请关注直播时网络状况"
},
"alarm_info": {
"code": -8,
"message": "直播内容存在违规片段",
"cur_time": 1756496581,
"is_ban_publish": false
},
"room_id": 1899237171,
"live_key": "637117671085969203",
"start_time": 1756479520,
"end_time": 1756488870
},
{
"replay_id": 13487274,
"live_info": {
"title": "随缘摸鱼",
"cover": "https://i0.hdslb.com/bfs/live/59fc254c1f51a962dbf69ae85e4920f2f6fb8dcd.png",
"live_time": 1756385910,
"live_type": 1,
"platform": "android_link"
},
"video_info": {
"replay_status": 2,
"estimated_time": "1970-01-01 08:00:00",
"duration": 14985,
"alert_code": 2,
"alert_message": "录像时长远小于开播时长,请关注直播时网络状况"
},
"alarm_info": {
"code": 2,
"message": "录像生成失败,请稍后再试",
"cur_time": 1756496581,
"is_ban_publish": false
},
"room_id": 1899237171,
"live_key": "636823272552664883",
"start_time": 1756385910,
"end_time": 1756400895
}
],
"pagination": {
"page": 1,
"page_size": 2,
"total": 16
},
"archive_flag": false,
"can_edit": 1,
"can_upload": false,
"has_third_platform_live": false
}
}
获取已发布片段的信息
https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/AnchorGetVideoSliceList
请求方式: GET
认证方式: Cookie (SESSDATA)
url参数:
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
|---|---|---|---|---|
| page | num | 页码 | 非必要 | 默认第1页 |
| page_size | num | 每页内容数量 | 非必要 | 默认20项,最大20项 |
json回复:
根对象:
| 字段 | 类型 | 内容 | 备注 |
|---|---|---|---|
| code | num | 返回值 | 0:成功 -101:未登录 |
| message | str | 提示信息 | 成功时为"0" |
| ttl | num | 1 |
|
| data | obj | 信息本体 |
data 对象:
| 字段 | 类型 | 内容 | 备注 |
|---|---|---|---|
| list | arr | 切片信息 | |
| page | num | 请求的页码 | |
| page_size | num | 内容数量 | |
| total | num | 总计内容数量 |
data.list 数组中的对象:
| 字段 | 类型 | 内容 | 备注 |
|---|---|---|---|
| silce_id | num | 切片id | |
| av_title | str | 切片标题 | |
| av_cover | str | 切片封面 | |
| av_status | num | 切片状态 | 1:发布中 2:已投稿 3:投稿失败 |
| avid | num | 切片视频的avid | 状态为2时存在 |
| ctime | str | 切片创建时间 | |
| start_tm | str | 切片开始时间 | |
| end_tm | str | 切片结束时间 | |
| av_duration | num | 切片时长 | 状态为2且创作中心出现有效视频时长时存在 |
| failed_reason | str | 失败原因 | 状态为3时存在,2024-09-01前发布失败的切片可能不存在 |
| live_type | num | (?) | 作用尚不明确 |
| cnt_play | num | 播放数 | 视频有播放时存在;若该页出现任意状态不为2的项也会不存在 |
| cnt_danmaku | num | 弹幕数 | 视频有弹幕时存在;若该页出现任意状态不为2的项也会不存在 |
示例:
获取自己第1页的已发布片段信息,每页3项
curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/AnchorGetVideoSliceList?page=1&page_size=3' \
-b 'SESSDATA=xxx'
查看响应示例:
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"list": [
{
"slice_id": 882357,
"av_title": "2025051720 error",
"av_cover": "https://i0.hdslb.com/bfs/live/59fc254c1f51a962dbf69ae85e4920f2f6fb8dcd.png",
"av_status": 1,
"ctime": "2025-05-18 18:13:13",
"start_tm": "2025-05-17 21:07:04",
"end_tm": "2025-05-17 21:16:00",
"live_type": 1
},
{
"slice_id": 879189,
"av_title": "2025051721 zzz 0",
"av_cover": "https://i0.hdslb.com/bfs/live/59fc254c1f51a962dbf69ae85e4920f2f6fb8dcd.png",
"av_status": 3,
"ctime": "2025-05-18 00:32:52",
"start_tm": "2025-05-17 21:07:34",
"end_tm": "2025-05-17 23:02:03",
"failed_reason": "duration_false",
"live_type": 1
},
{
"slice_id": 876259,
"av_title": "202505171449",
"av_cover": "https://i0.hdslb.com/bfs/live/59fc254c1f51a962dbf69ae85e4920f2f6fb8dcd.png",
"av_status": 2,
"avid": 114521830065531,
"ctime": "2025-05-17 14:49:18",
"start_tm": "2025-05-17 14:19:36",
"end_tm": "2025-05-17 14:23:48",
"av_duration": 341,
"live_type": 1
}
],
"page": 1,
"page_size": 3,
"total": 347
}
}
获取回放剪辑草稿列表
https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/GetDraftList
请求方法: GET
认证方式: Cookie (SESSDATA)
url参数:
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
|---|---|---|---|---|
| page | num | 页码 | 非必要 | 默认第1页 |
| page_size | num | 每页内容数量 | 非必要 | 默认30项,最大30项 |
json回复:
根对象:
| 字段 | 类型 | 内容 | 备注 |
|---|---|---|---|
| code | num | 返回值 | -101:未登录 0:成功 |
| message | str | 错误信息 | 成功时为"0" |
| ttl | num | 1 |
|
| data | obj | 信息本体 |
data 对象:
| 字段 | 类型 | 内容 | 备注 |
|---|---|---|---|
| draft_info | arr | 草稿信息 | 无结果时为null |
| pagination | obj | 分页信息 |
data.draft_info 数组中的对象:
| 字段 | 类型 | 内容 | 备注 |
|---|---|---|---|
| id | num | 回放剪辑id | |
| title | str | 回放剪辑标题 | |
| cover | str | 回放剪辑封面 | 有封面时存在;若不存在将使用 https://s1.hdslb.com/bfs/static/blive/blfe-link-center/static/img/default.187078d.png |
| live_key | str | 标记直播场次的key | |
| ctime | str | 回放剪辑创建时间 | |
| live_start_time | str | 直播开始时间 | |
| live_end_time | str | 直播结束时间 | |
| live_type | num | (?) | 作用尚不明确 |
data.pagination 对象:
| 字段 | 类型 | 内容 | 备注 |
|---|---|---|---|
| page | num | 请求的页码 | |
| page_size | num | 内容数量 | |
| total | num | 总计内容数量 |
示例:
请求自己的回放剪辑草稿列表
curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/GetDraftList?page=1&page_size=12' \
-b 'SESSDATA=xxx'
查看响应示例:
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"draft_info": [
{
"id": 988275,
"title": "直播场次 2025-05-19 20:45:04",
"live_key": "609431465787395891",
"ctime": "2025-05-22 01:08:20",
"live_start_time": "2025-05-19 20:45:04",
"live_end_time": "2025-05-20 09:40:13",
"live_type": 1
},
{
"id": 987665,
"title": "直播场次 2025-05-19 20:45:04 切片",
"cover": "http://i0.hdslb.com/bfs/live/9bdf1df3d823734c59382120a9a7c10b177dbefd.png",
"live_key": "609431465787395891",
"ctime": "2025-05-21 20:28:48",
"live_start_time": "2025-05-19 20:45:04",
"live_end_time": "2025-05-20 09:40:13",
"live_type": 1
}
],
"pagination": {
"page": 1,
"page_size": 30,
"total": 2
}
}
}
删除某个回放剪辑草稿
https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/DeleteSliceDraft
请求方法: POST
认证方式: Cookie (SESSDATA)
鉴权方式: Cookie中bili_jct的值正确并与csrf相同
正文参数( application/x-www-form-urlencoded ):
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
|---|---|---|---|---|
| draft_id | num | 回放剪辑id | 必要 | |
| csrf_token | str | CSRF Token(位于cookie) | 非必要 | |
| csrf | str | CSRF Token(位于cookie) | 必要 |
json回复:
根对象:
| 字段 | 类型 | 内容 | 备注 |
|---|---|---|---|
| code | num | 返回值 | -400:参数错误 -101:未登录 -111:csrf校验失败 0:成功 206:无可操作草稿 |
| message | str | 错误信息 | 成功时为"0" |
| ttl | num | 1 |
|
| data | obj | 信息本体 |
data 对象:
| 字段 | 类型 | 内容 | 备注 |
|---|---|---|---|
| code | num | 0 |
|
| message | str | "" |
示例:
删除回放剪辑id为988275的草稿
curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/DeleteSliceDraft' \
--data-urlencode 'draft_id=988275' \
--data-urlencode 'csrf=xxx'
-b 'SESSDATA=xxx;bili_jct=xxx'
查看响应示例:
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"code": 0,
"message": ""
}
}
请求整场直播回放下载链接
https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/AnchorVideoDownload
请求方法: POST
认证方式: Cookie (SESSDATA)
鉴权方式: Cookie中bili_jct的值正确并与csrf相同
是否生成回放取决于回放状态,处于可生成回放状态且未生成整场直播回放时将进行生成。
正文参数( application/x-www-form-urlencoded ):
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
|---|---|---|---|---|
| record_id | num | 直播回放id | 必要(可选) | record_id和live_key必选其一 |
| live_key | str | 标记直播场次的key | 必要(可选) | record_id和live_key必选其一 |
| csrf_token | str | CSRF Token(位于cookie) | 非必要 | |
| csrf | str | CSRF Token(位于cookie) | 必要 |
json回复:
根对象:
| 字段 | 类型 | 内容 | 备注 |
|---|---|---|---|
| code | num | 返回值 | -101:未登录 -111:csrf校验失败 0:成功 100:非法参数 210:回放id或场次key无效 217:未找到直播录像 |
| message | str | 错误信息 | 成功时为"0" |
| ttl | num | 1 |
|
| data | obj | 信息本体 |
data 对象:
| 字段 | 类型 | 内容 | 备注 |
|---|---|---|---|
| record | obj | 回放状态 | |
| download_url | str | 回放下载链接 | 完成时存在 |
| download_url_list | arr | 回放下载链接列表 | 完成时存在 |
data.record 对象:
| 字段 | 类型 | 内容 | 备注 |
|---|---|---|---|
| uid | num | 用户mid | |
| record_id | num | 直播回放id | |
| status | num | 回放状态 | |
| estimated_time | num | 预计结束时间 | Unix秒时间戳 |
| current_time | num | 当前时间 | Unix秒时间戳 |
| merge_time | num | 开始合并时间 | Unix秒时间戳 |
| toast | str | 提示信息 | 失败时存在 |
data.download_url_list 数组:
| 项 | 类型 | 内容 | 备注 |
|---|---|---|---|
| 0 | str | 回放下载链接 |
示例:
请求回放id为10597910的下载链接
curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/AnchorVideoDownload' \
--data-urlencode 'record_id=10597910' \
--data-urlencode 'live_key=607942821532667699' \
--data-urlencode 'csrf=xxx' \
-b 'SESSDATA=xxx;bili_jct=xxx'
查看响应示例:
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"record": {
"uid": 438160221,
"record_id": 10597910,
"status": 30,
"estimated_time": 1747639543,
"current_time": 1747639106,
"merge_time": 1747638665
},
"download_url": "https://upos-sz-mirrorali.bilivideo.com/ugcever/n250519sa3hkpirw61hjskuit4d9fdsj.mp4?deadline=1747682306&gen=record2vod&os=upos&trid=da40b42594d5446da29cb0d2b2f25f45&uparams=deadline,gen,os,trid&upsig=c6ac5f218af40b2c120b3f5add2e4d6b&attname=直播回放_2025-05-13_20-49-04.mp4",
"download_url_list": [
"https://upos-sz-mirrorali.bilivideo.com/ugcever/n250519sa3hkpirw61hjskuit4d9fdsj.mp4?deadline=1747682306&gen=record2vod&os=upos&trid=da40b42594d5446da29cb0d2b2f25f45&uparams=deadline,gen,os,trid&upsig=c6ac5f218af40b2c120b3f5add2e4d6b&attname=直播回放_2025-05-13_20-49-04.mp4"
]
}
}
获取回放的信息
https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/GetAnchorVideoUidRecordsSubsect
请求方法: GET
认证方式: Cookie (SESSDATA)
url参数:
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
|---|---|---|---|---|
| record_id | num | 直播回放id | 必要 |
json回复:
根对象:
| 字段 | 类型 | 内容 | 备注 |
|---|---|---|---|
| code | num | 返回值 | -400:参数错误 -101:未登录 0:成功 |
| message | str | 错误信息 | 成功时为"0" |
| ttl | num | 1 |
|
| data | obj | 信息本体 | 失败时不可用 |
data 对象:
| 字段 | 类型 | 内容 | 备注 |
|---|---|---|---|
| list | arr | 回放信息列表 |
data.list 数组中的对象:
| 字段 | 类型 | 内容 | 备注 |
|---|---|---|---|
| uid | num | 用户mid | |
| record_id | num | 直播回放id | |
| title | str | 直播标题 | |
| cover | str | 直播封面 | |
| status | num | 回放状态 | |
| start_time | num | 直播开始时间 | Unix秒时间戳 |
| end_time | num | 直播结束时间 | Unix秒时间戳 |
示例:
获取回放id为10707664的信息
curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/GetAnchorVideoUidRecordsSubsect?record_id=10707664' \
-b 'SESSDATA=xxx'
查看响应示例:
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"list": [
{
"uid": 438160221,
"record_id": 10707664,
"title": "摆",
"cover": "https://i0.hdslb.com/bfs/live/59fc254c1f51a962dbf69ae85e4920f2f6fb8dcd.png",
"status": 2,
"start_time": 1747508293,
"end_time": 1747508499
}
]
}
}
轮询回放状态
https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/GetAnchorVideoUidRecord
请求方法: POST
认证方式: Cookie (SESSDATA)
鉴权方式: Cookie中bili_jct的值正确并与csrf相同
正文参数( application/x-www-form-urlencoded ):
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
|---|---|---|---|---|
| records | str | 直播回放id列表 | 必要 | 用,分隔 |
| csrf_token | str | CSRF Token(位于cookie) | 非必要 | |
| csrf | str | CSRF Token(位于cookie) | 必要 |
json回复:
根对象:
| 字段 | 类型 | 内容 | 备注 |
|---|---|---|---|
| code | num | 返回值 | -101:未登录 -400:参数错误 0:成功 |
| message | str | 错误信息 | 成功时为"0" |
| ttl | num | 1 |
|
| data | obj | 信息本体 |
data 对象:
| 字段 | 类型 | 内容 | 备注 |
|---|---|---|---|
| list | arr | 查询结果 | 无效的id会被忽略 |
data.list 数组中的对象:
| 字段 | 类型 | 内容 | 备注 |
|---|---|---|---|
| uid | num | 用户mid | |
| record_id | num | 直播回放id | |
| status | num | 回放状态 | |
| current_time | num | 当前时间戳 | Unix秒时间戳 |
| estimated_time | num | 预计结束时间戳 | 初次请求回放下载链接后存在 |
| merge_time | num | 合成开始时间戳 | 初次请求回放下载链接后存在 |
示例:
查询各种回放id
curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/GetAnchorVideoUidRecord' \
--data-urlencode 'records=10727160,10597910,10687720,10230000,99999999' \
--data-urlencode 'csrf=xxx' \
-b 'SESSDATA=xxx;bili_jct=xxx'
查看响应示例:
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"list": [
{
"uid": 91089731,
"record_id": 10230000,
"status": 2,
"current_time": 1747641604
},
{
"uid": 438160221,
"record_id": 10597910,
"status": 30,
"estimated_time": 1747639543,
"current_time": 1747641604,
"merge_time": 1747638665
},
{
"uid": 438160221,
"record_id": 10687720,
"status": -30,
"estimated_time": 1747635525,
"current_time": 1747641604,
"merge_time": 1747635486,
"toast": "因直播过程中存在推流质量问题(网络波动或丢包),本场直播回放无法合成"
},
{
"uid": 3493299121817771,
"record_id": 10727160,
"status": 2,
"current_time": 1747641604
}
]
}
}
获取切片视频流
https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/GetSliceStream
请求方法: GET
认证方式: Cookie (SESSDATA)
url参数:
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
|---|---|---|---|---|
| live_key | str | 标记直播场次的key | 必要 | 对应获取直播回放列表的data.replay_info[i].live_key |
| start_time | num | 直播开始时间戳 | 必要 | 对应获取直播回放列表的data.replay_info[i].start_time |
| end_time | num | 直播结束时间戳 | 必要 | 对应获取直播回放列表的data.replay_info[i].end_time |
| web_location | str | (?) | 非必要 |
json回复:
根对象:
| 字段 | 类型 | 内容 | 备注 |
|---|---|---|---|
| code | num | 返回值 | -400:参数缺失 -101:未登录 0:成功 100:非法参数 202:场次无效 |
| message | str | 错误信息 | 成功时为"0" |
| ttl | num | 1 |
|
| data | obj | 信息本体 |
data 对象:
| 字段 | 类型 | 内容 | 备注 |
|---|---|---|---|
| list | arr 或 null | 直播回放视频列表 | 如果该场回放没有视频流将为null |
| ban_list | null 或 arr | 不可发布的回放时间 | 如果该场回放没有不可发布的时间将为null |
data.list 数组中的对象:
| 字段 | 类型 | 内容 | 备注 |
|---|---|---|---|
| start_time | num | 片段开始时间戳 | Unix秒时间戳 |
| end_time | num | 片段结束时间戳 | Unix秒时间戳 |
| stream | str | 直播回放视频流 | |
| type | num | 类型? | 2:一般回放? |
data.ban_list 数组中的对象:
| 字段 | 类型 | 内容 | 备注 |
|---|---|---|---|
| start_time | num | 不可发布片段的开始时间戳 | Unix秒时间戳 |
| end_time | num | 不可发布片段的结束时间戳 | Unix秒时间戳 |
示例:
获取某个场次的视频流
curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/GetSliceStream?live_key=637117671085969203&start_time=1756479520&end_time=1756488870' \
-b 'SESSDATA=xxx'
查看响应示例:
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"list": [
{
"start_time": 1756479528,
"end_time": 1756488870,
"stream": "https://bvc-live.bilivideo.com/hls-record-gateway/videoPlay?none=为了防止信息泄露,不提供完整链接。目前该视频流可以获取违规片段的视频。",
"type": 2
}
],
"ban_list": [
{
"start_time": 1756487070,
"end_time": 1756488870
}
]
}
}
获取直播会话数据
https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/GetLiveSessionData
请求方法: GET
认证方式: Cookie (SESSDATA)
url参数:
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
|---|---|---|---|---|
| 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(中国标准时间);取值对实际无影响 |
| web_location | str | (?) |
json回复:
根对象:
| 字段 | 类型 | 内容 | 备注 |
|---|---|---|---|
| code | num | 返回值 | -500:服务器错误 -101:未登录 0:成功 100:非法参数 202:场次无效 |
| message | str | 错误信息 | 成功时为"0" |
| ttl | num | 1 |
|
| data | obj | 信息本体 |
data 对象:
| 字段 | 类型 | 内容 | 备注 |
|---|---|---|---|
| session_data | arr | 会话数据 | |
| max_danmaku | num | 弹幕最多的时间戳 | Unix秒时间戳,没有则为0 |
| max_pcu | num | 进房最多的时间戳 | Unix秒时间戳,没有则为0 |
| max_value | num | (?) | 效果未知 |
| high_light_data | arr | 高光时刻数据 | |
| ass_url | str | ASS字幕链接 | 用作弹幕显示 |
| high_light_stat | obj | 高亮状态信息 |
data.session_data 数组中的对象:
| 字段 | 类型 | 内容 | 备注 |
|---|---|---|---|
| ts | num | 采样时间 | Unix秒时间戳 |
| value | num | 弹幕数量 |
data.high_light_data 数组中的对象:
| 字段 | 类型 | 内容 | 备注 |
|---|---|---|---|
| id | num | 高光id | |
| type | num | 高光类型 | 1:弹幕 2:进房 |
| start_time | num | 高光开始时间戳 | Unix秒时间戳 |
| end_time | num | 高光结束时间戳 | Unix秒时间戳 |
| title | str | 高光提示标题 | |
| cover | str | (?) | 目前为"" |
| extra | str | (?) | 目前为"" |
data.high_light_stat 对象:
| 字段 | 类型 | 内容 | 备注 |
|---|---|---|---|
| original_hl | num | “高光时刻”数量 | 有“高光时刻”时存在 |
| manual_hl | num | “已保存”数量 | 有“已保存”时存在,调用手动保存高亮片段进行保存 |
注: 可能还存在一个“回溯录制”的字段。
示例:
获取场次key为607113721045847859的会话数据
curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/GetLiveSessionData?live_key=607113721045847859&start_tm=0000-01-01+00:00:00&end_tm=1970-01-01+00:00:00' \
-b 'SESSDATA=xxx'
查看响应示例:
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"session_data": [
{
"ts": 1752927300,
"value": 0
},
{
"ts": 1752927360,
"value": 0
},
{
"ts": 1752927420,
"value": 0
},
// 省略掉大部分重复内容
{
"ts": 1752946620,
"value": 0
},
{
"ts": 1752946680,
"value": 0
},
{
"ts": 1752946740,
"value": 0
}
],
"max_danmaku": 1752928860,
"max_pcu": 1752928200,
"max_value": 0,
"high_light_data": [
{
"id": 9628113,
"type": 1,
"start_time": 1752928860,
"end_time": 1752929040,
"title": "弹幕高光 Top 1",
"cover": "",
"extra": ""
},
{
"id": 9628114,
"type": 1,
"start_time": 1752938460,
"end_time": 1752938640,
"title": "弹幕高光 Top 2",
"cover": "",
"extra": ""
},
{
"id": 9628115,
"type": 1,
"start_time": 1752938040,
"end_time": 1752938220,
"title": "弹幕高光 Top 3",
"cover": "",
"extra": ""
},
{
"id": 9628112,
"type": 2,
"start_time": 1752928140,
"end_time": 1752928320,
"title": "进房高光时刻",
"cover": "",
"extra": ""
}
],
"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 | “已保存”数量 | 有“已保存”时存在,调用手动保存高亮片段进行保存 |
注: 可能还存在一个“回溯录制”的字段。
示例:
获取用户保存列表
curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/UserGetManualHighlightList?live_key=625727121464233779&manual_type=2' \
-b 'SESSDATA=xxx'
查看响应示例:
只有高光时刻的示例:
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"high_light_stat": {
"original_hl": 4
}
}
}
有保存片段的示例:
{
"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
}
}
}
获取某个时间的视频帧
https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/GetAnchorVideoKeyFrame
请求方法: POST
认证方式: Cookie (SESSDATA)
鉴权方式: Cookie中bili_jct的值正确并与csrf相同
url参数:
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
|---|---|---|---|---|
| csrf | str | CSRF Token(位于cookie) | 必要 |
正文参数( application/json ):
根对象:
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
|---|---|---|---|---|
| live_key | str | 标记直播场次的key | 必要 | |
| time_list | str | 秒时间戳列表,用,分隔 |
必要 | 时间间隔低于30秒将会导致只提供部分内容 |
json回复:
根对象:
| 字段 | 类型 | 内容 | 备注 |
|---|---|---|---|
| code | num | 返回值 | -400:请求错误 -111:csrf校验失败 -101:未登录 0:成功 |
| message | str | 错误信息 | 成功时为"0" |
| ttl | num | 1 |
|
| data | obj | 信息本体 |
data 对象:
| 字段 | 类型 | 内容 | 备注 |
|---|---|---|---|
| list | arr | 指定时间的视频帧列表 | 场次key无效时为null |
data.list 数组中的对象:
| 字段 | 类型 | 内容 | 备注 |
|---|---|---|---|
| ts | num | 时间戳 | 对应请求的time_list其中某一个 |
| url | str | 该时间的视频帧 | 该时间有视频时存在 |
示例:
获取某场直播的视频帧
curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/GetAnchorVideoKeyFrame?csrf=xxx' \
-H 'Content-Type: application/json' \
-b 'SESSDATA=xxx;bili_jct=xxx' \
-d '{"live_key":"609431465787395891","time_list":"174758900,1747658930,1747658960"}'
查看响应示例:
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"list": [
{
"ts": 174758900
},
{
"ts": 1747658930,
"url": "https://jssz-boss.hdslb.com/live2arc_anchor_video/live_438160221_32373699_20250519204900.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=y4zI4XTQzlOkmSKg%2F20250520%2Fjssz%2Fs3%2Faws4_request&X-Amz-Date=20250520T180202Z&X-Amz-Expires=7200&X-Amz-SignedHeaders=host&X-Amz-Signature=8d42a3d5fd1995e5e2bf98d453a986bec48529a9ae97d5d7eedee8a59b22418a"
},
{
"ts": 1747658960,
"url": "https://jssz-boss.hdslb.com/live2arc_anchor_video/live_438160221_32373699_20250519205001.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=y4zI4XTQzlOkmSKg%2F20250520%2Fjssz%2Fs3%2Faws4_request&X-Amz-Date=20250520T180202Z&X-Amz-Expires=7200&X-Amz-SignedHeaders=host&X-Amz-Signature=f4a3803d4147492ced14eefbb6953e772b886e195d51dbfac800e77320adeba2"
}
]
}
}
手动保存高亮片段
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 | 错误提示 | 主播没有对应场次 , 保存时间点未开播 |
示例:
手动保存一个片段
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'
查看响应示例:
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {}
}
投稿直播回放片段
https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/AnchorPublishVideoSlice
请求方法: POST
认证方式: Cookie (SESSDATA)
鉴权方式: Cookie中bili_jct的值正确并与csrf相同
正文参数( application/x-www-form-urlencoded ):
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
|---|---|---|---|---|
| live_key | str | 标记直播场次的key | 必要 | 必须为自己的live_key |
| start_ts | num | 开始时间戳 | 必要 | 开始和结束时间目前相差不能大于2小时 |
| end_ts | num | 结束时间戳 | 必要 | 开始和结束时间目前相差不能大于2小时 |
| av_title | str | 切片标题 | 必要 | 不能与现有标题重复 |
| av_cover | str | 切片封面URL | 必要 | 必须为.hdslb.com域名下的图片,否则合成结束时会出错 |
| av_highlight | num | 高光绑定? | 非必要 | |
| with_subtitle | num | 是否自动生成字幕? | 非必要 | 效果不明确 |
| with_danmaku | num | 是否带弹幕? | 非必要 | 传递1时可能导致处于“发布中”状态时不在获取已发布片段的信息中显示 |
| 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回复:
根对象:
| 字段 | 类型 | 内容 | 备注 |
|---|---|---|---|
| code | num | 返回值 | -111:csrf校验失败 -101:未登录 0:成功 4000:时长过长 4001:操作太快 4002:片段已投稿 4003:请选择精彩片段再投稿哦 4006:标题已使用 4008:不被允许的视频倍速 4009:该片段存在违规内容,不允许投稿 |
| message | str | 错误信息 | |
| ttl | num | 1 |
|
| data | obj | 信息本体 | 成功时有效 |
data 对象:
| 字段 | 类型 | 内容 | 备注 |
|---|---|---|---|
| video_slice_id | num | 切片id |
注: 若返回值出现4001不一定就是操作太快,不提供某些必要参数或某个参数不正确也会导致返回4001。
示例:
为某个场次投稿切片
curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/AnchorPublishVideoSlice' \
--data-urlencode 'live_key=609431465787395891' \
--data-urlencode 'start_ts=1747680306' \
--data-urlencode 'end_ts=1747687506' \
--data-urlencode 'av_title=2025051920' \
--data-urlencode 'av_cover=https://i0.hdslb.com/bfs/live/59fc254c1f51a962dbf69ae85e4920f2f6fb8dcd.png' \
--data-urlencode 'av_highlight=0' \
--data-urlencode 'with_subtitle=0' \
--data-urlencode 'with_danmaku=0' \
--data-urlencode 'csrf=xxx' \
-b 'SESSDATA=xxx;bili_jct=xxx'
查看响应示例:
{
"code": 0,
"message": "0",
"ttl": 1,
"data":{
"video_slice_id": 898374
}
}
下载整场直播回放的流程
此处的流程是从直播回放的“下载回放”功能得出的。
-
先请求整场直播回放下载链接接口,让它开始合成回放;
-
(可选)请求获取回放的信息接口,生成合成进度页面;
-
轮询回放合成状态,当状态变为
30转到流程4,变为-30转到流程5; -
再次请求整场直播回放下载链接,获取下载链接并下载。
-
请求获取直播回放列表,刷新页面并根据信息提示失败。
直播回放片段发布页面
通过此处的链接可以打开直播回放片段发布页面。
https://live.bilibili.com/web-cut/quick-publish-mobile.html (移动端)
注:移动端强制限制只能投稿15分钟的片段,网页端则看投稿直播回放片段接口允许多长的时间。
url查询参数:
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
|---|---|---|---|---|
| start_time | num | 直播开始时间 | 必要 | 对应获取直播回放列表的data.replay_info[i].start_time |
| end_time | num | 直播结束时间 | 必要 | 对应获取直播回放列表的data.replay_info[i].end_time |
| live_key | str | 标记直播场次的key | 必要 | 对应获取直播回放列表的data.replay_info[i].live_key |
| cover | str | 封面URL | 非必要 | 可以自定义封面,或者在获取直播回放列表使用直播封面 |
示例链接:
直播回放剪辑页面
此链接用于打开直播回放轻剪辑页面,在点击直播回放片段发布页面的“高级剪辑工具”或某一个回放剪辑草稿后自动打开。
url查询参数:
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
|---|---|---|---|---|
| start_time | num | 直播开始时间戳 | 必要 | 用于获取切片视频流 |
| end_time | num | 直播结束时间戳 | 必要 | 用于获取切片视频流 |
| live_key | str | 标记直播场次的key | 必要 | 用于获取切片视频流 |
| draft_id | num | 回放剪辑id | 必要 |