斗鱼直播 怎么在游戏界面看到弹幕

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了斗鱼直播 怎么在游戏界面看到弹幕相关的知识,希望对你有一定的参考价值。

你好,很高兴为你解答,打开弹幕在电脑端安装斗鱼,打开并登录。
2.
如果是直播电脑游戏,点击左侧的游戏,在弹出的热门游戏界面,选择自己想要直播的游戏。
3.
如果你直播的游戏比较冷门,推荐游戏和更多游戏中没有的话,可以在电脑上打开游戏程序,...
4.
选择好之后,直播界面上已经开始显示游戏。点击右下方的开始直播,进行直播。
方法二:

下载斗鱼弹幕助手

将目录下的所有文件和目录都复制到OBS目录下对应的Plugins目录里面,最终Plugins目录如下所示。

1、按照上面的步骤安装好插件后,启动OBS, 然后在OBS主界面的“来源”列表窗口里面点鼠标的右键,然后点击弹出来的“添加”,再在里面点击“斗鱼弹幕鱼丸答谢及关键字自动回复”来添加这个特殊的源,



2、在弹出来的源名字窗口,可以输入你要想的名字,或直接用默认的:



3、然后点“确定”,将打开设置窗口:



4、按照上面的说明,填好要监控的直播房间号,以及添加要回复的关键字,等等,设置好后,按“确定”,然后开始串流直播或者预览,当有人在这个指定监控的直播房间里面向直播发送鱼丸时,在直播输出画面里面会出现自动的答谢文字:



5、如果你在上面的设置添加来关键字的自动回复,当观众发的弹幕文本中包含指定的这个关键字时,你指定的

6、回复文本也会出现在直播画面里,例如,你设置了下面的关键字:



7、当观众在弹幕里面的文本包含“游戏名”这3个字时,直播画面是:



8、另外,上面自动回复的文字的颜色、字体、大小、位置等等,都是可以自定义配置的:



斗鱼弹幕伴侣使用教程

首先下载斗鱼直播伴侣,解压文件,运行斗鱼直播伴侣。

进入斗鱼直播伴侣界面后,在右下角可开启弹幕助手!



主播可用鼠标右键可对弹幕进行设置操作,玩家可在设置中找到自己习惯的弹幕显示方式。自动答谢,直播伴侣会自动记录粉丝所送鱼丸数量和ID,房间留言自动答谢所有送鱼丸的观众,让主播在玩游戏时或者专注直播时,自动完成答谢功能。







房管助手,您管理房间的贴心小帮手。

自动禁言:只要用户弹幕包含主播设置的关键字,改用户便会自动禁言一个小时,对于一些辱骂和特定广告者,快捷有效。

禁言记录:主播可以在禁言记录中查看禁言的名单,如有误封或者像解锁某个用户,可以在其中进行操作。

鱼丸记录:主播可以在鱼丸记录中查看用户送鱼丸的记录表,记录表包含送鱼丸用户的ID和所送数量。

自动发言:主播可以在自动发言中设置一句不超过30字符的短句作为系统自动发言,每隔一段时间出现一次,时间可根据主播所需设置仅供参考哦。
参考技术A 前言
前几天(寒假前咯)闲着无聊,看到舍友们都在看斗鱼TV,虽然我对那些网络游戏都不是非常感兴趣,但是我突然间想到,如果我可以获取上面的弹幕内容,不就有点意思了么?

1.分析阶段
如果我想要抓取网页上面的东西,无非就是两种方法

使用浏览器,手工(自己点击)或者非手工(使用JS脚本),存取我想要的东西。
编写HTTP客户端(斗鱼无HTTPS通讯)
第一种方法是万能的,但显然是不行的, 原因如下:

手动保存实在是不可行,程序员不为也。
浏览器与本地交互有限,换而言之,也就是即使我抓取了对应的弹幕,我也没有办法解决持久化的问题。
假设你选择的是Chrome或者firefox浏览器,也不是不能实现持久化,但这需要写扩展,Chrome扩展没有写过,也不是很感兴趣。
第二种方法显然是一个正常的程序员的做法。

语言选用Ruby

写一个客户端,也就是写一个小爬虫,使用的场景:

用户在终端执行命令

