电脑电脑上怎么看电视直播播怎么样去弹幕

网球-Ivanov vs De Loore, ATP Challenger Tampere
体育-At The Races
体育-Cycling - Le Tour de France 2016
网球-Berrer vs Munoz-De La Nava, ATP Kitzbuhel
体育-Racing UK
环法自行车赛第十六赛段-
网球-Allertova vs Knapp, WTA Bastad
网球-Schmiedlova vs Celik, WTA BastadPPTV怎么关闭弹幕 pptv网络电视关闭取消弹幕教程_西西软件资讯
西西软件下载最安全的下载网站、值得信赖的软件下载站!
→ PPTV怎么关闭弹幕 pptv网络电视关闭取消弹幕教程
v3.6.8.0055 官方最新版
类型:网络电视大小:28.9M语言:中文 评分:9.2
如今越来越多的视频播放器支持弹幕功能了,就是其中一款,不过有些时候的视频弹幕会严重影响观看体验,那么怎么关闭弹幕,下面小编就给大家带来pptv网络电视关闭取消弹幕教程。PPTV怎么关闭弹幕第一步操作:小伙伴们,首先我们要确认的是你安装的PPTV一定要是最新版本的哦,否则按钮位置不一样的。关于如何查看软件的版本,步骤如下:点击软件右上角的“主菜单”在搜索框后面了哦。然后找到“帮助”再找到“关于”点击一下,就查看到你软件的版本了。看图操作。第二步操作:伙伴们就有些烦感了,这满屏的密密麻麻的字,还能好好看个电影吗?看看最新版PPTV怎么关闭弹幕吧。关闭步骤和开启步骤相反,开启弹幕时,可以在播放窗下中的位置打字发送即可,类似大家边看边发言,关闭弹幕方法:用鼠标指向播放窗区域,播放窗右上角会出现两个选项:“弹幕”“置顶”,我们只要点击一下“弹幕”,就关闭了哦。西西小编提示:pptv网页版弹幕关闭位置是不一样的,下面小编就给大家带来pptv网页版关闭弹幕方法在我们的视频播放的界面底下的工具栏里面,找到并且点击开启那个“弹幕”。弹幕打开以后,我们就可以在视频播放的屏幕上看到很多滚动的字幕,那些话语都是很多网友想要说的话。我们把鼠标放在视频播放上面上,也就是工具栏的上方不远处,会看到出来一个内容输入框的设置小窗口。接着,小伙伴们再那个内容输入框里面输入自己想要说的话后,点击右边的那个“发送”按钮。发送以后,我们也可以在视频播放的屏幕上看到我们刚才所发的字幕在移动了。如果我们想要好好得看咯电视剧,不想要那些屏幕上的那些文字在飞来飞去的,那就可以把弹幕给关闭了。在开启弹幕的前提下,再点击下那个弹幕的按钮即可关闭视频的弹幕了。
(25) 网络电视软件是可以让用户在电脑上看电视直播的软件,如今电脑的普及度几乎是每家每户都有至少一台了,很多人用惯了电脑就不会想在电视上看节目了。网络电视软件可以让我们在电脑上观看全国各地电视频道的节目直播,而且还包括了一些外国的电视台,对于喜欢看电视节目的用户来说这款软件可以让你不用电视就能观看所有电视节目,并且你还能提前看到该频道的节目列表,非常方便。这里西西给大家收集整理了一些好用的网络电视软件下载...
01-30 / 24.5M
推荐理由:PPS影音网络电视是全球第一家集P2P直播点播于一身的网络电视软件。PPS网络电视播放流畅、完全免费,PPS网络
04-15 / 28.9M
推荐理由:国内用户量最大的网络电视新媒体PPLive宣布,旗下全新上线的PPTV网络电视正式上线3D影院,广大网友在迎来了
05-15 / 8.6M
推荐理由:流星网络电视,让你用电脑和网络就可以收看卫星电视的软件,1000套全球卫星节目,5000部全球热播电视电影,
08-17 / 20.0M
推荐理由:极光(JGHDTV)是全球最强的第三代万能P2P技术的高清电影、网络电视播放器软件软件简介: 极光网络电视20
09-30 / 2.3M
推荐理由:CNTV中国网络电视台Android客户端能够让你在手机上观看海量的电视节目,本版本共有96个电视台共选择,包括国
02-07 / 949KB
推荐理由:[彩虹网络电视]是一款通过网络收看中央电视台、港澳地区、全国几十套地方电视台以及国外电视节目的软件,
(11) 年月日,为了纪念抗战胜利周年中国首次举办了以这场战争的胜利为主题的阅兵式,这次的阅兵受阅方队一共个,其中个抗战老同志方队个空中梯队个徒步方队及个装备方队。相信很多当天看了阅兵式直播的朋友都激动不已,方阵巍巍,战旗猎猎让很多人都心中热血激荡,不过也有很多网友可能放假睡过头了或者有事没时间看直播,这里西西给大家提供了月日胜利日阅兵播放器及抗战胜利周年阅兵视频下载,大家可以下载后重温那让人心神激荡的一幕...
09-04 / 727.4M
推荐理由:日,为了纪念中国人民抗日战争暨世界反法西斯战争胜利70周年,中国举办了首次以这场战争胜利为主
09-03 / 8.8M
推荐理由:反法西斯战争胜利70周年直播app将直播9月3日的抗战阅兵盛典,此次阅兵体现着世界各族人民反法西斯战争胜利的
09-03 / 6.4M
推荐理由:反法西斯战争胜利70周年直播播放器是央视影音特别推出的一款纪念节目,今天是9月3日,三军雄伟的步伐正在天
09-03 / 8.8M
推荐理由:日举行盛大的阅兵仪式,是中国人民抗日战争暨世界反法西斯战争胜利70周年纪念活动的重要组成部分
09-03 / 23.2M
推荐理由:今天是抗日战争70周年胜利纪念日,习主席将在天安门举行隆重的阅兵仪式。70年前的今天,中国人民经过长达14
03-14 / 11.5M
推荐理由:奇艺高清影视是百度旗下高清视频客户端,海量正版高清影视资源,可供用户飞速离线下载观看。多终端播放记录
(19) 西西软件园提供好用的播放器官方下载,很多用户都喜欢使用的播放器,格式的视频清晰而且占用空间少,是目前非常流行的视频格式,播放器能播放所有的,等视频格式,支持全屏高清播放。是您观看视频必不可少的工具。...
04-22 / 17.5M
推荐理由:影音先锋资源版是自主研发的播放核心的P2P云3D播放器!边下边播边硬解即点即播!基于DirectShow和DirectSoun
04-15 / 28.9M
推荐理由:国内用户量最大的网络电视新媒体PPLive宣布,旗下全新上线的PPTV网络电视正式上线3D影院,广大网友在迎来了
01-30 / 24.5M
推荐理由:PPS影音网络电视是全球第一家集P2P直播点播于一身的网络电视软件。PPS网络电视播放流畅、完全免费,PPS网络
04-23 / 21.2M
推荐理由:暴风影音2016是国内一款万能视频播放器,也是全球领先的万能媒体播放软件,不仅支持429种格式,而且支持高清
03-28 / 730KB
推荐理由:RealCodec播放器插件可用于QQ影音、暴风影音等主流播放器解码Real编码的视频文件。经常在使用qq影音、暴风影
04-23 / 18.7M
推荐理由:PotPlayer(由姜龙喜制作)是韩国最大门户网Daum公司为旗下TV吧/点播吧/实况吧量身打造的一款多媒体免费视频播
(49) 西西软件园提供高清播放器排行榜,让用户知道哪个高清影音播放器最好用,所谓的高清电影,就是指以高清视频格式制作的全高清视频文件,分辨率一般是现在的电脑配置越来越强大,用户对视频的质量要求也越来越高,高清播放器更快更好更多免费功能新增.视频创建与播放支持.视频生成高清串流播放,并能一键转移视频到市面上的消费电子设备,包括电视机机蓝光机游戏机手机平板电脑。,,常见分辨率前三个是用于标识高清影片分辨率的关键指...
04-16 / 140.9M
推荐理由:老牌影音播放软件PowerDVD近日正式发布了PowerDVD 14,重点加入了对HEVC/H.265视频编码格式的软件解码支持,
04-23 / 21.2M
推荐理由:暴风影音2016是国内一款万能视频播放器,也是全球领先的万能媒体播放软件,不仅支持429种格式,而且支持高清
04-06 / 18.8M
推荐理由:百度影音是百度公司最新推出的一款全新体验的播放器。支持主流媒体格式的视频、音频文件,实现本地播放和在
04-23 / 18.5M
推荐理由:PotPlayer是韩国最大门户网Daum公司为旗下TV吧/点播吧/实况吧量身打造的一款多媒体免费视频播放器.集点播,视
04-22 / 17.5M
推荐理由:影音先锋资源版是自主研发的播放核心的P2P云3D播放器!边下边播边硬解即点即播!基于DirectShow和DirectSoun
04-15 / 28.9M
推荐理由:国内用户量最大的网络电视新媒体PPLive宣布,旗下全新上线的PPTV网络电视正式上线3D影院,广大网友在迎来了
(30) 视频播放器排行榜最新出炉的视频播放器下载排名,好的视频播放器一般要满足三点一是免费而是支持播放的格式多三是播放稳定流畅。西西为您精选出视频播放器排行榜软件下载大全。视频播放器哪个好众所周知的视频播放器有百度影音快播暴风影音腾讯视频播放器等等,基本上用户使用的也就是这几款,除了一些针对新强的视频播放器之外,西西建议大家可以使用这几款大品牌的。视频播放器概念视频播放器通常指的视频播放器是指能播放以数字...
01-26 / 28.9M
推荐理由:奇艺影音是一款专注视频播放的客户端软件,您可运行奇艺影音,在线享受奇艺网站内全部免费高清正版视频。主
04-15 / 37.3M
推荐理由:优酷客户端为您推荐更多精选热门视频,通过多条件筛选快速定位匹配结果,提供多种画质、多种语言切换播放和
04-22 / 17.5M
推荐理由:影音先锋资源版是自主研发的播放核心的P2P云3D播放器!边下边播边硬解即点即播!基于DirectShow和DirectSoun
04-23 / 21.2M
推荐理由:暴风影音2016是国内一款万能视频播放器,也是全球领先的万能媒体播放软件,不仅支持429种格式,而且支持高清
03-01 / 31.9M
推荐理由:腾讯视频2016官方免费下载是腾讯视频旗下的客户端产品,支持丰富内容的在线点播及电视台直播,提供列表管理
01-05 / 7.8M
推荐理由:射手影音播放器是由射手网创建与维护的开源播放器项目。 采用最新DirectX硬件加速技术,特有画面增益,清晰
03-0508-0303-0603-0603-0603-0603-0602-2003-2304-26
阅读本文后您有什么感想? 已有23人给出评价!
名称大小下载网侠手机站:值得大家信赖的手机软件游戏站!
关注网侠手机站礼包、游戏、app应有尽有
手机软件手软合集推荐专题
您的位置:
→ 龙珠直播怎么看弹幕?龙珠直播怎么关弹幕?
龙珠直播怎么看弹幕?龙珠直播怎么关弹幕?[多图]
字体大小:【 |
10:09:14&&&
类型:影音视频大小:19.6MB评分:8平台:标签:
是为爱好游戏的朋友打造的软件,很多朋友仔观看的时候想知道怎么看?有的朋友不知怎么关弹幕?网侠小编将会为你详细的介绍的呦~
在直播界面,点击下方的【关弹幕】按钮,就可以的呦~超简单的呦~
以上就是龙珠弹幕详细的介绍,更多相关资讯请网侠手机站~
更多龙珠直播内容,请进入专题:
安卓版本:1.1.6苹果版本:v3.0.0
专题类型:影音类
更新时间:
专题标签:宅男播放器玩机必备美女直播美女视频
龙珠直播是目前国内最火爆的视频游戏平台,在这里,您可以实时接到直播邀请,还可以和美女直播在线聊天哦。这里拥有海量游戏视频,更多精...
8.0网侠指数
猜你喜欢宅男神器腾讯资讯手机直播
宅男看片神器是广大宅男宅女们消暑必备神器,网侠软件站宅男看片神器合集中为大家带来了时下最热门最好用的各种看片神器,呆呆、吉吉影音、西瓜影音,让大家清凉过一夏。...
v2.0.15.227
龙珠直播软件资讯[共3篇]
龙珠直播软件教程[共17篇]内容字号:
段落设置:
字体设置:
精准搜索请尝试:
从电视直播到网红弹幕 360浏览器一键直播互动欧洲杯
来源:互联网作者:互联网责编:小智
匆匆时光如白驹过隙,转眼又是一年欧洲杯。对于广大球迷朋友来说,除了那些精彩的比赛和耀眼的球星,被称为“国嘴”的解说员也往往令我们印象深刻。无论是宋世雄、韩乔生两位老师极具特色的嗓音和夸张的语速,还是黄健翔在06年世界杯上的激情爆发,都伴随着那些不眠之夜的电视转播信号,埋进了我们的青春记忆。电视看球年代解说带我们了解足球对于广大80、90后球迷来说,最熟悉的足球解说或者叫“评论员”莫过于段暄、刘建宏和黄健翔了。伴随着他们的经典解说,我们认识了西甲、英超、意甲、德甲、法甲五大联赛,也目睹了一届届世界杯、欧洲杯冠军的诞生,更记住了他们所演绎的经典段子。曾经的五大“国嘴”你认识几个?当然,庞大的球迷群体也存在着众口难调的问题,对于解说员不满的也是大有人在,个别解说甚至遭遇过全国观众的集体吐槽。相信很多专业球迷都有过想自己主持一场真正顶级足球比赛的想法,而网络直播的行业的迅速走红,也让这种想法成为了可能。网络直播看球大家都是评论员360安全浏览器欧洲杯一键直播专题随着近两年网络直播的兴起,科技给了每个人成为足球主播的机会,今年欧洲杯期间,无论您是否是红人,只要您有表现欲,安装360安全浏览器8.2版本,轻击“一键直播”按钮,即可秒变网络主播,想怎么解说,就怎么解说,再也不用忍受伪专家们的荼毒。或许下一个在球迷们口中流传的经典解说段子,就来自于你。360安全浏览器一键直播功能使用十分简单,您无需安装任何直播软件,只需打开360安全浏览器,可以在浏览器下方看到“一键直播”入口,点开之后我们可以看到“精彩直播”与“我要直播”两个按钮,在“精彩直播”页面中会随机推荐当前正在直播的频道,而我要直播版块则是自己当主播,把你眼中的欧洲杯分享给网友们。我们点击“我要直播”按钮后会弹出一个注册界面及主播需要遵守的条款,注册完成后即可将电脑画面以及摄像头添加到直播内容中。从这一刻起,再也不用一个人面对电视看球,再也不用担心满腹的激情无人诉说;从这一刻起,无论是恨铁不成钢的吐槽,还是个人风格强烈的解说,都有人与你一同分享。花式观看欧洲杯开启看球新姿势除了自己参与到直播欧洲杯大军中,还可以选择花式观看欧洲杯。《花游欧洲杯》漂亮妹子带你领略法国风土人情,《翻转法兰西》在法国当地与球迷们线上互动,全程关注比赛进程,由BTV足球解说员朱煜明担任主持人的《爆椒欧洲杯》则在国内为广大网友直播,节目每天邀请国安球员和花椒足球宝贝出境,不论帅哥还是美女,你想看的全都有,《我是海叔―欧洲杯特别节目》邀请前国脚孙继海担任嘉宾主持,比赛期间每天与网友进行互动,带你捋清欧洲杯,四档自制直播节目带你360度无死角接触欧洲杯。在这个属于欧洲杯的夏天,不想一个人对着电视癫狂,上360安全浏览器一键直播自己做主播边看边分享;不想出门又想有一票小伙伴一起侃球,上360安全浏览器看线上直播参与弹幕互动交流讨论。得益于360安全浏览器强大的视频直播能力,让看欧洲杯又有了新姿势。这一刻,我们都是解说员。
声明:IT之家网站刊登/转载此文出于传递更多信息之目的,并不意味着赞同其观点或论证其描述。
大家都在买
软媒旗下软件:||||||||
IT之家,软媒旗下科技门户网站 - 爱科技,爱这里。
Copyright (C) , All Rights Reserved.
版权所有 鲁ICP备号如何获取斗鱼直播间的弹幕信息?
如何获取如图红色框中的弹幕信息呢?想做一些基于弹幕信息的二次开发。
按投票排序
在参考顶楼的回答和评论后,正确获取到了弹幕,来回报下社会,代码已经放在Github上了! 代码是C写的,本来用的python,感觉C更好用(在处理数据的时候)。比较喜欢看yyf的dota2直播,但是最近yyf经常吹B,说有网友弹幕问“枫哥枫哥,你的XX怎么这么厉害啊”,水友们纷纷表示不信,所以就想着把弹幕爬下来,同时还有那些说赢了直播吃翔的,我通通都要记录下来!!!回答正题,那我们该如何弄清楚这个协议呢?弹幕属于实时消息,第一反应应该用websocket实现,打开chrome,F12,websocket中竟然找不到!那估计是通过Flash实现了。前端不熟,找了半天也没找到JS实现代码,只好祭出wireshark来分析了。看了顶楼的提示,在wireshark中查看端口为8601的数据包,如下图所示。前三个数据包就是TCP的三次握手啦,复习下;接着我们看第四个数据包,如下图所示一般来说通信协议设计“内容长度”+“内容”,我们来看tcp数据包内容,前四个字节为0x59 = 5*16+9 = 89,再看整个数据包长度为93,正好符合长度+内容,差不多我们可以确定通信协议如下:一般来说通信协议设计“内容长度”+“内容”,我们来看tcp数据包内容,前四个字节为0x59 = 5*16+9 = 89,再看整个数据包长度为93,正好符合长度+内容,差不多我们可以确定通信协议如下:struct { //数据包长度 //经抓包发现该字段一直与len字段一致 //不知道啥意思,发现请求都是0x2b1, 返回都是0x2b2char content[0]; //消息具体内容}从图中的内容中可以看到:1. 登录弹幕服务器: "type@=loginreq/username@%s=/password@=%s/roomid@=%d/ct@=2/",输入自己的账号密码(经测试发现,账号密码随便填都能成功),要看的房间id,如yyf的房间id为52428通过socket发送上面的内容后,你回收到这样的一条数据,格式与发送格式一样:“type@=loginres/userid@=0/roomgroup@=0/pg@=0/sessionid@=0/username@=/nickname@=/live_stat@=0/is_illegal@=0/npv@=0/best_dlev@=0/cur_lev@=0/”,没发现有啥有用的数据。2. 收到上面的消息后,这时候要加入一个组,格式如下:"type@=joingroup/rid@=%d/gid@=%d/",rid就是房间id,要注意的问题来了:gid应该是group id,登录不同房间该id都不一样,每次我都是抓包来查看该id是多少,有知情人告诉我吗?(一楼评论中也提到这个问题)发送上面的消息后,我们就可以安心的接收数据了,然后从数据中提取我们想要的就可以了,其中很多数据都不懂啥意思。最后我们看下yyf房间的弹幕哈!(节奏带的飞起)
: 更新Python客户端,修复由于斗鱼网页版面修改带来的小问题,直接开启海量弹幕模式(请大家不要问我为什么端午节这一天为什么闲着没事更新代码,这个真的和情人节是同一个原因).
: 更新Python客户端,增加直播视频的Live获取,以及Mac平台下面的Mplayer的视频播放.代码均放在Github上面. Update
: 更新Python和Ruby客户端(请大家不要问我为什么情人节这一天为什么闲着没事更新代码)由于zhihu没有法子贴动态图,那只好移步到我的博客一看了.(看博客之前记得点赞╮(╯_╰)╭)===================优雅的看斗鱼TV的分割线==================================-1.如果不想看长文,直接使用.则在安装好Python3或者Ruby2.0以上版本.#安装Python客户端
pip3 install danmu.fm
# 比如主播的直播间
danmu.fm /16789
danmu.fm 16789
#安装Ruby客户端
gem install danmu
danmu douyu [room_id/url]
danmu douyu qiuri
danmu douyu /13861
就可以看到如下结果咯0.前言前几天(寒假前咯)闲着无聊,看到舍友们都在看斗鱼TV,虽然我对那些网络游戏都不是非常感兴趣,但是我突然间想到,如果我可以获取上面的弹幕内容,不就有点意思了么?1.分析阶段如果我想要抓取网页上面的东西,无非就是两种方法使用浏览器,手工(自己点击)或者非手工(使用JS脚本),存取我想要的东西。编写HTTP客户端(斗鱼无HTTPS通讯)第一种方法是万能的,但显然是不行的, 原因如下:手动保存实在是不可行,程序员不为也。浏览器与本地交互有限,换而言之,也就是即使我抓取了对应的弹幕,我也没有办法解决持久化的问题。假设你选择的是Chrome或者firefox浏览器,也不是不能实现持久化,但这需要写扩展,Chrome扩展没有写过,也不是很感兴趣。第二种方法显然是一个正常的程序员的做法。语言选用Ruby写一个客户端,也就是写一个小爬虫,使用的场景:用户在终端执行命令gem install danmu
danmu douyu [room_id/url]
danmu douyu qiuri
danmu douyu /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的每一条消息就好了.多分析几组数据,但还是对发送消息内容缺乏把握,特别是在用户认证,用户接收弹幕这一块。在搜索引擎上搜索了一阵,发现知乎上有个帖子,读完终于解了我的疑惑。地址为: 在此基础上,省略若干消息分析过程。总结后得出斗鱼TV网站的服务器分布。1.2.房间信息和弹幕认证服务器获取首先我们拿随便一个主播房间来说,比如,qiuriTa的房间链接分为两种[房间对这个主播房间页面请求,正常,所有的有用信息都不是放在HTML中渲染出来,而是有一条放在HTML中内置的JS脚本中,这是为了减少服务器渲染HTML的压力?可是渲染放在JS里面不也一样需要渲染?(不明白)总之,就是程序先加载没有具体数据填充页面,然后JS更新数据。内置的两段JS脚本,JS脚本中有两个变量,该变量很容易转换成JSON数据,也就是两段JSON数据,一个是关于主播的个人信息,另一个是关于弹幕认证服务器的列表(该列表中的任意一个服务器均可以认证,但每一次请求主播页面得到的认证服务器列表都不一样)通过这步,我们就拿到了主播的信息以及弹幕服务器的认证地址,端口。1.3.发送Socket消息的流程简介我们通过抓包,分析那一大坨数据包,可以确定以下通过以下的流程便可以获取弹幕消息。(分析过程比较繁琐)首先建立两个Socket。一个用于认证(),另一个用户获取弹幕()。步骤1:
发送消息登陆,获取消息1解析出匿名用户的用户名,再获取消息2解析出gid步骤2:
发送qrl消息,获取两个没有什么用的消息步骤3:
发送keeplive消息步骤4:
发送伪登陆消息(所有匿名用户都一样只需要输入步骤一中用户名就行了,因为认证已经在上面做过了)步骤5:
发送join_group消息需要步骤一中国的gid步骤6:
不断的recv消息就可以获取弹幕消息了后面会详细解释2.1.消息Socket消息格式以及发送一条消息既然是发消息,那么每条消息总是有些格式的。斗鱼的消息格式大致如下:每一条消息并遵循下面的格式:1.通信协议长度,后四个部分的长度,四个字节2.第二部分与第一部分一样3.请求代码,发送给斗鱼的话,内容为0xb1,0x02, 斗鱼返回的代码为0xb2,0x024.发送内容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*')
@end = [0x00].pack('c*')
@length + @code + @magic + @content + @end
经过封装,我们仅仅关注那些可见的字符串,也就是Content部分就可以了。content部分,也就是发送消息的内容,在文章后面将会详解。开启两个Socket,一个用户认证,另一个用于弹幕的获取。用于用户弹幕认证的,是2.1中所说的认证服务器列表中任意一个。挑选出来一组ip和端口 = TCPSocket.new ,用户获取弹幕的只要为:8601
四组域名:端口均可以作为如下的DANMU_SERVER和PORT = TCPSocket.new DANMU_SERVER,DANMU_PORT发送一条消息只需如此
data = "type@=loginreq/username@="+@username+"/password@=3456/roomid@=" + @room_id.to_s + "/"
all_data = message(data)
@danmu_socket.write all_data
把需要传输的字符串放进去就好了.接下来,我们需处理上面说的六个步骤2.2.发送消息详细流程之步骤一发送消息内容为:type@=loginreq/username@=/ct@=0/password@=/roomid@=156277/devid@=DF9E6B39F8D8A2E928BB7C/rt@=/vk@=4fc6e613fc650aed6c8a619/ver@=/我们需要注意的内容如下:type 表示消息的类型登陆消息为loginreq
username 不需要,请求登陆以后系统会自动的返回对应的游客账号。
ct 不清楚什么意思,默认为0并无影响
password 不需要
roomid 房间的id
devid 为设备标识,无所谓,所以我们使用随机的UUID生成
rt 应该是runtime吧,时间戳
vk 为时间戳+"7oE9nPEG9xXV69phU31FYCLUagKeYtsF"+devid的字符串拼接结果的MD5值(这个是参考了一篇文章,关于这一处我也不大明白怎么探究出来的)
通过这一步,我们可以获取两条消息,并从消息中使用正则表达式获取对应的用户名以及gid
str = @danmu_auth_socket.recv(4000)
@username= str[/\/username@=(.+)\/nickname/,1]
str = @danmu_auth_socket.recv(4000)
@gid = str[/\/gid@=(\d+)\//,1]
2.3.发送消息详细流程之步骤二发送的消息内容为"type@=qrl/rid@=" + .to_s + "/"无需多说,类型为qrl,rid为roomid,直接发送这条消息就好。返回的两条消息也没有什么价值。
= "type@=qrl/rid@=" + @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.发送消息详细流程之步骤三发送的消息内容为"type@=keeplive/tick@=" + timestamp + "/vbw@=0/k@=19beba41da8ac2b4c7895a66cab81e23/"直接发送。无太大意义。
data = "type@=keeplive/tick@=" + timestamp + "/vbw@=0/k@=19beba41da8ac2b4c7895a66cab81e23/"
msg = message(data)
@danmu_auth_socket.write msg
str = @danmu_auth_socket.recv(4000)
前三步,也就是2.2-2.3-2.4三步骤,也就是使用 完成获取username和gid的重要步骤。获取这两个字段以后,也就完成了它存在的使命。接下来的就是获取弹幕的时候了!2.5.发送消息详细流程之步骤四消息内容为:"type@=loginreq/username@="++"/password@=3456/roomid@=" +.to_s + "/"和上面2.2中略有不同。但是,需要注意的是
username 为2.2中所得到的username
password 的值得变化
data = "type@=loginreq/username@="+@username+"/password@=3456/roomid@=" + @room_id.to_s + "/"
all_data = message(data)
@danmu_socket.write all_data
str = @danmu_socket.recv(4000)
2.6.发送消息详细流程之步骤五接下来就是完成认证的最后一步了,join_group的消息内容为"type@=joingroup/rid@=" + .to_s + "/gid@="++"/"gid为2.2中所得到的gid。
= "type@=joingroup/rid@=" + @room_id.to_s + "/gid@="+@gid+"/"
msg = message(data)
@danmu_socket.write msg
2.7.发送消息详细流程之步骤六获取弹幕,并且打印出来。
danmu_data = @danmu_socket.recv(4000)
type = danmu_data[danmu_data.index("type@=")..-3]
puts type.gsub('sui','').gsub('@S','/').gsub('@A=',':').gsub('@=',':').split('/')
后三步,则是 获取弹幕的步骤。于是,通过这些步骤,就可以完成了简单的danmu的核心代码,接下来的步骤就是完善,重构这些代码了。总结痛点一,至今还没有解决rtmp地址的获取找了很久没有办法解决rtmp地址的自动获取:路径如下这一处的请求不是XHR,也就是不是JS脚本通过XMLHttpRequest异步加载;那么,八成是flash通过http协议获取的。我估计八成执行逻辑应该是在flash之中。也就不方便获取其中的sign值.故,暂时无法解析rtmp视频流地址了效果图和代码效果图:我擦,居然不能传输gif图片.请移步到这里查看吧.代码的地址为:技术浅薄,还请轻拍。参考链接PS:如果有问题可以在下方留言或者发送email到给我。
[多图预警]Update:总结在博客里:Github 项目地址:欢迎去提各种 issue & PR (代码水平不高).../********************************************************************************************/Update:最近几天会把 Java 项目发布到 Github 上面,大家提提意见 :)/********************************************************************************************/之前看到这个问题,感觉挺好玩的,就研究了下。照着前面的思路,抓包分析。其他几位的回答,基本能抓到弹幕数据了,但是其中一个参数gid,需要手动抓包得到。我也查看了浏览器加载的js文件,没看到相关线索。最后看到排名第一的回答评论里有人说可以通过请求页面里server_config的ip。然后我就顺着这条线索探索下去了。具体过程如下:先获取到直播页面中的server_config相关字段,发现是经过urlencode的。然后进行urldecode,得到json数据,再格式化一下,然后进行urldecode,得到json数据,再格式化一下,就变成这样:[{"ip":"119.90.49.107","port":"8035"},{"ip":"119.90.49.102","port":"8008"},{"ip":"119.90.49.110","port":"8050"},{"ip":"119.90.49.104","port":"8020"},{"ip":"119.90.49.107","port":"8034"},{"ip":"119.90.49.92","port":"8059"},{"ip":"119.90.49.95","port":"8071"},{"ip":"119.90.49.101","port":"8001"},{"ip":"119.90.49.93","port":"8063"},{"ip":"119.90.49.91","port":"8053"}]
用wireshark对以上几个端口进行监听,然后发现了几个相关的请求前面三组四字节数据,就不解释了,前面的答案写的很清楚。前面三组四字节数据,就不解释了,前面的答案写的很清楚。相关参数:type@=loginreq/
username@=/
password@=/
roomid@=25515/
devid@=1CBFAD50D6F/
#随机uuid 无连字符'-' 均为大写
#时间戳 单位为s
vk@=c2f6b956c37dabeeda0d568/
其中vk的值也可以这样算(算出来的值和抓包请求的结果不同,但能通过服务器验证,没明白原理)MD5(timestamp + "7oE9nPEG9xXV69phU31FYCLUagKeYtsF" + uuid)
至于中间那段字符串是什么鬼,我也没搞懂。这个算法是从github上的项目看到的用代码也模拟请求任意一个地址即可,之后服务器会返回一串很长的数据,应该是几组返回数据合在了一起的,不过没啥影响像这样:返回的type为msgrepeaterlist,里面包含了一组可用的弹幕服务器,其实就是
/12602 四个。数据里面带了一堆@符号是因为它进行了编码。在js里面发现的一段代码,转化为java代码 大概是这个样子:
public static String deFilterStr(String str) {
if (str == null) return null;
return str.trim().replace("@A", "@").replace("@S", "/");
public static String filterStr(String str) {
if (str == null) return null;
return str.trim().replace("@", "@A").replace("/", "@S");
然后decode出来,通过'/'字符可以分割成若干个用"@="连接的键值对。其实也可以用正则直接提取。后面还有一条type为setmsggroup的数据,其中携带了gid参数,这个就是一直在寻找的groupid啦!这个找到之后,后面就照着请求格式,登陆弹幕服务器这样就请求完毕了,后面坐等服务器给你返回弹幕数据咯~~弹幕数据包是这样子的(返回的参数倒是不少,主要就是content和snick两个):还有一个地方,就是发送心跳包,类似这样经过测试,只用发送type和tick时间戳就有效了。时间间隔的话,大概40s左右一次。最终抓出来的就这样咯
##################更新##########################最近斗鱼修改了弹幕格式,大概长这个样子b'\x81\x00\x00\x00\x81\x00\x00\x00\xb2\x02\x00\x00type@=chatmsg/rid@=9401/uid@=/nn@=\xe8\xb6\x85\xe8\xb6\x8a\xe7\xa5\x9e\xe7\x9a\x84boy/txt@=\xe6\x89\x93\xe8\x84\xb8\xe5\x90\xa7/cid@=20e4e3fe427e410c67c0/level@=5/\x00'
其中主要的修改为:#content@=弹幕内容,sinck@=昵称,type@=chatmessage改为了#txt@=弹幕内容nn@=昵称,type@=chatmsg可能是为了减少流量吧,我的github 上有更新,大家可以去看最新的代码。最近还把代码打了个包。##################二次更新昏割线#####################成功的勾搭上天天卡牌,这个东西可以用来帮忙分析素材出现的时间。同时帮助解决了熊猫TV素材获取的问题。同时帮助解决了熊猫TV素材获取的问题。==================最开始的答案==============================这几天我按照楼上的几位大拿的思路以及github上例程,用python写了一个斗鱼获取弹幕的脚本,github如下:这个脚本添加了数据库的功能,以便保存爬取到的信息做分析。同时在github上fork了熊猫TV的获取弹幕的脚本,同样添加了数据库功能。不讲太多废话,总结一下思路,如下:
1、通过requests爬取对应主播的roomid以及登录服务器的地址。
2、socket模拟登录type@=loginreq向登录服务器发出请求。
3、返回的数据中获取弹幕服务器地址、弹幕服务器端口号以及groupID
4、socket模拟登录type@=loginreq向弹幕服务器发出登录请求。
5、socket模拟登录type@=loginreq向弹幕服务器发出加入group的请求。
6、循环接收返回请求,type@=chatmessage的是弹幕信息,其中content@=弹幕,snick@=昵称
7、每隔40s发送keeplive请求由于具体的步骤楼上的几位以及写的很详细了,我仅仅做些补充说明:
'\xb2\x02'这个值可以用来对多个返回信息进行分割,在弹幕量大的时候几个信息是合在一起一起发送过来的,这时用split进行分割非常有必要。楼中,问题比较大的是gid的获取,这个问题的原因在于他是从第4步开始,直接从弹幕服务器上获取弹幕,相关服务器地址和端口都是wireshark手动抓取,如果按照上述步骤来gid的获取不是大问题,另外几楼都是用完整的流程获取弹幕。不过大大的C用的确实不错,代码也很易读。
弹幕服务器地址均为,端口均为、1。所以如果不是为了获取groupID的话确实只能从第4步开始。
发送keeplive和存入数据库的时候我是开了新的线程。
用win平台的cmd实现,总是有特殊符号由于编码的问题不能打印出来,弹出错误,只能用try语句,不知道别的平台是不是都能打印。
接下来讲讲我的问题:
1、大家是怎么判断主播没直播了呢?
我用爬虫抓取网页上的人气和体重信息返回为空。
2、楼下有位匿名用户提到反编译flash播放器,然后再根据编码逻辑编写python实现,我觉得这个思路是否比wireshark抓取数据包然后分析数据好的多?=======================================用win平台实现的,虽然很丑,但图还是要上的。最后贴一些弹幕服务器的返回信息供大家参考msgrepeaterlist=b'w\x01\x00\x00w\x01\x00\x00\xb2\x02\x00\x00type@=msgrepeaterlist/rid@=16789/lis\
t@=id@AA=75701@ASnr@AA=1@ASml@AA=10000@ASip@AA=@ASport@AA=12601\
@AS@Sid@AA=75702@ASnr@AA=1@ASml@AA=10000@ASip@AA=@ASport@AA=126\
02@AS@Sid@AA=74004@ASnr@AA=1@ASml@AA=10000@ASip@AA=@ASport@AA=8\
602@AS@Sid@AA=74003@ASnr@AA=1@ASml@AA=10000@ASip@AA=@ASport@AA=\
8601@AS@S/\x00/\x00\x00\x00/\x00\x00\x00\xb2\x02\x00\x00type@=setmsggroup/rid@=1\
6789/gid@=169/\x00"\x00\x00\x00"\x00\x00\x00\xb2\x02\x00\x00type@=scl/cd@=0/maxl\
@=30/\x008\x00\x00\x008\x00\x00\x00\xb2\x02\x00\x00type@=initcl/uid@=/\
cd@=6000/maxl@=30/\x00\x9f\x00\x00\x00\x9f\x00\x00\x00\xb2\x02\x00\x00type@=memb\
erinfores/silver@=0/gold@=0/strength@=0/weight@=/exp@=0/curr_exp@=0/lev\
el@=1/up_need@=1000/fans_count@=636109/fl@=0/list@=/glist@=/\x00K\x00\x00\x00K\x00\x00\x00\xb2\x02\x00\x00rid@=16789/gid@=0/type@=bcrp/pt@=2/pid@=10165/pps@=9107100/rps@=0/\x00'
#Sip@AA=弹幕服务器,@ASport@AA=端口号
chatmessage=b'U\x01\x00\x00U\x01\x00\x00\xb2\x02\x00\x00type@=chatmessage/rescode@=0/sender@\
=/content@=\xe6\x88\x91\xe7\x9a\x84\xe6\x98\xbe\xe5\x8d\xa1/snick@=\xe6\x82\
\x94\xe5\x88\x9d\xe8\xb0\x8ei/cd@=4/maxl@=22/chatmsgid@=e56c175bb51\d\
/col@=0/ct@=0/gid@=6/rid@=284584/sui@=id@A=@Snick@A=\xe6\x82\x94\
\xe5\x88\x9d\xe8\xb0\x8ei@Srg@A=1@Spg@A=1@Sstrength@A=11120@Sver@A=@S\
m_deserve_lev@A=0@Scq_cnt@A=0@Sbest_dlev@A=0@Slevel@A=8@Sgt@A=0@S/\x00'
#content@=弹幕内容,sinck@=昵称
userrnter=b'`\x01\x00\x00`\x01\x00\x00\xb2\x02\x00\x00type@=userenter/rid@=16789/gid@=194/\
userinfo@=id@A=@Sname@A=qq_Qq5dQ9et@Snick@A=\xe8\x91\xa3\xe5\xb0\x8f\xe5\
\xa4\xab\xe4\xb8\xab@Srg@A=1@Spg@A=1@Srt@A=@Sbg@A=0@Sweight@A=0@Sstren\
gth@A=6500@Scps_id@A=0@Sps@A=1@Sver@A=@Sm_deserve_lev@A=3@Scq_cnt@A=1@Sb\
est_dlev@A=3@Sglobal_ban_lev@A=0@Sexp@A=188100@Slevel@A=9@Scurr_exp@A=26100@Sup_\
need@A=40400@Sgt@A=0@S/\x00'
dgn=b'\xcd\x00\x00\x00\xcd\x00\x00\x00\xb2\x02\x00\x00type@=dgn/gfid@=104/gs@=1/gfcn\
t@=1/hits@=1/sid@=2564049/src_ncnm@=\xe5\x9d\x8f\xe5\xbf\x83\xe8\x82\xa0\xe7\x9a\
\x84\xe6\xa9\x98\xe5\xad\x90/rid@=16789/gid@=194/lev@=0/cnt@=0/sth@=64660/level@\
=6/bdl@=0/dw@=/rpid@=0/slt@=0/elt@=0/srg@=1/spg@=1/\x00'
upgrade=b'P\x00\x00\x00P\x00\x00\x00\xb2\x02\x00\x00type@=upgrade/uid@=/rid@=167\
89/gid@=194/nn@=sleep4007/level@=4/\x00'
keeplive=b'3\x00\x00\x003\x00\x00\x00\xb2\x02\x00\x00type@=keeplive/tick@=/uc@=32697/\x00'
donateres=b'\xef\x00\x00\x00\xef\x00\x00\x00\xb2\x02\x00\x00type@=donateres/rid@=16789/gid\
@=194/ms@=100/sb@=12861/src_strength@=17400/dst_weight@=/hc@=4/r@=0/gfi\
d@=1/gfcnt@=0/sui@=id@A=3577140@Srg@A=1@Snick@A=\xe7\x81\xaf\xe5\xa1\x94\xe4\xbc/\x00'
donateres1=b'\xe2\x00\x00\x00\xe2\x00\x00\x00\xb2\x02\x00\x00type@=donateres/rid@=25515/gid\
@=312/ms@=100/sb@=17/src_strength@=700/dst_weight@=/hc@=1/r@=0/gfid@=1/\
gfcnt@=0/sui@=id@A=@Srg@A=1@Snick@A=@Scur_lev@A=0@Scq_cnt@A=0@S\
best_dlev@A=0@Slevel@A=2@S/\x00'
#dst_weight@=体重
bc_buy_deserve=b'\x97\x01\x00\x00\x97\x01\x00\x00\xb2\x02\x00\x00type@=bc_buy_deserve/level@=9/\
lev@=3/rid@=16789/gid@=194/cnt@=1/hits@=1/sid@=/sui@=id@A=@Sname\
@A=auto_l1AafOnuG6@Snick@A=\xe5\x8d\x88\xe5\xa4\x9c\xe4\xb8\xb6Slaughter@Srg@A=1\
@Spg@A=1@Srt@A=@Sbg@A=0@Sweight@A=0@Sstrength@A=3900@Scps_id@A=0@Sps@A\
=1@Sver@A=@Sm_deserve_lev@A=0@Scq_cnt@A=0@Sbest_dlev@A=0@Sglobal_ban_lev\
@A=0@Sexp@A=193500@Slevel@A=9@Scurr_exp@A=31500@Sup_need@A=35000@Sgt@A=0@S/\x00'
onlinegift=b'l\x00\x00\x00l\x00\x00\x00\xb2\x02\x00\x00type@=onlinegift/rid@=16789/uid@=216\
25213/gid@=194/sil@=130/if@=6/ct@=0/nn@=\xe4\xba\x91\xe5\xb8\x95/ur@=1/level@=10\
那我说说?是这样的,斗鱼的弹幕信息有个自己的服务器 可以抓包看到,他通过TCP连接到斗鱼弹幕服务器,然后获取的信息,那么想要对它进行二次开发只需要模拟用户连接并登入弹幕服务器即可。 弹幕连接 OnConn
(program):1
弹幕 UserLogin [type@=loginreq/username@=xxxx/password@=3456/roomid@=58718/]
(program):1 弹幕 网络数据 [type@=loginres/userid@=0/roomgroup@=/pg@=0/sessionid@=6/username@=/nickname@=/is_signined@=/signin_count@=32756/s@=% ?/live_stat@=/npv@=32756/]
(program):1 弹幕登录成功
VM160:1 弹幕分组 [type@=joingroup/rid@=58718/gid@=0/]
2VM171:1 FMPNetStream连接状态:NetStream.Buffer.Full
VM175:1 弹幕 网络数据 [type@=userenter/rid@=58718/gid@=0/userinfo@=id@A=4295897@Sname@A=auto_DJUziSYiJo@Snick@A=芙苏不语丶怪力乱神@Srg@A=1@Spg@A=1@Srt@A=@Sbg@A=0@Sweight@A=12800@Sstrength@A=51800@Scps_id@A=0@Sps@A=1@Sver@A=0@Sm_deserve_lev@A=0@S/]
VM176:1 新用户进入信息: [id@=4295897/name@=auto_DJUziSYiJo/nick@=芙苏不语丶怪力乱神/rg@=1/bg@=0/pg@=1/rt@=/weight@=12800/strength@=51800/cps_id@=0/]
大概就是这么个数据包
以前我们是做视频聊天站的。2014年8月-9月我们一个月的时间抄了一个斗鱼,没错是整个站。开始的时候由于内容上的高度重合,比如蜡笔小新、RM等,房间也没有人气,我将斗鱼某房间的弹幕扒下来转播到对应内容的房间中,并过滤掉一些关键字,足以以假乱真。虽然平台最终半死不活,且『技术本身并不可耻』,然而还是匿了。技术核心我看大家都没答到一点,就是反编译flash播放器,因为所有与socket相关的实现都在flash里,反编译出源码后的逻辑、协议,一目了然,然后用python实现出来,很简单,不上码了。这问题应该是纯技术交流吧,我这么想。
既然没人发nodejs版,那我就发一个吧var net = require('net');
var uuid = require('node-uuid');
var md5 = require('md5');
var request = require('request');
var HOST = '';
var PORT = 8602;
function send(socket, payload)
var data = new Buffer(4 + 4 + 4 + payload.length + 1)
data.writeInt32LE(4 + 4 + payload.length + 1, 0); //length
data.writeInt32LE(4 + 4 + payload.length + 1, 4); //code
data.writeInt32LE(0x, 8); //magic
data.write(payload, 12); //payload
data.writeInt8(0, 4 + 4 + 4 + payload.length); //end of string
socket.write(data)
function login(socket, roomid, user, password)
var req = 'type@=loginreq/username@=' + user + '/password@=' + password + '/roomid@=' + roomid;
send(socket, req);
function getGroupServer(roomid, callback)
request({uri:'/' + roomid}, function(err, resp, body) {
var server_config = JSON.parse(body.match(/room_args = (.*?)\}\;/g)[0].replace('room_args = ', '').replace(';', ''));
server_config = JSON.parse(unescape(server_config['server_config']));
callback(server_config[0].ip, server_config[0].port);
function getGroupId(roomid, callback)
var rt = new Date().now;
var devid = uuid.v4().replace(/-/g, '');
var vk = md5(rt + '7oE9nPEG9xXV69phU31FYCLUagKeYtsF' + devid)
var req = 'type@=loginreq/username@=/password@=/roomid@=' +
roomid + '/ct@=0/vk@=' + vk + '/devid@=' +
devid + '/rt@=' + rt + '/ver=@/';
getGroupServer(roomid, function(server, port) {
console.log('group server: ' + server + ':' + port);
var socket = net.connect(port, server, function() {
send(socket, req);
socket.on('data', function(data) {
if (data.indexOf('type@=setmsggroup') &= 0) {
var gid = data.toString().match(/gid@=(.*?)\//g)[0].replace('gid@=', '');
gid = gid.substring(0, gid.length - 1);
socket.destroy();
callback(gid);
function monitorRoom(roomid)
var socket = net.connect(PORT, HOST, function() {
login(socket, 'visitor1234567', '3456');
setInterval(function() {
send(socket, 'type@=keeplive/tick@=70/'); //send keep alive message repeatly
}, 50000);
socket.on('data', function(data) {
//data is a Buffer here
if (data.indexOf('type@=loginres') &= 0) {
getGroupId(roomid, function(gid) {
console.log('gid of room[' + roomid +'] is ' + gid)
send(socket, 'type@=joingroup/rid@=' + roomid + '/gid@=' + gid + '/');
} else if (data.indexOf('type@=chatmessage') &= 0) {
var msg = data.toString();
var snick = msg.match(/snick@=(.*?)\//g)[0].replace('snick@=', '');
var content = msg.match(/content@=(.*?)\//g)[0].replace('content@=', '');
snick = snick.substring(0, snick.length - 1);
content = content.substring(0, content.length - 1);
console.log(snick + ': ' + content);// 弹幕
} else if (data.indexOf('type@=userenter') &= 0 ||
data.indexOf('type@=keeplive') &= 0 ||
data.indexOf('type@=dgn/gfid@=131') &= 0 ||
data.indexOf('type@=blackres') &= 0 ||
data.indexOf('type@=dgn/gfid@=129') &= 0 ||
data.indexOf('type@=upgrade') &= 0 ||
data.indexOf('type@=ranklist') &= 0 ||
data.indexOf('type@=onlinegift') &= 0) {
//没用的消息
} else if (data.indexOf('type@=spbc') &= 0) {
var drid = data.toString().match(/drid@=(.*?)\//g)[0].replace('drid@=', '');
drid = drid.substring(0, drid.length - 1);
console.log('rocket! room id:' + drid);
console.log(data.toString()); //在这里显示其它类型的消息
monitorRoom('&这里填roomid&');
我记录了下抓取弹幕的流程,可以参考下。地址: 代码:
斗鱼已经开放第三方接口了,获取弹幕的流程变得简单了许多:以下为大概流程第三方接入弹幕服务器:IP 地址: 端口:86011.客户端向服务器端发送登录请求,格式为;type@=loginreq/roomid@=****/
(再也不用想方设法的获取房间gid了,直接输入房间号就行(* ̄? ̄*))2.服务器将登陆成功的消息返回给客户端,单纯的相应而已3.客户端收到登录成功消息后发送进入弹幕分组请求给服务器,格式为:type@=joingroup/rid@=****/gid@=-9999/
(gid为固定的-9999,该组成员将接受对应直播间全部弹幕~rid也是当前房间号)4.服务器持续将新的弹幕响应发送给客户机*客户端需要每隔 45 秒发送心跳信息给弹幕服务器
请教各位大牛,按照大家的说法,我已经完成了字幕的获取,但是关于心跳包的问题,有一点疑惑。我用wireshark TCP包的时候,发现本地发送过去一句type@=mrkl/之后,弹幕服务器也会发送一条同样的信息回来,但是我自己用socket.send的时候,就不会得到这样同样的报文,是我哪里做错了么? 请教,是我哪里做错了么?请教,是我哪里做错了么?
已有帐号?
无法登录?
社交帐号登录}

我要回帖

更多关于 怎样用电脑看电视直播 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信