import{_ as i,c as o,a as d,b as n,d as s,e,w as l,r,o as p}from"./app-Dgsdh8A6.js";const m={};function c(u,t){const a=r("RouteLink");return p(),o("div",null,[t[18]||(t[18]=d('

protobuf弹幕

2020年5月23日,哔哩哔哩网页端及移动端启用了新的默认弹幕 API,网页端弹幕显示的上限变为原弹幕池上限的两倍。

新的 API 是以 6min 为一个单位加载,即每次加载 6min 内的弹幕

获取实时弹幕

https://api.bilibili.com/x/v2/dm/web/seg.so (web端)

https://api.bilibili.com/x/v2/dm/wbi/web/seg.so (web 端新接口,需要 wbi 认证)

https://api.bilibili.com/x/v2/dm/list/seg.so (APP端)

https://i0.hdslb.com/bfs/dm/{data}.bin (BAS/代码弹幕专包)

请求方式:GET认证方式:半匿名(部分视频在无 Cookie: SESSDATA 时只返回部分弹幕)

此接口与漫画弹幕相同

',7)),n("p",null,[t[1]||(t[1]=s("只能返回普通弹幕(")),t[2]||(t[2]=n("code",null,"pool=1",-1)),t[3]||(t[3]=s()),t[4]||(t[4]=n("code",null,"mode=1-7",-1)),t[5]||(t[5]=s(")和代码弹幕(")),t[6]||(t[6]=n("code",null,"pool=2",-1)),t[7]||(t[7]=s()),t[8]||(t[8]=n("code",null,"mode=8",-1)),t[9]||(t[9]=s("),BAS弹幕(")),t[10]||(t[10]=n("code",null,"pool=2",-1)),t[11]||(t[11]=s()),t[12]||(t[12]=n("code",null,"mode=9",-1)),t[13]||(t[13]=s(")请从")),e(a,{to:"/docs/danmaku/danmaku_view_proto.html"},{default:l(()=>t[0]||(t[0]=[s("弹幕元数据")])),_:1,__:[0]}),t[14]||(t[14]=s("中获取"))]),n("p",null,[t[16]||(t[16]=s("互动弹幕(UP 主头像弹幕、关联视频、内嵌关注按钮)也不存在这个接口,请从")),e(a,{to:"/docs/danmaku/danmaku_view_proto.html"},{default:l(()=>t[15]||(t[15]=[s("弹幕元数据")])),_:1,__:[15]}),t[17]||(t[17]=s("中获取"))]),t[19]||(t[19]=d(`

注:仅获取 6min 的整数倍时间内的弹幕,6min 内最多弹幕数为 6000 条(如第一包中弹幕progress值域为0-360000)

url参数:

参数名类型内容必要性备注
typenum弹幕类必要1:视频弹幕
2:漫画弹幕
oidnum视频 cid必要
pidnum稿件 avid非必要
segment_indexnum分包必要6min 一包
pull_modenum(?)非必要
psnum(?)非必要
penum(?)非必要

proto回复:

proto定义见:bilibili.community.service.dm.v1.DmSegMobileReply

消息DmSegMobileReply

名称类型含义备注
elemsrepeated DanmakuElem弹幕条目

消息DanmakuElem

名称类型含义备注
idint64弹幕 dmid唯一 可用于操作参数
progressint32视频内弹幕出现时间毫秒
modeint32弹幕类型1 2 3:普通弹幕
4:底部弹幕
5:顶部弹幕
6:逆向弹幕
7:高级弹幕
8:代码弹幕
9:BAS 弹幕(仅限于特殊弹幕专包)
fontsizeint32弹幕字号18:小
25:标准
36:大
coloruint32弹幕颜色十进制 RGB888 值
midHashstring发送者 mid 的 HASH用于屏蔽用户和查看用户发送的所有弹幕,也可反查用户id
contentstring弹幕内容utf-8编码
ctimeint64弹幕发送时间时间戳
weightint32权重用于智能屏蔽,根据弹幕语义及长度通过AI识别得出
范围:[0-10]
值越大权重越高
actionstring动作?
poolint32弹幕池0:普通池
1:字幕池
2:特殊池(代码/BAS弹幕)
idStrstring弹幕 dmid字串形式
唯一 可用于操作参数
attrint32弹幕属性位bit0:保护
bit1:直播
bit2:高赞
animationstring动画?

示例:

获取视频av810872(cid=1176840)(炮姐)的实时弹幕分包 1

注:以下proto定义需要编译,bilibili.community.service.dm.v1.dm_pb2并非通过 pypi 安装

import requests
import google.protobuf.text_format as text_format
import bilibili.community.service.dm.v1.dm_pb2 as Danmaku

url = 'https://api.bilibili.com/x/v2/dm/web/seg.so'
params = {
    'type': 1,         # 弹幕类型
    'oid': 1176840,    # cid
    'pid': 810872,     # avid
    'segment_index': 1 # 弹幕分段
}
resp = requests.get(url, params)
data = resp.content

danmaku_seg = Danmaku.DmSegMobileReply()
danmaku_seg.ParseFromString(data)

print(text_format.MessageToString(danmaku_seg.elems[0], as_utf8=True))

输出:

id: 711923911
progress: 47880
mode: 1
fontsize: 18
color: 10092288
midHash: "59417e95"
content: "世界第一电击公主殿下,遇到你是我一生最美好的风景!吾炮赛高,永生不离!唯我超电磁炮永世长存! "
ctime: 1418799826
weight: 6
idStr: "711923911"
attr: 1
`,16))])}const v=i(m,[["render",c]]),D=JSON.parse('{"path":"/docs/danmaku/danmaku_proto.html","title":"protobuf弹幕","lang":"zh-CN","frontmatter":{},"git":{"updatedTime":1696153717000,"contributors":[{"name":"SocialSisterYi","username":"SocialSisterYi","email":"1440239038@qq.com","commits":3,"url":"https://github.com/SocialSisterYi"},{"name":"gwy15","username":"gwy15","email":"gwy15thu@gmail.com","commits":1,"url":"https://github.com/gwy15"},{"name":"LaMerChiang","username":"LaMerChiang","email":"catlair@qq.com","commits":1,"url":"https://github.com/LaMerChiang"}],"changelog":[{"hash":"4dac6cc2d0013c06c5cdf397d9dfc72a1c3531c4","time":1696153717000,"email":"catlair@qq.com","author":"LaMerChiang","message":"标注部分 wbi 链接 (#827)"},{"hash":"c2d9291c0026350e07c01e59fc8a3ee0e0cd42f1","time":1693028780000,"email":"gwy15thu@gmail.com","author":"gwy15","message":"Update danmaku_proto.md,增加认证说明 (#792)"},{"hash":"87d56b66e7ce375029bccf9efda5314964b0528d","time":1684287732000,"email":"1440239038@qq.com","author":"SocialSisterYi","message":"update 【danmaku thumbup list】 APIDoc"},{"hash":"f6760f4be38d5b592d396b211e48c666286524de","time":1677124138000,"email":"1440239038@qq.com","author":"SocialSisterYi","message":"🔨remove header index"},{"hash":"7d89ece2ac46425810647c4ac92acf5f3721cb68","time":1676998806000,"email":"1440239038@qq.com","author":"SocialSisterYi","message":"🚀调整项目结构"}]},"filePathRelative":"docs/danmaku/danmaku_proto.md"}');export{v as comp,D as data};