我已经写成了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协议相关推荐

  1. 极简式 Unity 获取 bilibili 直播弹幕、SC、上舰、礼物等 插件

    极简式 Unity 获取 bilibili 直播弹幕.SC.上舰.礼物等 1. 声明 下载链接 软件均仅用于学习交流,请勿用于任何商业用途! 2. 介绍 该项目为Unity实时爬取B站直播弹幕. 项目 ...

  2. C#获取虎牙直播弹幕

    C#获取虎牙直播弹幕 连接websocket接口并监听弹幕消息事件获取直播间的弹幕信息 注册虎牙开放平台 注册并通过实名认证去获取生成JWT token 的appId.appSecret参数.点击查看 ...

  3. Bilibili直播弹幕抓取(1):WebSocket

    Bilibili直播弹幕抓取(1):WebSocket 转载自https://ihomura.cn/2018/05/14/Bilibili%E7%9B%B4%E6%92%AD%E5%BC%B9%E5% ...

  4. 乐视直播api编写java,GitHub - czp3009/bilibili-live-api: bilibili 直播弹幕协议 API Java 版(deprecated)...

    Deprecated 本仓库已废弃. 本项目使用 Bilibili Web 协议, 随着 Bilibili 前端的更新, 已经无法正常使用. 本项目仅提供 Bilibili 直播间的弹幕获取有关 AP ...

  5. golang bilibili直播弹幕姬

    求个star,orz GitHub - k-si/bilibili_live: 哔哩哔哩直播弹幕姬 bilibili直播弹幕姬来啦! 虽然市面上已有很多成熟的直播姬app,但还是想自己手搓一个以获得些 ...

  6. 虚幻引擎获取bilibili直播间弹幕插件的使用教程

    1.首先启用插件 2.在任意地方编写如下代码 并填入房间ID,并通过UpdateList设置更新频率 GetBiliHandle 获取bilibili句柄BindEventtoOnResult 绑定返 ...

  7. BiliBili直播 弹幕信息抓取

    写在前面 最近由于自己在B站直播的原因,对B站本身提供的实时弹幕不太满意,于是自己抓包写了一个bilibili的弹幕协议,但还有一部分没有完成.留下的坑以后再慢慢填吧. socket包获拦截工具:Wi ...

  8. 淘宝直播弹幕API接口协议

    最近的淘宝直播弹幕接口很火,电商大数据分析 .打标等等场景都是刚需,为此刚好分析了一下淘宝/天猫的这个电商直播接口协议,但是容易出现 {"ret":["FAIL_SYS_ ...

  9. 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- ...

最新文章

  1. 【廖雪峰python入门笔记】字符串_转义字符的使用
  2. 【ArcGIS 10.2新特性】Geodatabase 10.2 常见问题
  3. java arraylist初始大小_Java - ArrayList默认初始值
  4. SIFT讲解(SIFT的特征点选取以及描述是重点)
  5. 微软最新GDI漏洞MS08-052安全解决方案
  6. Warning: Missing charsets in String to FontSet conversion
  7. android dialogfragment style,Android DialogFragment 使用
  8. react项目开发问题整理
  9. python jieba库分词_Python基于jieba库进行简单分词及词云功能实现方法
  10. JAVA-JVM调优标志
  11. linux命令详解词典pdf,[计算机]linux命令详解词典
  12. 简述软件黑盒测试的方法,简述什么是黑盒测试方法
  13. visio绘图与processon绘图比较
  14. Git如何统计代码行数
  15. java读取txt文件内容_Java读取TXT文件内容的方法
  16. 运用Doolitle分解法解线性方程组
  17. linux 下 批量添加后缀名,Linux下批量修改后缀名
  18. 攻防世界 Web-mfw
  19. tushare接口get_realtime_quotes报错:AssertionError: 33 columns passed, passed data had 34 columns
  20. 电脑能正常上网百度,但是网络显示无Internet

热门文章

  1. java批量处理数据_Java批量处理数据
  2. HMI-45-【控制台】控制台代码迁移
  3. 简单实现家庭记账程序(java)
  4. 信息安全复习三:古典密码之设计好的密码算法
  5. vue2关于EventBus使用
  6. IOS 9.3.3更后打电话没声音解决方法
  7. timezoneinfo移植
  8. 运营商应用商店现状(一)-----MM、色狼和警察的故事
  9. 服务外包技术培训——后端开发(Java)
  10. 网络管理维护(基本服务)