文章目录[隐藏]
2017/2/10: 截止目前的文章版本已经回退到最初版本,不一定会继续填坑。相关协议将会于未来开源的biliapi(python)中实现。
最近因为一些原因,所以在研究B站直播间相关的内容。结合逆向的Android客户端源码,我得以更深的了解B站直播间的协议。早些时候有dalao就解析过这个协议(链接),但是dalao是分析弹幕姬的,所以有很多疏漏或不清楚的地方。
目前,本文的内容尚未补全。
一般的,一个B站的直播间数据包的协议头为16字节。协议头的大致结构如下:
00000000: 00 00 00 35 00 10 00 01 00 00 00 07 00 00 00 01
无论是发送数据还是返回数据,一般来说都是需要附上数据头。数据包类型已知的有以下几种:
对于响应包,客户端显示4、6、7都是无效的数据包类型(参见com.bilibili.cfu)。而com.bilibili.cfw显示0、2-7似乎都是有效的值。
这两个数据包的正文相同,都是json格式的:
{"roomid ":0,"uid":0}
心跳包30s左右发送一次。
这些数据包的数据包类型是相同的(都是5),而返回格式大体相同:
{"cmd":"...","info":xxx}
其中,cmd允许的值有:
具体数据格式有待更新。
直播人数包的数据类型为3。这个包一般在客户端发送心跳包以后返回。正文部分只有一个整数,就是直播间当前人数。