gem install danmu
danmu douyu [room_id/url]
#比如
danmu douyu qiuri
danmu douyu http://www.douyutv.com/13861
然后就可以在终端欣赏弹幕咯.

回想一下抓取网站的方法

四步走:请求网页(原始数据) - 提取数据(提纯数据) - 保存数据 - 分析数据

很显然,只要解决了请求网页,其他的也就无非解析和SQL语句什么的。

1.1.斗鱼TV弹幕抓取的思路确定
如果是像我上面说的那么简单,也就不必再写一篇文章。毕竟,网页小爬虫没有什么技术含量。分布式爬虫才有。

通常情况下的网页小爬虫无非要解决如下问题:

请求,如果对方有一定策略的反爬虫,那需要反反爬虫。比如,

header带上host,带上refer,带上其他
需要验证,那就申请用户名和密码,然后登陆
如果在登录时期有防跨站机制,那就先获取一次登录页面,然后解析出token,带上对应的token然后登陆。
在程序中加入Log,并且存到本地。防止出现各种各样的反爬虫机制ban掉了程序,从而方便进行下一步防反爬虫对策。
并且,由于请求响应机制的存在,通常情况下,每一个请求对应一个响应,如果出错了,要么超时,要么有状态码,所以普通的web爬虫也相对而言比较容易些。

那么,斗鱼TV的站点是不是这样子的就能够容易爬取呢?

你猜到了,答案是“不是”。

由于弹幕具有实时性,就决定了斗鱼TV的弹幕无法通过保存完整指定时间端弹幕的XML(比如BILIBILI的一个视频弹幕是存在一段xml中的)或者Json数据来显示弹幕。要不然的话,那主播操作很出色的时候,观众的弹幕岂不是无法实时显示了么?

那么,肯定就是WebSocket了,于是,我一如既往的打开F12,查看网络流量。

正如你想到的那样,没有任何的弹幕流量来往。一个WebSocket的消息都没有。

那么,消息肯定是有的,但是消息并不是通过HTTP协议或者WebSocket协议传输的,那么问题会出在哪呢?

分析前端的代码,找出获取弹幕的JS代码,苦于代码太多,找了很久没有找到。那也就是执行逻辑可能在flash里面。

于是祭出大杀器WireShark,抓一下流量。终于看到弹幕的样子了。

是这样的。

原来使用的是Flash的Socket功能。

那么,我们只需要模拟Socket的每一条消息就好了.

多分析几组数据,但还是对发送消息内容缺乏把握,特别是在用户认证,用户接收弹幕这一块。在搜索引擎上搜索了一阵,发现知乎上有个帖子,读完终于解了我的疑惑。

地址为: 如何获取斗鱼直播间的弹幕信息? - Python

在此基础上,省略若干消息分析过程。

总结后得出斗鱼TV网站的服务器分布。

1.2.房间信息和弹幕认证服务器获取
首先我们拿随便一个主播房间来说,比如,qiuri

Ta的房间链接分为两种

直播互动赢点卡 暴雪游戏闹新春
http://www.douyutv.com/id][房间
对这个主播房间页面请求,正常,所有的有用信息都不是放在html中渲染出来,而是有一条放在HTML中内置的JS脚本中,这是为了减少服务器渲染HTML的压力?可是渲染放在JS里面不也一样需要渲染?(不明白)总之,就是程序先加载没有具体数据填充页面,然后JS更新数据。

内置的两段JS脚本,JS脚本中有两个变量,该变量很容易转换成JSON数据,也就是两段JSON数据,一个是关于主播的个人信息,另一个是关于弹幕认证服务器的列表(该列表中的任意一个服务器均可以认证,但每一次请求主播页面得到的认证服务器列表都不一样)

通过这步,我们就拿到了主播的信息以及弹幕服务器的认证地址,端口。

1.3.发送Socket消息的流程简介
我们通过抓包,分析那一大坨数据包,可以确定以下通过以下的流程便可以获取弹幕消息。(分析过程比较繁琐)

首先建立两个Socket。一个用于认证(@danmu_auth_socket),另一个用户获取弹幕(@danmu_client)。

