B 站弹幕 protobuf 分析
首先了解 Protobuf 是什么 ?
- 网站调试分析
首先 打开 网址的开发者工具,找到所发起的请求
怎么区分 是不是protobuf 格式呢,可以看看请求的返回类型
content-type: application/octet-stream
找到 对应请求链接,然后查看参数情况,和分析参数
oid 和 pid 才是要看的分析的参数
type: 1
oid: 742644858
pid: 597419733
segment_index: 1
- 请求分析
请求是个 xhr 请求,可以打上 xhr 的断点分析,通过调用栈去分析来源和前后关系
通过 xhr 断点断下,后进去对应的调用栈JS文件,在里面搜索请求的参数 : segment_index
这里参数也长,如果能搜索到,那结果会相对少,更好定位到 发起请求的位置
var r = dr.b.DM_PB + "?type=1&oid=" + a.cid + "&pid=" + a.aid + "&segment_index=" + i;
可以看到 代码,是拼接的 url ,发起弹幕请求的url ,也能看到 protoBuffer 字眼,大概率就是这个位置了,先打上断点,然后往下跟,调试
继续断点调试,往下跟,然后到这里,可以看到
var r = a.protoMessage[t].decode(new Uint8Array(i.data))
, o = a.protoMessage[t].toObject(r);
在控制台 打野 r 和 o 可以看到 就是 弹幕的 信息
protobuf 数据格式 的解析 ,可以看到 这个 e 的结构对应的字段值类型
JSON.stringify(e)
然后通过 json 工具,看到结构化的数据,和数据里面的键 和 数据类型 能对应上
到这里 大概就是 over了,然后 用 protobuf 的格式 去 解析数据
- 参考 Protobuf 的使用
解析结果 :
最终的结果 也是 ok ok ok 的 ,over !