B站直播间协议指南

2022-01-14 18:12:09 浏览数 (1)

文章目录[隐藏]

  • 协议头
  • 请求
    • 进入房间、心跳包
  • 响应
    • 弹幕、送礼、进入提示、开始直播、准备直播
    • 直播人数

2017/2/10: 截止目前的文章版本已经回退到最初版本,不一定会继续填坑。相关协议将会于未来开源的biliapi(python)中实现。

最近因为一些原因,所以在研究B站直播间相关的内容。结合逆向的Android客户端源码,我得以更深的了解B站直播间的协议。早些时候有dalao就解析过这个协议(链接),但是dalao是分析弹幕姬的,所以有很多疏漏或不清楚的地方。

目前,本文的内容尚未补全。

协议头

一般的,一个B站的直播间数据包的协议头为16字节。协议头的大致结构如下:

代码语言:javascript复制
00000000: 00 00 00 35  00 10 00 01  00 00 00 07  00 00 00 01
  • 1-4个字节:整数,数据包大小
  • 5-6个字节:短整数,固定值16(推测是协议头长度)
  • 7-8个字节:短整数,推测是使用设备(安卓端写死为0,dalao文章中固定为1)
  • 9-12个字节:整数,数据包类型
  • 13-16个字节:整数,推测是使用设备(和7-8个字节相同)

无论是发送数据还是返回数据,一般来说都是需要附上数据头。数据包类型已知的有以下几种:

  • 请求:2(心跳包)、7(用户进入房间)
  • 响应:1,2,3(人数包,1、2是dalao文章中提到的,实际并未发现)、5(弹幕、礼物等等数据)

对于响应包,客户端显示4、6、7都是无效的数据包类型(参见com.bilibili.cfu)。而com.bilibili.cfw显示0、2-7似乎都是有效的值。

请求

进入房间、心跳包

这两个数据包的正文相同,都是json格式的:

代码语言:javascript复制
{"roomid ":0,"uid":0}

心跳包30s左右发送一次。

响应

弹幕、送礼、进入提示、开始直播、准备直播

这些数据包的数据包类型是相同的(都是5),而返回格式大体相同:

代码语言:javascript复制
{"cmd":"...","info":xxx}

其中,cmd允许的值有:

  • LIVE                             – 开始直播
  • PREPARING            – 准备直播
  • DANMU_MSG        – 弹幕信息
  • SEND_GIFT             – 送礼信息
  • WELCOME               – 进入房间信息(如姥爷进入房间有提示)

具体数据格式有待更新。

直播人数

直播人数包的数据类型为3。这个包一般在客户端发送心跳包以后返回。正文部分只有一个整数,就是直播间当前人数。

0 人点赞