步骤1: @danmu_auth_socket 发送消息登陆,获取消息1解析出匿名用户的用户名,再获取消息2解析出gid
步骤2: @danmu_auth_socket 发送qrl消息,获取两个没有什么用的消息
步骤3: @danmu_auth_socket 发送keeplive消息
步骤4: @danmu_socket 发送伪登陆消息(所有匿名用户都一样只需要输入步骤一中用户名就行了,因为认证已经在上面做过了)
步骤5: @danmu_socket 发送join_group消息需要步骤一中国的gid
步骤6: @danmu_socket 不断的recv消息就可以获取弹幕消息了
后面会详细解释

2.1.消息Socket消息格式以及发送一条消息
既然是发消息,那么每条消息总是有些格式的。

斗鱼的消息格式大致如下:

每一条消息并遵循下面的格式:

1.通信协议长度,后四个部分的长度,四个字节
2.第二部分与第一部分一样
3.请求代码,发送给斗鱼的话,内容为0xb1,0x02, 斗鱼返回的代码为0xb2,0x02
4.发送内容
5.末尾字节
参考技术B 打开斗鱼直播伴侣 在斗鱼直播全屏游戏时,利用其他任何第三方的直播软件或弹幕软件在全屏游戏中都不会看到弹幕,那么利用斗鱼直播伴侣如何在全屏游戏中看到斗鱼弹幕呢?
1.打开斗鱼直播伴侣,选择添加游戏源功能。
2.选择当前运行的游戏,以英雄联盟为例。
(1)可以在伴侣的快捷图标中选择运行的游戏。
(2)可以在下拉列表框中选择运行的游戏,在英雄联盟中选择League of Legends.exe然后点击打开按钮,完成添加游戏源。
3.打开弹幕助手。
探究的一般过程是从发现问题、提出问题开始的,发现问题后,根据自己已有的知识和生活经验对问题的答案作出假设.设计探究的方案,包括选择材料、设计方法步骤等.按照探究方案进行探究,得到结果,再分析所得的结果与假设是否相符,从而得出结论.并不是所有的问题都一次探究得到正确的结论.有时,由于探究的方法不够完善,也可能得出错误的结论.因此,在得出结论后,还需要对整个探究过程进行反思.探究实验的一般方法步骤:提出问题、做出假设、制定计划、实施计划、得出结论、表达和交流.
科学探究常用的方法有观察法、实验法、调查法和资料分析法等.
观察是科学探究的一种基本方法.科学观察可以直接用肉眼,也可以借助放大镜、显微镜等仪器,或利用照相机、录像机、摄像机等工具,有时还需要测量.科学的观察要有明确的目的;观察时要全面、细致、实事求是,并及时记录下来;要有计划、要耐心;要积极思考,及时记录;要交流看法、进行讨论.实验方案的设计要紧紧围绕提出的问题和假设来进行.在研究一种条件对研究对象的影响时,所进行的除了这种条件不同外,其它条件都相同的实验,叫做对照实验.一般步骤:发现并提出问题;收集与问题相关的信息;作出假设;设计实验方案;实施实验并记录;分析实验现象;得出结论.调查是科学探究的常用方法之一.调查时首先要明确调查目的和调查对象,制订合理的调查方案.调查过程中有时因为调查的范围很大,就要选取一部分调查对象作为样本.调查过程中要如实记录.对调查的结果要进行整理和分析,有时要用数学方法进行统计.收集和分析资料也是科学探究的常用方法之一.收集资料的途径有多种.去图书管查阅书刊报纸,拜访有关人士,上网收索.其中资料的形式包括文字、图片、数据以及音像资料等.对获得的资料要进行整理和分析,从中寻找答案和探究线索.
参考技术C 斗鱼直播 怎么在游戏界面看到弹幕?今年来,直播越来越热,尤其是斗鱼、虎牙等。并且这两个是直播游戏的热门网站。下面教你怎样在斗鱼直播游戏时,边玩游戏,边看粉丝们发的弹幕!
工具原料电脑智能手机相关软件
方法/步骤分步阅读
1
/9
在电脑端安装斗鱼,打开并登录。
2
/9
如果是直播电脑游戏,点击左侧的游戏,在弹出的热门游戏界面,选择自己想要直播的游戏。
3
/9
如果你直播的游戏比较冷门,推荐游戏和更多游戏中没有的话,可以在电脑上打开游戏程序,在进程列表中选择已经启动的游戏。
4
/9
选择好之后,直播界面上已经开始显示游戏。点击右下方的开始直播,进行直播。
5
/9
开始直播之后,选择下方的弹幕助手,开启直播弹幕。这时弹幕优先级最高,在玩游戏的时候,也会悬浮在游戏之上,让你边玩游戏边看弹幕,而且弹幕不影响游戏鼠标的操作。
6
/9
如果想要直播手机游戏,可以和电脑端的直播伴侣进行投屏。
打开电脑端直播伴侣左侧的手游,在弹出的菜单中选择安卓无线,我用的是安卓手机。
注意:要求手机和电脑所在的是同一个局域网。
7
/9
打开手机端直播伴侣,点击首页搜索框后的扫一扫,对电脑伴侣上的二维码进行扫描。
扫描后,可选择手机录音,或电脑录音。前一种比较随意,后一种需要自备声卡,音质相对好多了。
8
/9
第一次投屏连接,需要下载一些相关组件,很快就能完成。然后投屏成功,返回桌面打开游戏。
9
/9
在电脑端操作直播,也可以边玩游戏边看弹幕。弹幕右上角,有一个锁的标致,点击可将弹幕置顶,任何情况下都不影响看弹幕。
参考技术D 在今天下午,斗鱼多名主播直播间突然无法看到弹幕,聊天区晋级只能显示水友进入直播间的欢迎信息和送礼物信息,水友们发的弹幕完全看不到,这使得众多水友没了弹幕的直播像是没有灵魂,看着实在太尴尬了。

