接上篇

下面开始分析弹幕信息:

当我们在完成和服务器的握手之后,b站的弹幕服务器就会开始不停的开始给我们推送相关房间的弹幕消息了。老规矩前面16个字节是这个包的相关信息,我们先来看下这条消息的前面16字节在说什么。

00 00 01 38 头部四字节表达数据大小这可以看到是312字节。

00 10 这两个字节还是magic_number。这里是16。

00 00 版本号0.

00 00 00 05 上篇我们介绍了07是进入房间信息,这里05代表弹幕消息。

00 00 00 00 包类型正常消息包。

然后后面的就是我们需要解析的数据了,这里使用utf-8 encode之后传输的,所以我们拿到之后需要utf-8 decode一下,然后在json decode一下。拿到的数据如下

{"info": [

[

0,1,25,16777215,1508919436,"1508918356",

0,"58736ea5",

0

],"(_`)",

[2424710,"",1,1,1,10000,1],

[17,"","yao",1320,16752445,""],

[50,

0,16746162,313],

["title-112-1","title-112-1"],

0,

0

],"cmd": "DANMU_MSG"}

这是一条弹幕消息,所以cmd这里是弹幕消息。另外还有gift和welcome两个cmd消息,分别代表的是观众老爷送的礼物和欢迎开通了vip的观众老爷而广播的特殊弹幕消息。由于info里面包含了太多奇奇怪怪的信息,所以挑我们需要的重点来说,我们最关注的说了什么在info[1]。在wireshark数据界面的右侧,通常我们可以看到ascii的直接显示,但是如果我们发的是中文数据,这里就不会显示了。我们需要拿到回传回来的数据decode成utf-8才可以正确显示他们,这里要注意。

其实在看16进制数据的时候。。根据规则用肉眼就能大致分辨一下数据是不是utf-8处理过的。例如我们来看这个数据:

根据我刚才说的这里没有办法正确显示出utf-8编码的数据。那么我们如何判断他是否是utf-8的数据或者解析出他到底说的些什么呢。

让我们看下hex那边从0080 那行e6开始首先e6用二进制是1110 0110这里我们假设他是utf-8编码,那么他就是3个字节的编码我们需要再继续查看后面两个字节。分别是88和91 用二进制是1000 1000 1001 0001没问题符合三个字节的条件我们把它打印出来看下是个什么字。

到此我们就知道怎么愉快的拿到弹幕数据了。

如此其他数据其实差不多的,再让我们来看一个礼物的数据,这里直接用了unicode所以在wireshark里面我们能直接看到\u开头的字符串:

{"cmd": "SEND_GIFT","data": {"giftName": "辣条","num": 4,"uname": "帅帅的空白","rcost": 2497905,"uid": 10068441,"top_list": [

{"uid": 10068441,"uname": "帅帅的空白","coin": 741500,"face": "http://i2.hdslb.com/bfs/face/60455d5390f51615d5cf36da2e04abcad96712e2.jpg","guard_level": 3,"rank": 1,"score": 741500},

{"uid": 6672222,"uname": "勿讠勿語","coin": 352800,"face": "http://i0.hdslb.com/bfs/face/d5af1e8def69e419e347e825b6504009e725eeab.jpg","guard_level": 0,"rank": 2,"score": 352800},

{"uid": 253570,"uname": "膨胀的奶黄包","coin": 233600,"face": "http://i2.hdslb.com/bfs/face/3394dfa87a9d15b7b06c2ef8f41db1bad6212bd1.jpg","guard_level": 0,"rank": 3,"score": 233600}

],"timestamp": 1508919509,"giftId": 1,"giftType": 0,"action": "喂食","super": 0,"price": 100,"rnd": "1508919309","newMedal": 0,"newTitle": 0,"medal": [],"title": "","beatId": 0,"biz_source": "live","metadata": "","remain": 0,"gold": 0,"silver": 0,"eventScore": 0,"eventNum": 0,"smalltv_msg": [],"specialGift": null,"notice_msg": [],"capsule": {"normal": {"coin": 46,"change": 0,"progress": {"now": 5931,"max": 10000}

},"colorful": {"coin": 0,"change": 0,"progress": {"now": 0,"max": 5000}

}

},"addFollow": 0

}

}

这是一个welcome大佬的数据包:

{"cmd": "WELCOME","data": {"uid": 7651584,"uname": "零幺的村头恶霸女装扶她卡通狗蛋喵","isadmin": 1,"vip": 1},"roomid": 989474}

有了这些格式就可以定制自己弹幕机的功能。

最后要提一点就是,这个链接是有心跳保持机制的,基本上不心跳的话1分钟就会自动断掉。心跳包格式:

00 00 00 10:16字节数据

00 10:magic_number

00 01: 版本号01

00 00 00 02:心跳包类型

00 00 00 01:数据交换包

这个包的大小是70字节,如果你批量抓去房间信息的话可以很容易发现他,每隔一段时间就会由本地ip地址发往弹幕服务器。验证这个是否是货真价实的心跳包,其实只需要找一个没什么人说话的房间挂在那里,因为没有人说话所以不会有别的包,观察一下就能证实了。根据我的观察每30秒就会有一次心跳包发起。在实现的时候我们可以起一个协程或者一个线程来专门负责发送心跳包。

分析有问题的地方欢迎勘误

以上

Reference:

https://baike.baidu.com/item/UTF-8/481798?fr=aladdin  UTF-8编码百度百科

