获取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, -1189421307, 0, "46bc1d5e", 0], "空投!", [10078392, "白の驹", 0, 0, 0, 10000, 1, ""], [11, "狗雨", "宫本狗雨", 102, 10512625, ""], [23, 0, 5805790, ">50000"], ["title-111-1", "title-111-1"], 0, 0, {"uname_color": ""}], "cmd": "DANMU_MSG"
}
可以看出['info'][1]
是弹幕内容,['info'][2][1]
是弹幕作者
有人送礼
数据示例:
{"cmd": "SEND_GIFT", "data": {"giftName": "辣条", "num": 7, "uname": "夏目玲子swd", "face": "http://i2.hdslb.com/bfs/face/9524d7af30933b5b1775cad35c84c7088973ee82.jpg", "guard_level": 0, "rcost": 334559138, "uid": 37050641, "top_list": [{"uid": 6179862, "uname": "MiKu爬呀爬", "face": "http://i0.hdslb.com/bfs/face/63f6017b9ebc90da8190b79dd43f73b5fe3a80fa.jpg", "rank": 1, "score": 694800, "guard_level": 0, "isSelf": 0}, {"uid": 889098, "uname": "CI0rHJpguwHIMZZ9", "face": "http://i1.hdslb.com/bfs/face/d0c40aa0fdfe1e79603d98869875fc173c1aeebb.jpg", "rank": 2, "score": 618600, "guard_level": 3, "isSelf": 0}, {"uid": 6573945, "uname": "爱奇艺视频", "face": "http://i0.hdslb.com/bfs/face/e1f0940fd35c33fbdf2f159fc520778030973287.jpg", "rank": 3, "score": 478000, "guard_level": 0, "isSelf": 0}], "timestamp": 1526267395, "giftId": 1, "giftType": 0, "action": "喂食", "super": 0, "super_gift_num": 0, "price": 100, "rnd": "77030604", "newMedal": 0, "newTitle": 0, "medal": [ ], "title": "", "beatId": "", "biz_source": "live", "metadata": "", "remain": 0, "gold": 0, "silver": 0, "eventScore": 0, "eventNum": 0, "smalltv_msg": [ ], "specialGift": null, "notice_msg": [ ], "capsule": {"colorful": {"coin": 0, "change": 0, "progress": {"now": 0, "max": 5000 }}, "normal": {"coin": 0, "change": 0, "progress": {"now": 0, "max": 10000 }}, "move": 1}, "addFollow": 0, "effect_block": 1, "coin_type": "silver", "total_coin": 700}
}
自己分析吧,我只对弹幕感兴趣…
获取bilibili直播弹幕的WebSocket协议相关推荐
- 极简式 Unity 获取 bilibili 直播弹幕、SC、上舰、礼物等 插件
极简式 Unity 获取 bilibili 直播弹幕.SC.上舰.礼物等 1. 声明 下载链接 软件均仅用于学习交流,请勿用于任何商业用途! 2. 介绍 该项目为Unity实时爬取B站直播弹幕. 项目 ...
- C#获取虎牙直播弹幕
C#获取虎牙直播弹幕 连接websocket接口并监听弹幕消息事件获取直播间的弹幕信息 注册虎牙开放平台 注册并通过实名认证去获取生成JWT token 的appId.appSecret参数.点击查看 ...
- Bilibili直播弹幕抓取(1):WebSocket
Bilibili直播弹幕抓取(1):WebSocket 转载自https://ihomura.cn/2018/05/14/Bilibili%E7%9B%B4%E6%92%AD%E5%BC%B9%E5% ...
- 乐视直播api编写java,GitHub - czp3009/bilibili-live-api: bilibili 直播弹幕协议 API Java 版(deprecated)...
Deprecated 本仓库已废弃. 本项目使用 Bilibili Web 协议, 随着 Bilibili 前端的更新, 已经无法正常使用. 本项目仅提供 Bilibili 直播间的弹幕获取有关 AP ...
- golang bilibili直播弹幕姬
求个star,orz GitHub - k-si/bilibili_live: 哔哩哔哩直播弹幕姬 bilibili直播弹幕姬来啦! 虽然市面上已有很多成熟的直播姬app,但还是想自己手搓一个以获得些 ...
- 虚幻引擎获取bilibili直播间弹幕插件的使用教程
1.首先启用插件 2.在任意地方编写如下代码 并填入房间ID,并通过UpdateList设置更新频率 GetBiliHandle 获取bilibili句柄BindEventtoOnResult 绑定返 ...
- BiliBili直播 弹幕信息抓取
写在前面 最近由于自己在B站直播的原因,对B站本身提供的实时弹幕不太满意,于是自己抓包写了一个bilibili的弹幕协议,但还有一部分没有完成.留下的坑以后再慢慢填吧. socket包获拦截工具:Wi ...
- 淘宝直播弹幕API接口协议
最近的淘宝直播弹幕接口很火,电商大数据分析 .打标等等场景都是刚需,为此刚好分析了一下淘宝/天猫的这个电商直播接口协议,但是容易出现 {"ret":["FAIL_SYS_ ...
- Bilibili直播弹幕抓取(2):Fiddler与WireShark
转载自: https://ihomura.cn/2018/05/15/Bilibili%E7%9B%B4%E6%92%AD%E5%BC%B9%E5%B9%95%E6%8A%93%E5%8F%96-2- ...
最新文章
- 【廖雪峰python入门笔记】字符串_转义字符的使用
- 【ArcGIS 10.2新特性】Geodatabase 10.2 常见问题
- java arraylist初始大小_Java - ArrayList默认初始值
- SIFT讲解(SIFT的特征点选取以及描述是重点)
- 微软最新GDI漏洞MS08-052安全解决方案
- Warning: Missing charsets in String to FontSet conversion
- android dialogfragment style,Android DialogFragment 使用
- react项目开发问题整理
- python jieba库分词_Python基于jieba库进行简单分词及词云功能实现方法
- JAVA-JVM调优标志
- linux命令详解词典pdf,[计算机]linux命令详解词典
- 简述软件黑盒测试的方法,简述什么是黑盒测试方法
- visio绘图与processon绘图比较
- Git如何统计代码行数
- java读取txt文件内容_Java读取TXT文件内容的方法
- 运用Doolitle分解法解线性方程组
- linux 下 批量添加后缀名,Linux下批量修改后缀名
- 攻防世界 Web-mfw
- tushare接口get_realtime_quotes报错:AssertionError: 33 columns passed, passed data had 34 columns
- 电脑能正常上网百度,但是网络显示无Internet