弹幕已经成为直播的重要玩法之一,也是因为有了实时性的弹幕,使得主播可以更好的跟水友互动,可以好不夸张的说,直播的灵魂就在于弹幕互动,这让水友看着尴尬,主播因为缺少话题更是尴尬,只能一直在自言自语,完全没办法愉快聊天,直播效果也下降了不少。有的主播感慨现在看不到弹幕真是与世隔绝了,而不少主播完全还不适应现在没有弹幕的氛围,甚至没有了互动完全不知道该说什么。

有水友猜测这可能是斗鱼在调整新的功能,或许要开始弹幕审核了,以后水友发的弹幕可能要先通过审核了才能看到,这对于众多主播来说,无疑将会大大降低用户体验。

目前有部分水友能看到弹幕,但也有很大一部分用户看不到,有主播爆料可能这两天都会出现看不到弹幕的情况,不少人也感慨没了弹幕都不知道该怎么直播了,只能自娱自乐的聊天。

Python爬取斗鱼的弹幕,看看奇葩网友都说了些什么

0.前言

前几天(寒假前咯)闲着无聊,看到舍友们都在看斗鱼TV,虽然我对那些网络游戏都不是非常感兴趣,但是我突然间想到,如果我可以获取上面的弹幕内容,不就有点意思了么?

1.分析阶段

如果我想要抓取网页上面的东西,无非就是两种方法

  1. 使用浏览器,手工(自己点击)或者非手工(使用JS脚本),存取我想要的东西。
  2. 编写HTTP客户端(斗鱼无HTTPS通讯)

第一种方法是万能的,但显然是不行的, 原因如下:

学习Python中有不明白推荐加入交流裙
                  号:653466668
                  群里有志同道合的小伙伴,互帮互助,
                  群里有免费的视频学习教程和PDF!

  • 手动保存实在是不可行,程序员不为也。
  • 浏览器与本地交互有限,换而言之,也就是即使我抓取了对应的弹幕,我也没有办法解决持久化的问题。
  • 假设你选择的是Chrome或者firefox浏览器,也不是不能实现持久化,但这需要写扩展,Chrome扩展没有写过,也不是很感兴趣。

第二种方法显然是一个正常的程序员的做法。

语言选用Ruby

写一个客户端,也就是写一个小爬虫,使用的场景:

用户在终端执行命令

gem install danmu
danmu douyu [room_id/url]
#比如
danmu douyu qiuri
danmu douyu http://www.douyutv.com/13861

