歌曲封面 未知作品

网站已运行 1 年 235 天 8 小时 43 分

Powered by Typecho & Sunny

7 online · 45 ms

歌曲封面 未知作品

网站已运行 1 年 235 天 8 小时 43 分

Powered by Typecho & Sunny

9 online · 48 ms

小野博客 小野(Hirono)博客的个人网站,主要讲述关于小野的一些陈芝麻烂谷子事。网络、生活、我的主张,也是一个自留地
Title

B站-BiliBili直播弹幕WebSocket协议浅析(二)

小野

·

📟前端日记

·

Article
⚠️ 本文最后更新于2024年05月30日,已经过了175天没有更新,若内容或图片失效,请留言反馈

谢谢大家继续阅读,小野带着你继续来分析

没有看过第一章内容的朋友可以点击文章末的链接访问阅读。?

封包

上一章我们不仅抓包获取到了用户id跟房间id。其实服务器还给我们返回了一个心跳包

先给大家列出一份已知的参数:

参数说明
2客户端发送的心跳包
3人气值,数据不是JSON,是4字节整数
5命令,数据中['cmd']表示具体命令
7认证并加入房间
8服务器发送的心跳包

这是服务器返回的一个数据包,如下:

♾️ shell 代码:
          x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF
===========================================================
0000000x |00 00 00 10 00 10 00 01 00 00 00 08 00 00 00 01
-----------------------------------------------------------

数据包介绍:

  1. 00 00 00 10 :封包长度
  2. 00 10:头部长度
  3. 00 01:协议版本
  4. 00 00 00 08:操作码
  5. 00 00 00 01:常数

上面数显示操作码为08,这是服务器发来的心跳包,表示服务器在线。

心跳包

每隔30秒需要向服务器发送心跳包保持在线状态。从截获的心跳包如下:

♾️ shell 代码:
          x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF
===========================================================
0000000x |00 00 00 1F 00 10 00 01 00 00 00 02 00 00 00 01
0000001x |5B 6F 62 6A 65 63 74 20 4F 62 6A 65 63 74 5D
-----------------------------------------------------------
[object Object]
===========================================================
心跳包的主体是[object Object]文本. 不知道为什么,暂时没有找到参考答案

接下来我们要分析重点了弹幕数据包

数据包

这个部分可能涉及到的内容比较多,也是比较核心的部分,小野就拿其中的弹幕数据包来分析。

弹幕数据包

这些数据包的操作码都是恒定为5。很奇怪的是,这些数据包的版本位定义是0,sequence常数也是**0。

♾️ shell 代码:
          x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF
===========================================================
0000000x |00 00 00 C7 00 10 00 00 00 00 00 05 00 00 00 00
0000001x |7B 22 69 6E 66 6F 22 3A 5B 5B 30 2C 31 2C 32 35
0000002x |2C 31 36 37 37 37 32 31 35 2C 31 35 34 34 30 38
0000003x |31 37 37 31 2C 39 33 36 35 37 35 39 32 39 2C 30
0000004x |2C 22 38 32 63 61 61 34 31 39 22 2C 30 2C 30 5D
0000005x |2C 22 E5 96 B5 22 2C 5B 32 37 33 32 32 34 35 36
0000006x |2C 22 E5 86 B0 E5 9D 97 54 69 4F 32 22 2C 30 2C
0000007x |30 2C 30 2C 31 30 30 30 30 2C 31 2C 22 22 5D 2C
0000008x |5B 5D 2C 5B 31 2C 30 2C 39 38 36 38 39 35 30 2C
0000009x |22 3E 35 30 30 30 30 22 5D 2C 5B 5D 2C 30 2C 30
000000Ax |2C 7B 22 75 6E 61 6D 65 5F 63 6F 6C 6F 72 22 3A
000000Bx |22 22 7D 5D 2C 22 63 6D 64 22 3A 22 44 41 4E 4D
000000Cx |55 5F 4D 53 47 22 7D
---------------------------------------------------------
{"info":[[0,1,25,1444215,1706835129,9999329,0,"81caa2",0,0],"加油",[27123256,"徐安条",0,0,0,10000,1,""],[],[1,0,986120,">50000"],[],0,0,{"uname_color":""}],"cmd":"DANMU_MSG"}
=========================================================

解释:cmd参数定义为DANMU_MSG,另一个字段为info,是一个数组,我们来分析一下:
建议格式化一下json

♾️ json 代码:
info:
    [0]:  [0,1,25,1444215,1706835129,9999329,0,"81caa2",0,0]
    [1]:  "加油"
    [2]:  [27123256,"徐安条",0,0,0,10000,1,""]
    [3]:  []
    [4]:  [1,0,9868950,">50000"]
    [5]:  []
    [6]:  0
    [7]:  0
    [8]:  {"uname_color":""}

解析:
[0]时间戳
[1]弹幕文本内容
[2]用户基本信息
仔细观察可以看出[0]中的1706835129是一个时间戳,转换成北京时间是2024-02-02 08:52:09
这与弹幕送出来的时间是吻合的,所以[0]应该是一些弹幕元信息。

这是我从别的地方拷贝过来的参数说明:

参数说明
0Array 弹幕元信息。[0]一个为pool的值,感觉一直都是0[1]为弹幕模式,1是普通弹幕,2是顶部弹幕,3是底部弹幕。[2]是字号,[3]为颜色,[4]为弹幕发送时间(Unix时间戳)
1String 弹幕内容
2Array 发言人信息。[0]为用户ID[1]为用户名称,[2]是舰长或者是房管的标志位,[3]是老爷标志位,[4]是年费老爷标志位。(这三个标志位是猜测)
3Array 粉丝勋章相关的讯息。[0]是粉丝勋章等级,[1]是粉丝勋章名称。[2]粉丝勋章来源播主,[3]来源播主的房间号,[4]一个叫rnd的东西,具体rnd是干什么的不知道,是一个随机数,桌面版页面中可以通过window.BilibiliLive.RND查看到。
4Array 用户等级相关讯息。[0]是用户等级,[3]是排名。
5Array 活动头衔相关。

目前只分析到这里?。待续。。。。。

B站-BiliBili直播弹幕WebSocket协议浅析(一)

广告

页底广告 页底广告
此页面评论区已关闭
搜 索 消 息 足 迹
你还不曾留言过..
你还不曾留下足迹..
博主 网站设置有【CDN】缓存,留言等评论内容需要12小时才能显示! 不再显示
博主