115 lines
38 KiB
JavaScript
115 lines
38 KiB
JavaScript
import{_ as l,c as t,a as p,b as e,d as n,e as o,w as d,r,o as c}from"./app-Dgsdh8A6.js";const i={};function D(y,s){const a=r("RouteLink");return c(),t("div",null,[s[3]||(s[3]=p(`<h1 id="弹幕元数据" tabindex="-1"><a class="header-anchor" href="#弹幕元数据"><span>弹幕元数据</span></a></h1><p>2020-09-25 B站更新了互动弹幕功能,包括UP主头像弹幕、关联视频弹幕、视频内嵌引导关注按钮三大功能</p><p>详情见:</p><ul><li><a href="https://www.bilibili.com/read/cv7728299" target="_blank" rel="noopener noreferrer">【客户端更新】6.10版本更新!UP主支持发布关联视频弹幕</a></li><li><a href="https://www.bilibili.com/blackboard/activity-c8a0iDRQy.html" target="_blank" rel="noopener noreferrer">引导关注卡片</a></li></ul><h2 id="获取弹幕个人配置与互动弹幕及bas-代码-弹幕专包-web端" tabindex="-1"><a class="header-anchor" href="#获取弹幕个人配置与互动弹幕及bas-代码-弹幕专包-web端"><span>获取弹幕个人配置与互动弹幕及BAS(代码)弹幕专包(web端)</span></a></h2><blockquote><p>https://api.bilibili.com/x/v2/dm/web/view</p></blockquote><p><em>请求方式:GET</em></p><p>认证方式:仅可Cookie(SESSDATA)</p><p><strong>url参数:</strong></p><table><thead><tr><th>参数名</th><th>类型</th><th>内容</th><th>必要性</th><th>备注</th></tr></thead><tbody><tr><td>type</td><td>num</td><td>弹幕类</td><td>必要</td><td>1:视频弹幕</td></tr><tr><td>oid</td><td>num</td><td>视频cid</td><td>必要</td><td></td></tr><tr><td>pid</td><td>num</td><td>稿件avid</td><td>非必要</td><td></td></tr></tbody></table><p><strong>proto回复:</strong></p><p>消息<code>DmWebViewReply</code>:</p><table><thead><tr><th>名称</th><th>类型</th><th>含义</th><th>备注</th></tr></thead><tbody><tr><td>state</td><td>int32</td><td>弹幕开放状态</td><td>0:开放弹幕<br>1:禁止弹幕</td></tr><tr><td>text</td><td>string</td><td>?</td><td></td></tr><tr><td>textSide</td><td>string</td><td>?</td><td></td></tr><tr><td>dmSge</td><td>DmSegConfig</td><td>分段弹幕包信息?</td><td></td></tr><tr><td>flag</td><td>DanmakuFlagConfig</td><td>?</td><td></td></tr><tr><td>specialDms</td><td>repeated string</td><td>BAS(代码)弹幕专包url</td><td></td></tr><tr><td>checkBox</td><td>bool</td><td>?</td><td></td></tr><tr><td>count</td><td>int64</td><td>实际弹幕总数</td><td>具有1500-6000不等的上限</td></tr><tr><td>commandDms</td><td>repeated CommandDm</td><td>互动弹幕条目</td><td></td></tr><tr><td>dmSetting</td><td>DanmuWebPlayerConfig</td><td>弹幕个人配置</td><td>仅登录后存在</td></tr></tbody></table><p>消息<code>dmSge</code>:</p><table><thead><tr><th>名称</th><th>类型</th><th>含义</th><th>备注</th></tr></thead><tbody><tr><td>pageSize</td><td>int64</td><td>分段时间?</td><td>单位为毫秒</td></tr><tr><td>total</td><td>int64</td><td>最大分页数?</td><td></td></tr></tbody></table><p>消息<code>flag</code>:</p><table><thead><tr><th>名称</th><th>类型</th><th>含义</th><th>备注</th></tr></thead><tbody><tr><td>recFlag</td><td>int32</td><td>?</td><td></td></tr><tr><td>recText</td><td>string</td><td>?</td><td></td></tr><tr><td>recSwitch</td><td>int32</td><td>?</td><td></td></tr></tbody></table><p>消息<code>commandDms</code>:</p><table><thead><tr><th>名称</th><th>类型</th><th>含义</th><th>备注</th></tr></thead><tbody><tr><td>id</td><td>int64</td><td>弹幕dmid</td><td></td></tr><tr><td>oid</td><td>int64</td><td>视频cid</td><td></td></tr><tr><td>mid</td><td>int64</td><td>发送者mid</td><td></td></tr><tr><td>command</td><td>string</td><td>弹幕指令</td><td><code>#UP#</code>:UP主头像弹幕<br><code>#LINK#</code>:关联视频弹幕<br><code>#ATTENTION#</code>:视频内嵌引导关注按钮</td></tr><tr><td>content</td><td>string</td><td>弹幕文字</td><td></td></tr><tr><td>progress</td><td>int32</td><td>弹幕出现时间</td><td>单位为毫秒</td></tr><tr><td>ctime</td><td>string</td><td>创建时间?</td><td>此项为空</td></tr><tr><td>mtime</td><td>string</td><td>修改时间?</td><td>此项为空</td></tr><tr><td>extra</td><td>string</td><td>弹幕负载数据</td><td>json序列字串</td></tr><tr><td>idStr</td><td>string</td><td>弹幕dmid</td><td>字串形式</td></tr></tbody></table><p><code>extra</code>json序列:</p><p>类型为【UP主头像弹幕】时:</p><table><thead><tr><th>字段</th><th>类型</th><th>内容</th><th>备注</th></tr></thead><tbody><tr><td>icon</td><td>str</td><td>UP主头像url</td><td></td></tr></tbody></table><p>类型为【关联视频弹幕】时:</p><table><thead><tr><th>字段</th><th>类型</th><th>内容</th><th>备注</th></tr></thead><tbody><tr><td>aid</td><td>num</td><td>关联视频的avid</td><td></td></tr><tr><td>title</td><td>str</td><td>关联视频的标题</td><td></td></tr><tr><td>icon</td><td>str</td><td>关联视频按钮图片url</td><td></td></tr><tr><td>bvid</td><td>str</td><td>关联视频的bvid</td><td></td></tr></tbody></table><p>类型为【视频内嵌引导关注按钮】时:</p><table><thead><tr><th>字段</th><th>类型</th><th>内容</th><th>备注</th></tr></thead><tbody><tr><td>duration</td><td>num</td><td>持续时间</td><td>单位为毫秒</td></tr><tr><td>posX</td><td>num</td><td>X坐标</td><td>区间:[118-549]</td></tr><tr><td>posY</td><td>num</td><td>Y坐标</td><td>区间:[82-293]</td></tr><tr><td>icon</td><td>str</td><td>按钮图片url</td><td>不应该是关注按钮吗,但这个是圆形的</td></tr><tr><td>type</td><td>num</td><td>关注按钮类型</td><td>0:仅关注<br>1:仅三连<br>2:关注+三连</td></tr></tbody></table><p>消息<code>dmSetting</code>:</p><table><thead><tr><th>名称</th><th>类型</th><th>含义</th><th>备注</th></tr></thead><tbody><tr><td>dmSwitch</td><td>bool</td><td>弹幕开关</td><td>true:开启<br>false:关闭</td></tr><tr><td>aiSwitch</td><td>bool</td><td>智能云屏蔽</td><td>同上</td></tr><tr><td>aiLevel</td><td>int32</td><td>智能云屏蔽级别</td><td>区间:[1-10]</td></tr><tr><td>blocktop</td><td>bool</td><td>屏蔽类型-顶部</td><td>true:不屏蔽<br>false:屏蔽</td></tr><tr><td>blockscroll</td><td>bool</td><td>屏蔽类型-滚动</td><td>同上</td></tr><tr><td>blockbottom</td><td>bool</td><td>屏蔽类型-底部</td><td>同上</td></tr><tr><td>blockcolor</td><td>bool</td><td>屏蔽类型-彩色</td><td>同上</td></tr><tr><td>blockspecial</td><td>bool</td><td>屏蔽类型-特殊</td><td>同上</td></tr><tr><td>preventshade</td><td>bool</td><td>防挡弹幕(底部15%)</td><td>true:开启<br>false:关闭</td></tr><tr><td>dmask</td><td>bool</td><td>智能防挡弹幕(人像蒙版)</td><td>同上</td></tr><tr><td>opacity</td><td>float</td><td>弹幕不透明度</td><td>区间:[0-1]</td></tr><tr><td>dmarea</td><td>int32</td><td>弹幕显示区域</td><td>100:不重叠<br>75:3/4屏<br>50:半瓶<br>25:1/4屏<br>0:不限</td></tr><tr><td>speedplus</td><td>float</td><td>弹幕速度</td><td>区间:[0.4-1.6]</td></tr><tr><td>fontsize</td><td>float</td><td>字体大小</td><td>区间:[0.4-1.6]</td></tr><tr><td>screensync</td><td>bool</td><td>跟随屏幕缩放比例</td><td></td></tr><tr><td>speedsync</td><td>bool</td><td>根据播放倍速调整速度</td><td></td></tr><tr><td>fontfamily</td><td>string</td><td>字体类型?</td><td>未启用</td></tr><tr><td>bold</td><td>bool</td><td>粗体?</td><td>未启用</td></tr><tr><td>fontborder</td><td>int32</td><td>描边类型</td><td>0:重墨<br>1:描边<br>2:45°投影</td></tr><tr><td>drawType</td><td>string</td><td>渲染类型?</td><td>未启用</td></tr></tbody></table><p>protobuf结构体:</p><p><strong>web_dmview.proto</strong></p><div class="language-protobuf line-numbers-mode" data-highlighter="shiki" data-ext="protobuf" style="background-color:#1E1E1E;color:#D4D4D4;"><pre class="shiki dark-plus vp-code"><code class="language-protobuf"><span class="line"><span style="color:#569CD6;">syntax</span><span style="color:#D4D4D4;"> = </span><span style="color:#CE9178;">"proto3"</span><span style="color:#D4D4D4;">;</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#6A9955;">//分段弹幕包信息?</span></span>
|
||
<span class="line"><span style="color:#569CD6;">message</span><span style="color:#4EC9B0;"> DmSegConfig</span><span style="color:#D4D4D4;"> {</span></span>
|
||
<span class="line"><span style="color:#569CD6;"> int64</span><span style="color:#9CDCFE;"> pageSize</span><span style="color:#D4D4D4;"> = </span><span style="color:#B5CEA8;">1</span><span style="color:#D4D4D4;">; </span><span style="color:#6A9955;">//分段时间?</span></span>
|
||
<span class="line"><span style="color:#569CD6;"> int64</span><span style="color:#9CDCFE;"> total</span><span style="color:#D4D4D4;"> = </span><span style="color:#B5CEA8;">2</span><span style="color:#D4D4D4;">; </span><span style="color:#6A9955;">//最大分页数?</span></span>
|
||
<span class="line"><span style="color:#D4D4D4;">}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#6A9955;">//</span></span>
|
||
<span class="line"><span style="color:#569CD6;">message</span><span style="color:#4EC9B0;"> DanmakuFlagConfig</span><span style="color:#D4D4D4;"> {</span></span>
|
||
<span class="line"><span style="color:#569CD6;"> int32</span><span style="color:#9CDCFE;"> recFlag</span><span style="color:#D4D4D4;"> = </span><span style="color:#B5CEA8;">1</span><span style="color:#D4D4D4;">; </span><span style="color:#6A9955;">//</span></span>
|
||
<span class="line"><span style="color:#569CD6;"> string</span><span style="color:#9CDCFE;"> recText</span><span style="color:#D4D4D4;"> = </span><span style="color:#B5CEA8;">2</span><span style="color:#D4D4D4;">; </span><span style="color:#6A9955;">//</span></span>
|
||
<span class="line"><span style="color:#569CD6;"> int32</span><span style="color:#9CDCFE;"> recSwitch</span><span style="color:#D4D4D4;"> = </span><span style="color:#B5CEA8;">3</span><span style="color:#D4D4D4;">; </span><span style="color:#6A9955;">//</span></span>
|
||
<span class="line"><span style="color:#D4D4D4;">}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#6A9955;">// 互动弹幕条目</span></span>
|
||
<span class="line"><span style="color:#569CD6;">message</span><span style="color:#4EC9B0;"> CommandDm</span><span style="color:#D4D4D4;"> {</span></span>
|
||
<span class="line"><span style="color:#569CD6;"> int64</span><span style="color:#9CDCFE;"> id</span><span style="color:#D4D4D4;"> = </span><span style="color:#B5CEA8;">1</span><span style="color:#D4D4D4;">; </span><span style="color:#6A9955;">//弹幕dmid</span></span>
|
||
<span class="line"><span style="color:#569CD6;"> int64</span><span style="color:#9CDCFE;"> oid</span><span style="color:#D4D4D4;"> = </span><span style="color:#B5CEA8;">2</span><span style="color:#D4D4D4;">; </span><span style="color:#6A9955;">//视频cid</span></span>
|
||
<span class="line"><span style="color:#569CD6;"> int64</span><span style="color:#9CDCFE;"> mid</span><span style="color:#D4D4D4;"> = </span><span style="color:#B5CEA8;">3</span><span style="color:#D4D4D4;">; </span><span style="color:#6A9955;">//发送者mid</span></span>
|
||
<span class="line"><span style="color:#569CD6;"> string</span><span style="color:#9CDCFE;"> command</span><span style="color:#D4D4D4;"> = </span><span style="color:#B5CEA8;">4</span><span style="color:#D4D4D4;">; </span><span style="color:#6A9955;">//弹幕指令</span></span>
|
||
<span class="line"><span style="color:#569CD6;"> string</span><span style="color:#9CDCFE;"> content</span><span style="color:#D4D4D4;"> = </span><span style="color:#B5CEA8;">5</span><span style="color:#D4D4D4;">; </span><span style="color:#6A9955;">//弹幕文字</span></span>
|
||
<span class="line"><span style="color:#569CD6;"> int32</span><span style="color:#9CDCFE;"> progress</span><span style="color:#D4D4D4;"> = </span><span style="color:#B5CEA8;">6</span><span style="color:#D4D4D4;">; </span><span style="color:#6A9955;">//弹幕出现时间</span></span>
|
||
<span class="line"><span style="color:#569CD6;"> string</span><span style="color:#9CDCFE;"> ctime</span><span style="color:#D4D4D4;"> = </span><span style="color:#B5CEA8;">7</span><span style="color:#D4D4D4;">; </span><span style="color:#6A9955;">//</span></span>
|
||
<span class="line"><span style="color:#569CD6;"> string</span><span style="color:#9CDCFE;"> mtime</span><span style="color:#D4D4D4;"> = </span><span style="color:#B5CEA8;">8</span><span style="color:#D4D4D4;">; </span><span style="color:#6A9955;">//</span></span>
|
||
<span class="line"><span style="color:#569CD6;"> string</span><span style="color:#9CDCFE;"> extra</span><span style="color:#D4D4D4;"> = </span><span style="color:#B5CEA8;">9</span><span style="color:#D4D4D4;">; </span><span style="color:#6A9955;">//弹幕负载数据</span></span>
|
||
<span class="line"><span style="color:#569CD6;"> string</span><span style="color:#9CDCFE;"> idStr</span><span style="color:#D4D4D4;"> = </span><span style="color:#B5CEA8;">10</span><span style="color:#D4D4D4;">; </span><span style="color:#6A9955;">//弹幕dmid(字串形式)</span></span>
|
||
<span class="line"><span style="color:#D4D4D4;">}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#6A9955;">//弹幕个人配置</span></span>
|
||
<span class="line"><span style="color:#569CD6;">message</span><span style="color:#4EC9B0;"> DanmuWebPlayerConfig</span><span style="color:#D4D4D4;">{</span></span>
|
||
<span class="line"><span style="color:#569CD6;"> bool</span><span style="color:#9CDCFE;"> dmSwitch</span><span style="color:#D4D4D4;">=</span><span style="color:#B5CEA8;">1</span><span style="color:#D4D4D4;">; </span><span style="color:#6A9955;">//弹幕开关</span></span>
|
||
<span class="line"><span style="color:#569CD6;"> bool</span><span style="color:#9CDCFE;"> aiSwitch</span><span style="color:#D4D4D4;">=</span><span style="color:#B5CEA8;">2</span><span style="color:#D4D4D4;">; </span><span style="color:#6A9955;">//智能云屏蔽</span></span>
|
||
<span class="line"><span style="color:#569CD6;"> int32</span><span style="color:#9CDCFE;"> aiLevel</span><span style="color:#D4D4D4;">=</span><span style="color:#B5CEA8;">3</span><span style="color:#D4D4D4;">; </span><span style="color:#6A9955;">//智能云屏蔽级别</span></span>
|
||
<span class="line"><span style="color:#569CD6;"> bool</span><span style="color:#9CDCFE;"> blocktop</span><span style="color:#D4D4D4;">=</span><span style="color:#B5CEA8;">4</span><span style="color:#D4D4D4;">; </span><span style="color:#6A9955;">//屏蔽类型-顶部</span></span>
|
||
<span class="line"><span style="color:#569CD6;"> bool</span><span style="color:#9CDCFE;"> blockscroll</span><span style="color:#D4D4D4;">=</span><span style="color:#B5CEA8;">5</span><span style="color:#D4D4D4;">; </span><span style="color:#6A9955;">//屏蔽类型-滚动</span></span>
|
||
<span class="line"><span style="color:#569CD6;"> bool</span><span style="color:#9CDCFE;"> blockbottom</span><span style="color:#D4D4D4;">=</span><span style="color:#B5CEA8;">6</span><span style="color:#D4D4D4;">; </span><span style="color:#6A9955;">//屏蔽类型-底部</span></span>
|
||
<span class="line"><span style="color:#569CD6;"> bool</span><span style="color:#9CDCFE;"> blockcolor</span><span style="color:#D4D4D4;">=</span><span style="color:#B5CEA8;">7</span><span style="color:#D4D4D4;">; </span><span style="color:#6A9955;">//屏蔽类型-彩色</span></span>
|
||
<span class="line"><span style="color:#569CD6;"> bool</span><span style="color:#9CDCFE;"> blockspecial</span><span style="color:#D4D4D4;">=</span><span style="color:#B5CEA8;">8</span><span style="color:#D4D4D4;">; </span><span style="color:#6A9955;">//屏蔽类型-特殊</span></span>
|
||
<span class="line"><span style="color:#569CD6;"> bool</span><span style="color:#9CDCFE;"> preventshade</span><span style="color:#D4D4D4;">=</span><span style="color:#B5CEA8;">9</span><span style="color:#D4D4D4;">; </span><span style="color:#6A9955;">//防挡弹幕(底部15%)</span></span>
|
||
<span class="line"><span style="color:#569CD6;"> bool</span><span style="color:#9CDCFE;"> dmask</span><span style="color:#D4D4D4;">=</span><span style="color:#B5CEA8;">10</span><span style="color:#D4D4D4;">; </span><span style="color:#6A9955;">//智能防挡弹幕(人像蒙版)</span></span>
|
||
<span class="line"><span style="color:#569CD6;"> float</span><span style="color:#9CDCFE;"> opacity</span><span style="color:#D4D4D4;">=</span><span style="color:#B5CEA8;">11</span><span style="color:#D4D4D4;">; </span><span style="color:#6A9955;">//弹幕不透明度</span></span>
|
||
<span class="line"><span style="color:#569CD6;"> int32</span><span style="color:#9CDCFE;"> dmarea</span><span style="color:#D4D4D4;">=</span><span style="color:#B5CEA8;">12</span><span style="color:#D4D4D4;">; </span><span style="color:#6A9955;">//弹幕显示区域</span></span>
|
||
<span class="line"><span style="color:#569CD6;"> float</span><span style="color:#9CDCFE;"> speedplus</span><span style="color:#D4D4D4;">=</span><span style="color:#B5CEA8;">13</span><span style="color:#D4D4D4;">; </span><span style="color:#6A9955;">//弹幕速度</span></span>
|
||
<span class="line"><span style="color:#569CD6;"> float</span><span style="color:#9CDCFE;"> fontsize</span><span style="color:#D4D4D4;">=</span><span style="color:#B5CEA8;">14</span><span style="color:#D4D4D4;">; </span><span style="color:#6A9955;">//字体大小</span></span>
|
||
<span class="line"><span style="color:#569CD6;"> bool</span><span style="color:#9CDCFE;"> screensync</span><span style="color:#D4D4D4;">=</span><span style="color:#B5CEA8;">15</span><span style="color:#D4D4D4;">; </span><span style="color:#6A9955;">//跟随屏幕缩放比例</span></span>
|
||
<span class="line"><span style="color:#569CD6;"> bool</span><span style="color:#9CDCFE;"> speedsync</span><span style="color:#D4D4D4;">=</span><span style="color:#B5CEA8;">16</span><span style="color:#D4D4D4;">; </span><span style="color:#6A9955;">//根据播放倍速调整速度</span></span>
|
||
<span class="line"><span style="color:#569CD6;"> string</span><span style="color:#9CDCFE;"> fontfamily</span><span style="color:#D4D4D4;">=</span><span style="color:#B5CEA8;">17</span><span style="color:#D4D4D4;">; </span><span style="color:#6A9955;">//字体类型?</span></span>
|
||
<span class="line"><span style="color:#569CD6;"> bool</span><span style="color:#9CDCFE;"> bold</span><span style="color:#D4D4D4;">=</span><span style="color:#B5CEA8;">18</span><span style="color:#D4D4D4;">; </span><span style="color:#6A9955;">//粗体?</span></span>
|
||
<span class="line"><span style="color:#569CD6;"> int32</span><span style="color:#9CDCFE;"> fontborder</span><span style="color:#D4D4D4;">=</span><span style="color:#B5CEA8;">19</span><span style="color:#D4D4D4;">; </span><span style="color:#6A9955;">//描边类型</span></span>
|
||
<span class="line"><span style="color:#569CD6;"> string</span><span style="color:#9CDCFE;"> drawType</span><span style="color:#D4D4D4;">=</span><span style="color:#B5CEA8;">20</span><span style="color:#D4D4D4;">; </span><span style="color:#6A9955;">//渲染类型?</span></span>
|
||
<span class="line"><span style="color:#D4D4D4;">}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#569CD6;">message</span><span style="color:#4EC9B0;"> DmWebViewReply</span><span style="color:#D4D4D4;"> {</span></span>
|
||
<span class="line"><span style="color:#569CD6;"> int32</span><span style="color:#9CDCFE;"> state</span><span style="color:#D4D4D4;"> = </span><span style="color:#B5CEA8;">1</span><span style="color:#D4D4D4;">; </span><span style="color:#6A9955;">//弹幕开放状态</span></span>
|
||
<span class="line"><span style="color:#569CD6;"> string</span><span style="color:#9CDCFE;"> text</span><span style="color:#D4D4D4;"> = </span><span style="color:#B5CEA8;">2</span><span style="color:#D4D4D4;">; </span><span style="color:#6A9955;">//</span></span>
|
||
<span class="line"><span style="color:#569CD6;"> string</span><span style="color:#9CDCFE;"> textSide</span><span style="color:#D4D4D4;"> = </span><span style="color:#B5CEA8;">3</span><span style="color:#D4D4D4;">; </span><span style="color:#6A9955;">//</span></span>
|
||
<span class="line"><span style="color:#569CD6;"> DmSegConfig</span><span style="color:#9CDCFE;"> dmSge</span><span style="color:#D4D4D4;"> = </span><span style="color:#B5CEA8;">4</span><span style="color:#D4D4D4;">; </span><span style="color:#6A9955;">//分段弹幕包信息?</span></span>
|
||
<span class="line"><span style="color:#569CD6;"> DanmakuFlagConfig</span><span style="color:#9CDCFE;"> flag</span><span style="color:#D4D4D4;"> = </span><span style="color:#B5CEA8;">5</span><span style="color:#D4D4D4;">; </span><span style="color:#6A9955;">//</span></span>
|
||
<span class="line"><span style="color:#569CD6;"> repeated</span><span style="color:#569CD6;"> string</span><span style="color:#9CDCFE;"> specialDms</span><span style="color:#D4D4D4;"> = </span><span style="color:#B5CEA8;">6</span><span style="color:#D4D4D4;">; </span><span style="color:#6A9955;">//BAS(代码)弹幕专包url</span></span>
|
||
<span class="line"><span style="color:#569CD6;"> bool</span><span style="color:#9CDCFE;"> checkBox</span><span style="color:#D4D4D4;"> = </span><span style="color:#B5CEA8;">7</span><span style="color:#D4D4D4;">; </span><span style="color:#6A9955;">//</span></span>
|
||
<span class="line"><span style="color:#569CD6;"> int64</span><span style="color:#9CDCFE;"> count</span><span style="color:#D4D4D4;"> = </span><span style="color:#B5CEA8;">8</span><span style="color:#D4D4D4;">; </span><span style="color:#6A9955;">//实际弹幕总数</span></span>
|
||
<span class="line"><span style="color:#569CD6;"> repeated</span><span style="color:#569CD6;"> CommandDm</span><span style="color:#9CDCFE;"> commandDms</span><span style="color:#D4D4D4;"> = </span><span style="color:#B5CEA8;">9</span><span style="color:#D4D4D4;">; </span><span style="color:#6A9955;">//互动弹幕条目</span></span>
|
||
<span class="line"><span style="color:#569CD6;"> DanmuWebPlayerConfig</span><span style="color:#9CDCFE;"> dmSetting</span><span style="color:#D4D4D4;"> = </span><span style="color:#B5CEA8;">10</span><span style="color:#D4D4D4;">; </span><span style="color:#6A9955;">//弹幕个人配置</span></span>
|
||
<span class="line"><span style="color:#D4D4D4;">}</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>示例:</strong></p><p>获取视频<code>av797164471(cid=236871317)</code>的弹幕元数据</p><div class="language-shell line-numbers-mode" data-highlighter="shiki" data-ext="shell" style="background-color:#1E1E1E;color:#D4D4D4;"><pre class="shiki dark-plus vp-code"><code class="language-shell"><span class="line"><span style="color:#DCDCAA;">curl</span><span style="color:#569CD6;"> -G</span><span style="color:#CE9178;"> 'https://api.bilibili.com/x/v2/dm/web/view'</span><span style="color:#D7BA7D;"> \\</span></span>
|
||
<span class="line"><span style="color:#D4D4D4;">--data-urlencode </span><span style="color:#CE9178;">'type=1'</span><span style="color:#D7BA7D;"> \\</span></span>
|
||
<span class="line"><span style="color:#D4D4D4;">--data-urlencode </span><span style="color:#CE9178;">'oid=236871317'</span><span style="color:#D7BA7D;"> \\</span></span>
|
||
<span class="line"><span style="color:#D4D4D4;">--data-urlencode </span><span style="color:#CE9178;">'pid=797164471'</span><span style="color:#D7BA7D;"> \\</span></span>
|
||
<span class="line"><span style="color:#D4D4D4;">-b </span><span style="color:#CE9178;">'SESSDATA=xxx'</span><span style="color:#D7BA7D;"> \\</span></span>
|
||
<span class="line"><span style="color:#D4D4D4;">-o </span><span style="color:#CE9178;">'danmaku_view.bin'</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>响应正文为protubuf二进制数据</p><h2 id="实例" tabindex="-1"><a class="header-anchor" href="#实例"><span>实例</span></a></h2><h3 id="获取互动弹幕" tabindex="-1"><a class="header-anchor" href="#获取互动弹幕"><span>获取互动弹幕</span></a></h3><p>获取并显示视频<code>av797164471(cid=236871317)</code>的所有互动弹幕</p><div class="language-python line-numbers-mode" data-highlighter="shiki" data-ext="python" style="background-color:#1E1E1E;color:#D4D4D4;"><pre class="shiki dark-plus vp-code"><code class="language-python"><span class="line"><span style="color:#C586C0;">import</span><span style="color:#D4D4D4;"> web_dmview_pb2</span></span>
|
||
<span class="line"><span style="color:#C586C0;">import</span><span style="color:#D4D4D4;"> requests</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#D4D4D4;">AVID = </span><span style="color:#B5CEA8;">797164471</span></span>
|
||
<span class="line"><span style="color:#D4D4D4;">CID = </span><span style="color:#B5CEA8;">236871317</span></span>
|
||
<span class="line"><span style="color:#D4D4D4;">url = </span><span style="color:#569CD6;">f</span><span style="color:#CE9178;">'https://api.bilibili.com/x/v2/dm/web/view?type=1&oid=</span><span style="color:#569CD6;">{</span><span style="color:#D4D4D4;">CID</span><span style="color:#569CD6;">}</span><span style="color:#CE9178;">&pid=</span><span style="color:#569CD6;">{</span><span style="color:#D4D4D4;">AVID</span><span style="color:#569CD6;">}</span><span style="color:#CE9178;">'</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#D4D4D4;">data = requests.get(url)</span></span>
|
||
<span class="line"><span style="color:#D4D4D4;">target = web_dmview_pb2.DmWebViewReply()</span></span>
|
||
<span class="line"><span style="color:#D4D4D4;">target.ParseFromString(data.content)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#DCDCAA;">print</span><span style="color:#D4D4D4;">(</span><span style="color:#569CD6;">f</span><span style="color:#CE9178;">'互动弹幕数=</span><span style="color:#569CD6;">{</span><span style="color:#DCDCAA;">len</span><span style="color:#D4D4D4;">(target.commandDms)</span><span style="color:#569CD6;">}</span><span style="color:#CE9178;">'</span><span style="color:#D4D4D4;">)</span></span>
|
||
<span class="line"><span style="color:#C586C0;">for</span><span style="color:#D4D4D4;"> i </span><span style="color:#C586C0;">in</span><span style="color:#D4D4D4;"> target.commandDms:</span></span>
|
||
<span class="line"><span style="color:#DCDCAA;"> print</span><span style="color:#D4D4D4;">(</span><span style="color:#569CD6;">f</span><span style="color:#CE9178;">'''</span><span style="color:#569CD6;">\\</span></span>
|
||
<span class="line"><span style="color:#CE9178;">---弹幕ID=</span><span style="color:#569CD6;">{</span><span style="color:#D4D4D4;">i.id</span><span style="color:#569CD6;">}</span></span>
|
||
<span class="line"><span style="color:#CE9178;">---视频cid=</span><span style="color:#569CD6;">{</span><span style="color:#D4D4D4;">i.oid</span><span style="color:#569CD6;">}</span></span>
|
||
<span class="line"><span style="color:#CE9178;">---发送者mid=</span><span style="color:#569CD6;">{</span><span style="color:#D4D4D4;">i.mid</span><span style="color:#569CD6;">}</span></span>
|
||
<span class="line"><span style="color:#CE9178;">---弹幕指令=</span><span style="color:#569CD6;">{</span><span style="color:#D4D4D4;">i.command</span><span style="color:#569CD6;">}</span></span>
|
||
<span class="line"><span style="color:#CE9178;">---弹幕文字=</span><span style="color:#569CD6;">{</span><span style="color:#D4D4D4;">i.content</span><span style="color:#569CD6;">}</span></span>
|
||
<span class="line"><span style="color:#CE9178;">---弹幕出现时间=</span><span style="color:#569CD6;">{</span><span style="color:#D4D4D4;">i.progress</span><span style="color:#569CD6;">}</span></span>
|
||
<span class="line"><span style="color:#CE9178;">---弹幕负载数据=</span><span style="color:#569CD6;">{</span><span style="color:#D4D4D4;">i.extra</span><span style="color:#569CD6;">}</span></span>
|
||
<span class="line"><span style="color:#CE9178;">---弹幕ID(字串)=</span><span style="color:#569CD6;">{</span><span style="color:#D4D4D4;">i.idStr</span><span style="color:#569CD6;">}</span><span style="color:#CE9178;">'''</span></span>
|
||
<span class="line"><span style="color:#D4D4D4;">)</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>输出为:</p><div class="language- line-numbers-mode" data-highlighter="shiki" data-ext="" style="background-color:#1E1E1E;color:#D4D4D4;"><pre class="shiki dark-plus vp-code"><code class="language-"><span class="line"><span>互动弹幕数=1</span></span>
|
||
<span class="line"><span>---弹幕ID=38469676112019463</span></span>
|
||
<span class="line"><span>---视频cid=236871317</span></span>
|
||
<span class="line"><span>---发送者mid=501183549</span></span>
|
||
<span class="line"><span>---弹幕指令=#UP#</span></span>
|
||
<span class="line"><span>---弹幕文字=这个视频没有恰饭!别紧张!</span></span>
|
||
<span class="line"><span>---弹幕出现时间=157818</span></span>
|
||
<span class="line"><span>---弹幕负载数据={"icon":"https://i1.hdslb.com/bfs/face/559abe31f561f71f3106d8ee7b2065cac50c1235.jpg"}</span></span>
|
||
<span class="line"><span>---弹幕ID(字串)=38469676112019463</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="获取bas-代码-弹幕专包" tabindex="-1"><a class="header-anchor" href="#获取bas-代码-弹幕专包"><span>获取BAS(代码)弹幕专包</span></a></h3><p>BAS弹幕(<code>pool=2</code> <code>mode=9</code>)只能从此包获取,代码弹幕(<code>pool=2</code> <code>mode=8</code>)也能从此包获取</p><p>获取并显示视频<code>av2(cid=62131)</code>的所有BAS(代码)弹幕专包</p><div class="language-python line-numbers-mode" data-highlighter="shiki" data-ext="python" style="background-color:#1E1E1E;color:#D4D4D4;"><pre class="shiki dark-plus vp-code"><code class="language-python"><span class="line"><span style="color:#C586C0;">import</span><span style="color:#D4D4D4;"> web_dmview_pb2</span></span>
|
||
<span class="line"><span style="color:#C586C0;">import</span><span style="color:#D4D4D4;"> requests</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#D4D4D4;">AVID = </span><span style="color:#B5CEA8;">2</span></span>
|
||
<span class="line"><span style="color:#D4D4D4;">CID = </span><span style="color:#B5CEA8;">62131</span></span>
|
||
<span class="line"><span style="color:#D4D4D4;">url = </span><span style="color:#569CD6;">f</span><span style="color:#CE9178;">'https://api.bilibili.com/x/v2/dm/web/view?type=1&oid=</span><span style="color:#569CD6;">{</span><span style="color:#D4D4D4;">CID</span><span style="color:#569CD6;">}</span><span style="color:#CE9178;">&pid=</span><span style="color:#569CD6;">{</span><span style="color:#D4D4D4;">AVID</span><span style="color:#569CD6;">}</span><span style="color:#CE9178;">'</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#D4D4D4;">data = requests.get(url)</span></span>
|
||
<span class="line"><span style="color:#D4D4D4;">target = web_dmview_pb2.DmWebViewReply()</span></span>
|
||
<span class="line"><span style="color:#D4D4D4;">target.ParseFromString(data.content)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#DCDCAA;">print</span><span style="color:#D4D4D4;">(</span><span style="color:#569CD6;">f</span><span style="color:#CE9178;">'特殊弹幕包数=</span><span style="color:#569CD6;">{</span><span style="color:#DCDCAA;">len</span><span style="color:#D4D4D4;">(target.specialDms)</span><span style="color:#569CD6;">}</span><span style="color:#CE9178;">'</span><span style="color:#D4D4D4;">)</span></span>
|
||
<span class="line"><span style="color:#C586C0;">for</span><span style="color:#D4D4D4;"> i </span><span style="color:#C586C0;">in</span><span style="color:#D4D4D4;"> target.specialDms:</span></span>
|
||
<span class="line"><span style="color:#DCDCAA;"> print</span><span style="color:#D4D4D4;">(</span><span style="color:#569CD6;">f</span><span style="color:#CE9178;">'特殊弹幕包url=</span><span style="color:#569CD6;">{</span><span style="color:#D4D4D4;">i</span><span style="color:#569CD6;">}</span><span style="color:#CE9178;">'</span><span style="color:#D4D4D4;">)</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>输出为:</p><div class="language- line-numbers-mode" data-highlighter="shiki" data-ext="" style="background-color:#1E1E1E;color:#D4D4D4;"><pre class="shiki dark-plus vp-code"><code class="language-"><span class="line"><span>特殊弹幕包数=1</span></span>
|
||
<span class="line"><span>特殊弹幕包url=https://i0.hdslb.com/bfs/dm/b0d5f08c12be59292aa0d4e09b6dd8e54c2ba886.bin</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div>`,47)),e("p",null,[s[1]||(s[1]=n("使用")),o(a,{to:"/docs/danmaku/danmaku_proto.html#%E8%8E%B7%E5%8F%96%E5%AE%9E%E6%97%B6%E5%BC%B9%E5%B9%95"},{default:d(()=>s[0]||(s[0]=[n("普通分段包弹幕")])),_:1,__:[0]}),s[2]||(s[2]=n("的proto结构体反序列化此bin数据"))])])}const b=l(i,[["render",D]]),C=JSON.parse('{"path":"/docs/danmaku/danmaku_view_proto.html","title":"弹幕元数据","lang":"zh-CN","frontmatter":{},"git":{"updatedTime":1720284320000,"contributors":[{"name":"SocialSisterYi","username":"SocialSisterYi","email":"1440239038@qq.com","commits":2,"url":"https://github.com/SocialSisterYi"},{"name":"wuziqian211","username":"wuziqian211","email":"65224318+wuziqian211@users.noreply.github.com","commits":2,"url":"https://github.com/wuziqian211"}],"changelog":[{"hash":"2382b768aaafef33247bf09510649e2501341b26","time":1720284320000,"email":"65224318+wuziqian211@users.noreply.github.com","author":"wuziqian211","message":"feat: 更新部分接口文档的表述 (#1049)"},{"hash":"a7c7788eaaff36a6f4b59d07d8a72900390d7ac2","time":1720277978000,"email":"65224318+wuziqian211@users.noreply.github.com","author":"wuziqian211","message":"更新 danmaku_view_proto.md"},{"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_view_proto.md"}');export{b as comp,C as data};
|