然后就可以在终端欣赏弹幕咯.

技术分享图片
Screen Shot 2016-02-09 at 12.23.15 PM.png

回想一下抓取网站的方法

四步走:请求网页(原始数据) - 提取数据(提纯数据) - 保存数据 - 分析数据

很显然,只要解决了请求网页,其他的也就无非解析和SQL语句什么的。

1.1.斗鱼TV弹幕抓取的思路确定

如果是像我上面说的那么简单,也就不必再写一篇文章。毕竟,网页小爬虫没有什么技术含量。分布式爬虫才有。

通常情况下的网页小爬虫无非要解决如下问题:

请求,如果对方有一定策略的反爬虫,那需要反反爬虫。比如,

  • header带上host,带上refer,带上其他
  • 需要验证,那就申请用户名和密码,然后登陆
  • 如果在登录时期有防跨站机制,那就先获取一次登录页面,然后解析出token,带上对应的token然后登陆。
  • 在程序中加入Log,并且存到本地。防止出现各种各样的反爬虫机制ban掉了程序,从而方便进行下一步防反爬虫对策。

并且,由于请求响应机制的存在,通常情况下,每一个请求对应一个响应,如果出错了,要么超时,要么有状态码,所以普通的web爬虫也相对而言比较容易些。

那么,斗鱼TV的站点是不是这样子的就能够容易爬取呢?

你猜到了,答案是“不是”。

由于弹幕具有实时性,就决定了斗鱼TV的弹幕无法通过保存完整指定时间端弹幕的XML(比如BILIBILI的一个视频弹幕是存在一段xml中的)或者Json数据来显示弹幕。要不然的话,那主播操作很出色的时候,观众的弹幕岂不是无法实时显示了么?

那么,肯定就是WebSocket了,于是,我一如既往的打开F12,查看网络流量。

正如你想到的那样,没有任何的弹幕流量来往。一个WebSocket的消息都没有。

那么,消息肯定是有的,但是消息并不是通过HTTP协议或者WebSocket协议传输的,那么问题会出在哪呢?

分析前端的代码,找出获取弹幕的JS代码,苦于代码太多,找了很久没有找到。那也就是执行逻辑可能在flash里面。

于是祭出大杀器WireShark,抓一下流量。终于看到弹幕的样子了。

是这样的。

技术分享图片
douyutveachmsg.png

原来使用的是Flash的Socket功能。

那么,我们只需要模拟Socket的每一条消息就好了.

多分析几组数据,但还是对发送消息内容缺乏把握,特别是在用户认证,用户接收弹幕这一块。在搜索引擎上搜索了一阵,发现知乎上有个帖子,读完终于解了我的疑惑。

地址为: www.zhihu.com/question/29…

在此基础上,省略若干消息分析过程。

总结后得出斗鱼TV网站的服务器分布。

技术分享图片
douyutvinfo.jpg

1.2.房间信息和弹幕认证服务器获取

首先我们拿随便一个主播房间来说,比如,qiuri

Ta的房间链接分为两种

对这个主播房间页面请求,正常,所有的有用信息都不是放在HTML中渲染出来,而是有一条放在HTML中内置的JS脚本中,这是为了减少服务器渲染HTML的压力?可是渲染放在JS里面不也一样需要渲染?(不明白)总之,就是程序先加载没有具体数据填充页面,然后JS更新数据。

内置的两段JS脚本,JS脚本中有两个变量,该变量很容易转换成JSON数据,也就是两段JSON数据,一个是关于主播的个人信息,另一个是关于弹幕认证服务器的列表(该列表中的任意一个服务器均可以认证,但每一次请求主播页面得到的认证服务器列表都不一样)

技术分享图片
Sc
技术分享图片
Screen Shot 2016-02-09 at 1.01.51 PM.png
技术分享图片
Screen Shot 2016-02-09 at 12.44.01 PM.png

通过这步,我们就拿到了主播的信息以及弹幕服务器的认证地址,端口。

1.3.发送Socket消息的流程简介

我们通过抓包,分析那一大坨数据包,可以确定以下通过以下的流程便可以获取弹幕消息。(分析过程比较繁琐)

