B站直播间协议指南

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
  • 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格式的:

{"roomid ":0,"uid":0}

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

响应

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

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

{"cmd":"...","info":xxx}

其中,cmd允许的值有:

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

具体数据格式有待更新。

直播人数

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

分享到

KAAAsS

喜欢二次元的程序员,喜欢发发教程,或者偶尔开坑。(←然而并不打算填)

相关日志

  1. 没有图片
  2. 没有图片
  3. 没有图片
  4. 没有图片
  5. 没有图片
  6. 没有图片

评论

  1. 丁香 2017.02.07 5:59下午

    o(* ̄▽ ̄*)ブ

  2. 丁臭 2017.09.04 3:15下午

    o(* ̄▽ ̄*)ブ感谢分享。

在此评论中不能使用 HTML 标签。