获取bilibili直播弹幕的WebSocket协议

我已经写成了Python版弹幕客户端

连接

首先URL中的ID和真正的房间ID不一样,要先请求https://api.live.bilibili.com/room/v1/Room/room_init?id=URL中的ID获取房间ID。返回的是JSON数据,['data']['room_id']就是真正的房间ID

然后用WebSocket连接wss://broadcastlv.chat.bilibili.com:2245/sub

封包格式

封包由头部和数据组成,字节序均为大端模式

头部格式:

偏移量 长度 含义
0 4 封包总大小
4 2 头部长度
6 2 协议版本,目前是1
8 4 操作码(封包类型)
12 4 sequence,可以取常数1

已知的操作码:

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

数据格式:一般为JSON字符串UTF-8编码

认证并加入房间

连接后客户端先发认证包

{
  "uid": 0表示未登录,否则为用户ID,
  "roomid": 房间ID,
  "protover": 1,
  "platform": "web",
  "clientver": "1.4.0"
}

心跳包

客户端要每30s发一次

命令包

根据前端代码,数据也可能是多条命令的数组,不过我只收到过单条命令。每条命令中['cmd']表示具体命令

已知的命令:

命令 含义
DANMU_MSG 收到弹幕
SEND_GIFT 有人送礼
WELCOME 欢迎加入房间
WELCOME_GUARD 欢迎房管加入房间
SYS_MSG 系统消息
PREPARING 主播准备中
LIVE 直播开始
WISH_BOTTLE 许愿瓶?

收到弹幕

数据示例:

{
    "info": [
        [
            0, 
            1, 
            25, 
            16777215, 
            1526267394, 
            -
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值