首先建立两个Socket。一个用于认证(@danmu_auth_socket),另一个用户获取弹幕(@danmu_client)。

  • 步骤1: @danmu_auth_socket 发送消息登陆,获取消息1解析出匿名用户的用户名,再获取消息2解析出gid
  • 步骤2: @danmu_auth_socket 发送qrl消息,获取两个没有什么用的消息
  • 步骤3: @danmu_auth_socket 发送keeplive消息
  • 步骤4: @danmu_socket 发送伪登陆消息(所有匿名用户都一样只需要输入步骤一中用户名就行了,因为认证已经在上面做过了)
  • 步骤5: @danmu_socket 发送join_group消息需要步骤一中国的gid
  • 步骤6: @danmu_socket 不断的recv消息就可以获取弹幕消息了

后面会详细解释

2.1.消息Socket消息格式以及发送一条消息

既然是发消息,那么每条消息总是有些格式的。

斗鱼的消息格式大致如下:

技术分享图片
douyutveachmsg.png

每一条消息并遵循下面的格式:

1.通信协议长度,后四个部分的长度,四个字节
2.第二部分与第一部分一样
3.请求代码,发送给斗鱼的话,内容为0xb1,0x02, 斗鱼返回的代码为0xb2,0x02
4.发送内容
5.末尾字节

# -*- encoding : utf-8 -*-
class Message
  # 向斗鱼发送的消息
  # 1.通信协议长度,后四个部分的长度,四个字节
  # 2.第二部分与第一部分一样
  # 3.请求代码,发送给斗鱼的话,内容为0xb1,0x02, 斗鱼返回的代码为0xb2,0x02
  # 4.发送内容
  # 5.末尾字节
  #pack(‘c*‘)是字节数组转字符串的一种诡异的转化方式
  def initialize(content)
    @length = [content.size + 9,0x00,0x00,0x00].pack(‘c*‘)
    @code = @length.dup
    @magic = [0xb1,0x02,0x00,0x00].pack(‘c*‘)
    @content  = content
    @end = [0x00].pack(‘c*‘)
  end

  def to_s
    @length + @code + @magic + @content + @end
  end

end

经过封装,我们仅仅关注那些可见的字符串,也就是Content部分就可以了。
content部分,也就是发送消息的内容,在文章后面将会详解。

开启两个Socket,一个用户认证,另一个用于弹幕的获取。

用于用户弹幕认证的,是2.1中所说的认证服务器列表中任意一个。挑选出来一组ip和端口

@danmu_auth_socket = TCPSocket.new @auth_dst_ip,@auth_dst_port

用户获取弹幕的只要为

danmu.douyutv.com:8601
danmu.douyutv.com:8602
danmu.douyutv.com:12601
danmu.douyutv.com:12602

四组域名:端口均可以作为如下的DANMU_SERVER和PORT

@danmu_socket = TCPSocket.new DANMU_SERVER,DANMU_PORT

发送一条消息只需如此

    data = "[email protected]=loginreq/[email protected]="[email protected]+"/[email protected]=1234567890123456/[email protected]=" + @room_id.to_s + "/"
    all_data = message(data)
    @danmu_socket.write all_data

把需要传输的字符串放进去就好了.

接下来,我们需处理上面说的六个步骤

2.2.发送消息详细流程之步骤一

发送消息内容为:

[email protected]=loginreq/[email protected]=/[email protected]=0/[email protected]=/[email protected]=156277/[email protected]=DF9E4515E0EE766B39F8D8A2E928BB7C/[email protected]=1453795822/[email protected]=4fc6e613fc650a058757331ed6c8a619/[email protected]=20150929/

我们需要注意的内容如下:

type 表示消息的类型登陆消息为loginreq
username 不需要,请求登陆以后系统会自动的返回对应的游客账号。
ct 不清楚什么意思,默认为0并无影响
password 不需要
roomid 房间的id
devid 为设备标识,无所谓,所以我们使用随机的UUID生成
rt 应该是runtime吧,时间戳
vk 为时间戳+"7oE9nPEG9xXV69phU31FYCLUagKeYtsF"+devid的字符串拼接结果的MD5值(这个是参考了一篇文章,关于这一处我也不大明白怎么探究出来的)
ver 默认