b站弹幕姬python_B站弹幕姬()分析与开发(下篇)相关推荐

  1. bili弹幕姬_b站弹幕姬|b站弹幕姬下载_v1.0.1.126官方版_9号软件下载

    b站弹幕姬是一款适用于b站的弹幕辅助工具,简单易用,即便在b站用户平均智力水平大幅下滑的现在仍能让用户在一定的学习后使用. 软件介绍 b站弹幕姬是一款在进行b站直播的时候十分重要的一款软件,使用这款b ...

  2. B站弹幕姬()分析与开发(上篇)

    辞职之后 休息了一段时间,最近准备开始恢复去工作的状态了,所以搞点事情来练练手.由于沉迷b站女妆大佬想做个收集弹幕的然后根据弹幕自动回复一些弹幕的东西.网上搜了一下有个c#的版本,感觉还做得不错,于是 ...

  3. B站2020跨年晚会,被弹幕刷屏的节目是哪个,发弹幕最多的人又是谁?

    作者 | CDA数据分析师 本以为薛之谦粉丝会觉得不妥给C君留言指正,没想到却是被数据分析爱好者从内容上提出了严厉的批评. 垃圾标题党...我以为收集的数据是与春晚观看人数,成本之类的对比,结果搞了个 ...

  4. [Windows] 哔哩下载姬—B站视频批量下载

    哔哩下载姬 简介:哔哩下载姬是一款下载哔哩哔哩视频的免费软件.适用:windows系统文件大小:18.7 MB 特点: 1.无需登录即可下载. 2.可以多线程,多任务同时下载.(最高支持10线程,10 ...

  5. 借用 potplayer 播放器,在本地播放 b 站视频也能看弹幕了

    苏生不惑第164 篇原创文章,将本公众号设为星标,第一时间看最新文章. 关于b站之前已经写过了下列文章,有兴趣可以点击阅读: 那些我关注的 b 站 up 主 bilibili(b站)升级到BV号了,还 ...

  6. 【吐槽脑洞】关于逛B站时偶然体验的弹幕互动游戏魏蜀吴三国争霸游戏的一些思考

    [吐槽&开脑洞]关于逛B站时偶然体验的弹幕互动游戏魏蜀吴三国争霸游戏的一些思考 预警:本贴没有什么技术含量,也没有什么严谨的资料调查,仅仅是自己的一次游戏体验引起的一些思考和个人观点,以及作为 ...

  7. 关于《后浪》的B站弹幕分析总结(一)——爬取B站视频的上万条弹幕的方法

    目录 一.先尝试爬取1000条 1 .1 查找弹幕所在地址 1.2 代码实现 二.1000条不够我想要更多怎么办? 三.B站弹幕文件里的其他信息有用吗? 注意:这是一篇技术类文章 前几天我做了B站&l ...

  8. 智能防挡弹幕 android,B站上线“智能防挡弹幕”

    原标题:B站上线"智能防挡弹幕" 看视频被弹幕挡住是不是很不爽?B站上线的智能防挡弹幕可以解决这个问题,具体内容请了解今天的小熊微科技[每日必读]栏目. B站上线"智能防 ...

  9. 爬取B站电视剧每一集包含关键字的弹幕(比如通过弹幕找穿帮镜头)

    废话少说,上源码: import re import time import random import requests def get_danmu(name,num,ep,kn):print('- ...

最新文章

  1. 百度正在摆脱广告营收依赖!AI云增长64%成最大推动力
  2. R数据导入导出(一): read.table()和read.csv()的区别
  3. android 之 Hnadler 、Message 、Looper
  4. 论文浅尝 - AAAI2021 | 从历史中学习:利用时间感知拷贝生成网络建模时态知识图谱...
  5. 漫步最优化二十八——三次插值法
  6. 黄轩成为QQ阅读新代言人 变身“队长”号召网友 “组队读书”
  7. Dynamics CRM - 不同类型字段在 Plugin 里的赋值方式
  8. 阿里云Linux服务器配置Java环境
  9. idea设置主题路径
  10. 下载mooc视频字幕
  11. 任意数的matlab中阶乘,数组表示
  12. QQ连连看6.0 逆向分析
  13. Delta并联机构在ADAMS仿真中的运动副设置
  14. c语言星空特效源代码,星空 - 网页特效代码|网页特效观止 - 让你的网页靓起来!...
  15. 鸡腿の游戏_纪中1737
  16. 转:授之于鱼还是授之以渔,金蝶给了企业SaaS一个完整答案
  17. 树莓派3B--HC-05蓝牙无线模块设置
  18. 【数据结构】开端序幕
  19. 【百度】智能音箱尝鲜价竟然才xx元!
  20. educoder算法设计与分析 实验五回溯法

热门文章

  1. html是什么排列规律,单数和双数是什么 有什么排列规律
  2. 计算机操作员考评标准,计算机操作员职业技能鉴定标准高级.doc
  3. ps导出发生未知错误,怎么办?
  4. Scrum敏捷开发之我的总结
  5. multisim红绿灯元器件在哪里_基于Multisim的红绿灯控制器仿真实现
  6. 想进国企央企,一定要保存好所有工作履历证明材料,包括劳动合同、离职证明、社保记录等!...
  7. 【工程师经验分享】 2 嵌入式大牛开发经验心得及其学习方向
  8. 极大似然估计法的理解和用途
  9. IP地址字符串转换成16进制例程
  10. 携程再爆大数据杀熟,携程致歉信:程序 bug 已紧急修复,将赔偿用户