通过这一步,我们可以获取两条消息,并从消息中使用正则表达式获取对应的用户名以及gid

    str = @danmu_auth_socket.recv(4000)
    @username= str[//[email protected]=(.+)/nickname/,1]
    str = @danmu_auth_socket.recv(4000)
    @gid = str[//[email protected]=(d+)//,1]

2.3.发送消息详细流程之步骤二

发送的消息内容为

"[email protected]=qrl/[email protected]=" + @room_id.to_s + "/"

无需多说,类型为qrl,rid为roomid,直接发送这条消息就好。返回的两条消息也没有什么价值。

    data  = "[email protected]=qrl/[email protected]=" + @room_id.to_s + "/"
    msg = message(data)
    @danmu_auth_socket.write msg
    str = @danmu_auth_socket.recv(4000)
    str = @danmu_auth_socket.recv(4000)

2.4.发送消息详细流程之步骤三

发送的消息内容为

"[email protected]=keeplive/[email protected]=" + timestamp + "/[email protected]=0/[email protected]=19beba41da8ac2b4c7895a66cab81e23/"

直接发送。无太大意义。

    data = "[email protected]=keeplive/[email protected]=" + timestamp + "/[email protected]=0/[email protected]=19beba41da8ac2b4c7895a66cab81e23/"
    msg = message(data)
    @danmu_auth_socket.write msg
    str = @danmu_auth_socket.recv(4000)

前三步,也就是2.2-2.3-2.4三步骤,也就是使用@danmu_auth_socket 完成获取username和gid的重要步骤。获取这两个字段以后,也就完成了它存在的使命。

接下来的就是@danmu_socket获取弹幕的时候了!

2.5.发送消息详细流程之步骤四

消息内容为:"[email protected]=loginreq/[email protected]="[email protected]+"/[email protected]=1234567890123456/[email protected]=" + @room_id.to_s + "/"

和上面2.2中略有不同。但是,需要注意的是

  username 为2.2中所得到的username
  password 的值得变化
    data = "[email protected]=loginreq/[email protected]="[email protected]+"/[email protected]=1234567890123456/[email protected]=" + @room_id.to_s + "/"
    all_data = message(data)
    @danmu_socket.write all_data
    str = @danmu_socket.recv(4000)

2.6.发送消息详细流程之步骤五

接下来就是完成认证的最后一步了,join_group的消息内容为

"[email protected]=joingroup/[email protected]=" + @room_id.to_s + "/[email protected]="[email protected]+"/"

gid为2.2中所得到的gid。

      data  = "[email protected]=joingroup/[email protected]=" + @room_id.to_s + "/[email protected]="[email protected]+"/"
      msg = message(data)
      @danmu_socket.write msg

2.7.发送消息详细流程之步骤六

获取弹幕,并且打印出来。

    danmu_data = @danmu_socket.recv(4000)
    type = danmu_data[danmu_data.index("[email protected]=")..-3]
    puts type.gsub(‘sui‘,‘‘).gsub(‘@S‘,‘/‘).gsub(‘@A=‘,‘:‘).gsub(‘@=‘,‘:‘).split(‘/‘)

后三步,则是@danmu_socket 获取弹幕的步骤。

于是,通过这些步骤,就可以完成了简单的danmu的核心代码,接下来的步骤就是完善,重构这些代码了。

总结

痛点一,至今还没有解决rtmp地址的获取

找了很久没有办法解决rtmp地址的自动获取:

路径如下

www.douyutv.com/swf_api/roo…

这一处的请求不是XHR,也就是不是JS脚本通过XMLHttpRequest异步加载;那么,八成是flash通过http协议获取的。我估计八成执行逻辑应该是在flash之中。也就不方便获取其中的sign值.故,暂时无法解析rtmp视频流地址了
















以上是关于斗鱼直播 怎么在游戏界面看到弹幕的主要内容,如果未能解决你的问题,请参考以下文章

虎牙电脑端怎么设置气泡弹幕

Android仿网络直播弹幕功能的实现

手机端虎牙直播回放怎么还原弹幕

Android弹幕功能实现,模仿斗鱼直播的弹幕效果

b站直播姬怎么用

goeasy+jquery+ckplayer实现动态实时视频弹幕