斗鱼tv怎么申请直播间申请完直播间后能换id吗

后使用快捷导航没有帐号?
查看: 10075|回复: 6
新人欢迎积分1 阅读权限40积分683精华0UID帖子金钱23317 威望0
Lv.4, 积分 683, 距离下一级还需 317 积分
UID帖子威望0 多玩草0 草
请问斗鱼TV的ID怎么游戏里面改不了 系统一直显示不能用 求解释QQ 和谐 本人王者800分 想在一区冲个斗鱼王者
本帖最后由 瑶一瑶丶 于
11:54 编辑
新人欢迎积分1 阅读权限50积分1765精华0UID帖子金钱2985 威望0
Lv.5, 积分 1765, 距离下一级还需 735 积分
UID帖子威望0 多玩草0 草
服务器:艾欧尼亚
游戏ID:林妙妙丶
她还没有牵手的人
新人欢迎积分1 阅读权限99积分45215精华0UID帖子金钱24807 威望10
                      凝望你说话轻轻笑
Lv.10, 积分 45215, 距离下一级还需 9785 积分
UID帖子威望10 多玩草178 草
我也不知道哇&&这是什么情况哦,。& &&&
落花有意流水无情 沧桑之后是真情
新人欢迎积分0 阅读权限99积分42282精华0UID5507530帖子金钱83163 威望10
夜長夢會多.     你就不要想起我.
Lv.10, 积分 42282, 距离下一级还需 12718 积分
UID5507530帖子威望10 多玩草640 草
今天奖金都要发了 你去了也没用了
新人欢迎积分1 阅读权限40积分683精华0UID帖子金钱23317 威望0
Lv.4, 积分 683, 距离下一级还需 317 积分
UID帖子威望0 多玩草0 草
懂的有福利 QB 皮肤随便你选
新人欢迎积分1 阅读权限40积分284精华0UID帖子金钱1160 威望0
Lv.4, 积分 284, 距离下一级还需 716 积分
UID帖子威望0 多玩草0 草
你加我爸爸告诉你
你有药吗 。
新人欢迎积分1 阅读权限99积分37633精华0UID帖子金钱109347 威望14
           你滚起来很好看 ?        
Lv.10, 积分 37633, 距离下一级还需 17367 积分
UID帖子威望14 多玩草10046 草
论坛不允许贴QQ,YY,群之类的信息。
爱情守望者
爱情守望者
5153活动勋章
我去5153探探路
话题王小红花
话题王小红花
初级人缘勋章
初级人缘勋章
活动奖励勋章
活动奖励勋章
元宝专属一阶勋章。已绝版
马年新春勋章
手机APP马年迎春,马上有钱!
节日守望者
节日守望者
初级在线标兵
论坛在线时间达1000小时即可申请
英雄联盟功勋勋章
英雄联盟功勋勋章
天涯明月刀功勋勋章
这就是武侠
龙之谷活跃勋章
在龙之谷版面活跃而奖励的勋章
使命召唤OL功勋勋章
战争来了又走,而战士永远忠诚
炉石传说版面勋章
斗战神功勋勋章
斗战神版块功勋勋章
爱蜂蜜的小维尼
LOL妹纸专属勋章
我是女王,我最大!
棉花糖勋章
不论什么季节也阻挡不了吃棉花糖的节奏
永恒MM勋章
永恒MM勋章
需要金钱:1100
Powered by
手机盒子客户端点击或扫描下载梦想再次起航,人皇Sky周六斗鱼TV首播
时间: 10:30:38&&作者:艾斯卡达&&来源:游戏风云&&
&  如果追溯起来,Sky想必是大多80后乃至90后知道的第一位电子竞技选手,年,Sky连续两年夺得WCG世界冠军,之前被大家视如洪水猛兽般的游戏突然出现在各大媒体之中,让大家突然意识到:原来玩游戏也可以让五星红旗在全世界的目光下冉冉升起!一代人皇Sky,给我们带来了多少惊喜多少感动,可以说,他不仅是魔兽争霸的王者,更是中国电子竞技一股不可推动的中坚力量!
  今日,斗鱼TV直播平台正式宣布:WCG魔兽争霸项目世界冠军&&李晓峰Sky已正式加入斗鱼TV,之后将作为斗鱼TV主播为大家带来第一视角直播。本周末,Sky斗鱼首秀,朝思暮想的粉丝们,你们的鱼丸鱼翅准备好了么?周六周日早上10:30,定好闹钟早起给Sky来一个盛大的接风仪式吧!
  直播时间:8月8日、8月9日,每天早上10:30 & SKY魔兽教学视频点播:&
  直播地址:/285995
  姓名:李晓峰
  ID:Sky
  生日:日
  籍贯:河南省汝州市
  职业生涯:WE战队war3职业选手,退役后创建独立电竞品牌
  曾获荣誉:WCG世界总决赛war3项目世界冠军,WCG世界总决赛war3项目亚军,WCG2012世界总决赛war3项目季军等。
  个人简介:Sky(李晓峰)魔兽争霸世界冠军,WCG历史上卫冕war3的第一人,职业生涯中斩获诸多荣誉,与Grubby、Moon并称为魔兽争霸三巨头,被各位粉丝称为人皇Sky。2015年6月Sky正式宣布退役,转型创业,同年8月,Sky入驻斗鱼TV直播平台。
  Sky的经历不用多说,很多游戏玩家都能倒背如流。从1998年与游戏结缘到年夺得世界冠军,再到2015年的退役&&从13岁到30岁,可以说Sky是梦想家的代名词,而他的青春就是电子竞技。17年时间,Sky向我们证明着梦想的宝贵,也以自身经历鼓励着一代代游戏人勇敢追梦。
  斗鱼TV,国内最活跃的弹幕式直播平台,专注于游戏直播,包含MOBA、主机、街机、手游等各类游戏内容,同样涵盖有体育、音乐、御宅、户外、电竞赛事、品牌发布会的等直播。斗鱼TV立志打造全民直播平台,着力于进行大主播的培养以及草根主播的推广,旨在为更多游戏玩家提供最好的直播与观看环境。欢乐直播,尽在斗鱼TV!
更多精彩内容,请关注官方网站:玩游戏,就上
广播电视节目制作经营许可证:(沪)字第857号
增值电信业务经营许可证:沪B2-
网络文化经营许可证:沪网文【-063号
All Rights Reserved. 上海游戏风云文化传媒有限公司 版权所有 沪ICP备号热门搜索:
您的位置: -&
软件教程分类查找
非常抱歉!2345软件大全没能为您提供完善服务,万分感谢能得到您的指点!
您的建议:
精品软件课程
人气:4474367
photoshop教程让你从入门到精通,从新手快
人气:1196494
Excel是office的重要组成部分。多特Excel教
人气:3846870
WPS是金山公司的中文办公软件,包含文字,
人气:866868
AutoCAD是美国Autodesk公司开发的计算机辅
小游戏推荐
教程周榜教程总榜
12345678910
斗鱼TV怎么开直播 斗鱼TV做主播方法
出处:2345软件大全
人气:3984
核心提示:斗鱼TV怎么开直播?如果你有意在斗鱼TV开启自己的主播之路,请务必从头开始阅读本文。
  斗鱼TV怎么开直播?如果你有意在斗鱼TV开启自己的主播之路,请务必从头开始阅读本文。  一、直播机器配置  首先,你需要一台电脑来直播,我们以目前热门游戏英雄联盟、DOTA2、炉石传说等为例,推荐机器配置。  LOL直播台式机推荐配置:  CPU:E3-1230 v3 物理四核(虚拟八核)  主板:华硕B85系列  内存:8G或更多  显卡:GTX760 2G显存 或AMD同等级显卡  硬盘:500G 或 更多  此推荐配置基本通吃目前绝大部分游戏,其他消耗电脑配置较多的大型单机游戏,主播需要相应的提高配置。  二、直播网络要求  最低上传带宽为1Mbps(128KB/s),测速地址:   如果你的上传带宽不足,可以联系网络运营商提高带宽。推荐使用电信、网通的光纤线路,不推荐小运营商(长宽、艾普、移动、铁通等)。  三、注册斗鱼账号并申请直播间  1、主页()右上角注册斗鱼账号:然后登录,点击头像进入个人中心。  2、申请直播间。(需按要求详细填写)  首先请绑定您的个人手机,输入您的手机号码,进行短信或者语音验证,斗鱼系统会自动发送验证码至您的手机,输入即可完成验证。  海外用户请点击国际用户验证渠道。  手机验证完成后,请大家详细填写直播资料.  ①房间标题随意编写,可随时更改。  ②直播分类选择你要直播的游戏类型。  ③联系方式写您之前绑定的手机号。  ④填写你喜欢的描述内容。  申请直播成功。  3、直播房间设置  直播间审核之后你会看到这样的房间设置界面。  ①房间ID:系统分配不可更改。  ②房间标题:可随时修改,也就是观众看你房间的名称。(标题党会有特效,小心打脸)  ③房间公告:直播间右上角的内容,可介绍,可推广,属于观众最方便看到的内容之一。  ④直播详情:直播间播放器下面的大型介绍专区,发挥你的才能让观众更清楚的认识你。  ⑤当前域名:目前进入你房间的直接访问网址。  ⑥个性域名:可自定义非ID数字的登录网址,建议简单好记,太酷炫的可没人记得住。  ⑦房间设置:有熊孩子出没?你可以自己或叫人来solo他。  ⑧直播分类:随时修改你要直播的游戏分类,确定后只能在所选分类里找到你。  ⑨开始直播:系统会分配给你rtmp地址和串流码,使用直播软件调试开启直播。  ⑩直播教程:直播教程汇总页。  4、开始直播  做好了开播准备后,那么大家只需要验证一下实名认证,就可以开始直播啦。  想完成实名验证的玩家,在个人中心我的资料中找到实名认证。  然后按要求填写内容,再由银行网银转账至斗鱼指定账号,客服在48小时内会处理完毕你的请求,审核状态可在个人用户中心处查看。  注意:照片身份证信息数字,文字均需显示清晰,如有证件信息模糊者,可能导致验证被驳回。  PS: 实名认证后,一个主播账号只能对应一个手机号 、一个身份证号,一经绑定,无法解锁更换。  当验证完成后,从个人中心里直接点击直接进入直播间,右上角即有直播开关,点击开关,得到申请成功提示,直接使用直播软件就可以开始直播。  四、调试直播软件  (推荐)斗鱼TV直播伴侣/OBS直播/Xsplit直播  以上三种软件均可直播,主播们可根据自己的系统和使用熟练程度选择直播软件。
相关教程推荐
相关软件推荐
资源统计:无插件软件:94323个 无病毒软件:94619个 昨日已处理110个带插件、病毒的软件
本站总软件:94619个 软件总下载次数:21.553亿次
软件教程文章:94869篇 总浏览次数:2.998亿次第一时间获取手游新鲜资讯,请在微信公众帐号中搜索“便玩家”或用手机扫描左方二维码,即可获得便玩家每日精华内容推送和最优搜索体验。
12345678910如何获取如图红色框中的弹幕信息呢?想做一些基于弹幕信息的二次开发。
以前我们是做视频聊天站的。2014年8月-9月我们一个月的时间抄了一个斗鱼,没错是整个站。开始的时候由于内容上的高度重合,比如蜡笔小新、RM等,房间也没有人气,我将斗鱼某房间的弹幕扒下来转播到对应内容的房间中,并过滤掉一些关键字,足以以假乱真。虽然平台最终半死不活,且『技术本身并不可耻』,然而还是匿了。技术核心我看大家都没答到一点,就是反编译flash播放器,因为所有与socket相关的实现都在flash里,反编译出源码后的逻辑、协议,一目了然,然后用python实现出来,很简单,不上码了。这问题应该是纯技术交流吧,我这么想。
在参考顶楼的回答和评论后,正确获取到了弹幕,来回报下社会,代码已经放在Github上了! &a href=&///?target=https%3A///fishioon/douyu/blob/master/danmu.cc& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&douyu/danmu.cc at master · fishioon/douyu · GitHub&i class=&icon-external&&&/i&&/a&&br&代码是C写的,本来用的python,感觉C更好用(在处理数据的时候)。&br&&br&比较喜欢看yyf的dota2直播,但是最近yyf经常吹B,说有网友弹幕问“枫哥枫哥,你的XX怎么这么厉害啊”,水友们纷纷表示不信,所以就想着把弹幕爬下来,同时还有那些说赢了直播吃翔的,我通通都要记录下来!!!&br&&br&回答正题,那我们该如何弄清楚这个协议呢?&br&弹幕属于实时消息,第一反应应该用websocket实现,打开chrome,F12,websocket中竟然找不到!那估计是通过Flash实现了。前端不熟,找了半天也没找到JS实现代码,只好祭出wireshark来分析了。&br&看了顶楼的提示,在wireshark中查看端口为8601的数据包,如下图所示。&br&&img src=&/bc380df68d54c973a6e34f_b.png& data-rawwidth=&643& data-rawheight=&122& class=&origin_image zh-lightbox-thumb& width=&643& data-original=&/bc380df68d54c973a6e34f_r.png&&&br&前三个数据包就是TCP的三次握手啦,复习下;接着我们看第四个数据包,如下图所示&br&&img src=&/8b58accddb_b.png& data-rawwidth=&595& data-rawheight=&231& class=&origin_image zh-lightbox-thumb& width=&595& data-original=&/8b58accddb_r.png&&一般来说通信协议设计“内容长度”+“内容”,我们来看tcp数据包内容,前四个字节为0x59 = 5*16+9 = 89,再看整个数据包长度为93,正好符合长度+内容,差不多我们可以确定通信协议如下:&br&struct {&br& //数据包长度&br& //经抓包发现该字段一直与len字段一致&br& //不知道啥意思,发现请求都是0x2b1, 返回都是0x2b2&br&char content[0]; //消息具体内容&br&}&br&从图中的内容中可以看到:&br&1. 登录弹幕服务器: &type@=loginreq/username@%s=/password@=%s/roomid@=%d/ct@=2/&,输入自己的账号密码(经测试发现,账号密码随便填都能成功),要看的房间id,如yyf的房间id为52428&br&通过socket发送上面的内容后,你回收到这样的一条数据,格式与发送格式一样:&br&“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/”,没发现有啥有用的数据。&br&2. 收到上面的消息后,这时候要加入一个组,格式如下:&br&&type@=joingroup/rid@=%d/gid@=%d/&,rid就是房间id,要注意的问题来了:&br&gid应该是group id,登录不同房间该id都不一样,每次我都是抓包来查看该id是多少,有知情人告诉我吗?(一楼评论中也提到这个问题)&br&发送上面的消息后,我们就可以安心的接收数据了,然后从数据中提取我们想要的就可以了,其中很多数据都不懂啥意思。&br&最后我们看下yyf房间的弹幕哈!(节奏带的飞起)&br&&img src=&/da660f6d14a49d226909d_b.png& data-rawwidth=&616& data-rawheight=&532& class=&origin_image zh-lightbox-thumb& width=&616& data-original=&/da660f6d14a49d226909d_r.png&&
在参考顶楼的回答和评论后,正确获取到了弹幕,来回报下社会,代码已经放在Github上了! 代码是C写的,本来用的python,感觉C更好用(在处理数据的时候)。比较喜欢看yyf的dota2直播,但是最近yyf经常…
: &b&更新Python和Ruby客户端(请大家不要问我为什么情人节这一天为什么闲着没事更新代码)&/b&&br&Update
: &b&更新Python客户端,增加直播视频的Live获取,以及Mac平台下面的Mplayer的视频播放.代码均放在Github上面. &a href=&///?target=https%3A///twocucao/danmu.fm& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GitHub - twocucao/danmu.fm: douyutv danmu 斗鱼TV 弹幕助手&i class=&icon-external&&&/i&&/a&&/b&&br&&br&由于zhihu没有法子贴动态图,那只好移步到我的博客一看了.(看博客之前记得点赞╮(╯_╰)╭)&br&&br&&a href=&///?target=http%3A///p/0f& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python程序员如何优雅的看斗鱼TV&i class=&icon-external&&&/i&&/a&&br&&br&===================优雅的看斗鱼TV的分割线==================================&br&&br&&b&&blockquote&-1.如果不想看长文,直接使用.则在安装好Python3或者Ruby2.0以上版本.&/blockquote&&/b&&br&&div class=&highlight&&&pre&&code class=&language-bash&&&span class=&c&&#安装Python客户端&/span&
pip3 install danmu.fm
&span class=&c&&# 比如主播的直播间&/span&
danmu.fm /16789
&span class=&c&&#或者&/span&
danmu.fm 16789
&span class=&c&&#安装Ruby客户端&/span&
gem install danmu
&span class=&c&&#使用&/span&
danmu douyu &span class=&o&&[&/span&room_id/url&span class=&o&&]&/span&
&span class=&c&&#比如&/span&
danmu douyu qiuri
danmu douyu /13861
&/code&&/pre&&/div&就可以看到如下结果咯&br&&br&&img src=&/a60affc874f5_b.png& data-rawwidth=&1240& data-rawheight=&775& class=&origin_image zh-lightbox-thumb& width=&1240& data-original=&/a60affc874f5_r.png&&&br&&br&0.前言&br&&p&前几天(寒假前咯)闲着无聊,看到舍友们都在看斗鱼TV,虽然我对那些网络游戏都不是非常感兴趣,但是我突然间想到,如果我可以获取上面的弹幕内容,不就有点意思了么?&/p&1.分析阶段&p&如果我想要抓取网页上面的东西,无非就是两种方法&/p&&ol&&li&使用浏览器,手工(自己点击)或者非手工(使用JS脚本),存取我想要的东西。&/li&&li&编写HTTP客户端(斗鱼无HTTPS通讯)&/li&&/ol&&p&第一种方法是万能的,但显然是不行的, 原因如下:&/p&&ul&&li&手动保存实在是不可行,程序员不为也。&/li&&li&浏览器与本地交互有限,换而言之,也就是即使我抓取了对应的弹幕,我也没有办法解决持久化的问题。&/li&&li&假设你选择的是Chrome或者firefox浏览器,也不是不能实现持久化,但这需要写扩展,Chrome扩展没有写过,也不是很感兴趣。&/li&&/ul&&p&第二种方法显然是一个正常的程序员的做法。&/p&&p&语言选用Ruby&/p&&p&写一个客户端,也就是写一个小爬虫,使用的场景:&/p&&blockquote&&p&用户在终端执行命令&/p&&/blockquote&&div class=&highlight&&&pre&&code class=&language-bash&&gem install danmu
danmu douyu &span class=&o&&[&/span&room_id/url&span class=&o&&]&/span&
&span class=&c&&#比如&/span&
danmu douyu qiuri
danmu douyu /13861
&/code&&/pre&&/div&&p&然后就可以在终端欣赏弹幕咯.&/p&&br&&img src=&/a60affc874f5_b.png& data-rawwidth=&1240& data-rawheight=&775& class=&origin_image zh-lightbox-thumb& width=&1240& data-original=&/a60affc874f5_r.png&&&br&&br&&p&回想一下抓取网站的方法&/p&&p&四步走:请求网页(原始数据) - 提取数据(提纯数据) - 保存数据 - 分析数据&/p&&p&很显然,只要解决了请求网页,其他的也就无非解析和SQL语句什么的。&/p&1.1.斗鱼TV弹幕抓取的思路确定&p&如果是像我上面说的那么简单,也就不必再写一篇文章。毕竟,网页小爬虫没有什么技术含量。分布式爬虫才有。&/p&&p&通常情况下的网页小爬虫无非要解决如下问题:&/p&&p&请求,如果对方有一定策略的反爬虫,那需要反反爬虫。比如,&/p&&ul&&li&header带上host,带上refer,带上其他&/li&&li&需要验证,那就申请用户名和密码,然后登陆&/li&&li&如果在登录时期有防跨站机制,那就先获取一次登录页面,然后解析出token,带上对应的token然后登陆。&/li&&li&在程序中加入Log,并且存到本地。防止出现各种各样的反爬虫机制ban掉了程序,从而方便进行下一步防反爬虫对策。&/li&&/ul&&p&并且,由于请求响应机制的存在,通常情况下,每一个请求对应一个响应,如果出错了,要么超时,要么有状态码,所以普通的web爬虫也相对而言比较容易些。&/p&&p&那么,斗鱼TV的站点是不是这样子的就能够容易爬取呢?&/p&&p&你猜到了,答案是“不是”。&/p&&p&由于弹幕具有实时性,就决定了斗鱼TV的弹幕无法通过保存完整指定时间端弹幕的XML(比如BILIBILI的一个视频弹幕是存在一段xml中的)或者Json数据来显示弹幕。要不然的话,那主播操作很出色的时候,观众的弹幕岂不是无法实时显示了么?&/p&&p&那么,肯定就是WebSocket了,于是,我一如既往的打开F12,查看网络流量。&/p&&blockquote&&p&正如你想到的那样,没有任何的弹幕流量来往。一个WebSocket的消息都没有。&/p&&/blockquote&&p&那么,消息肯定是有的,但是消息并不是通过HTTP协议或者WebSocket协议传输的,那么问题会出在哪呢?&/p&&p&分析前端的代码,找出获取弹幕的JS代码,苦于代码太多,找了很久没有找到。那也就是执行逻辑可能在flash里面。&/p&&p&于是祭出大杀器WireShark,抓一下流量。终于看到弹幕的样子了。&/p&&p&是这样的。&/p&&br&&br&&img src=&/d8db6ae40bd5ed5f00405_b.png& data-rawwidth=&1240& data-rawheight=&775& class=&origin_image zh-lightbox-thumb& width=&1240& data-original=&/d8db6ae40bd5ed5f00405_r.png&&&br&&p&原来使用的是Flash的Socket功能。&/p&&p&那么,我们只需要模拟Socket的每一条消息就好了.&/p&&p&多分析几组数据,但还是对发送消息内容缺乏把握,特别是在用户认证,用户接收弹幕这一块。在搜索引擎上搜索了一阵,发现知乎上有个帖子,读完终于解了我的疑惑。&/p&&p&地址为: &a href=&/question/& class=&internal&&如何获取斗鱼直播间的弹幕信息? - Python&/a&&/p&&p&在此基础上,省略若干消息分析过程。&/p&&p&总结后得出斗鱼TV网站的服务器分布。&/p&&br&&img src=&/e982addbe4eb9fb_b.jpg& data-rawwidth=&511& data-rawheight=&555& class=&origin_image zh-lightbox-thumb& width=&511& data-original=&/e982addbe4eb9fb_r.jpg&&&br&&br&1.2.房间信息和弹幕认证服务器获取&p&首先我们拿随便一个主播房间来说,比如,qiuri&/p&&p&Ta的房间链接分为两种&/p&&ul&&li&&a href=&///?target=http%3A///qiuri& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&直播互动赢点卡 暴雪游戏闹新春&i class=&icon-external&&&/i&&/a&&/li&&li&&a href=&///?target=http%3A///id%255D& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&/id]&i class=&icon-external&&&/i&&/a&[房间&/li&&/ul&&p&对这个主播房间页面请求,正常,所有的有用信息都不是放在HTML中渲染出来,而是有一条放在HTML中内置的JS脚本中,这是为了减少服务器渲染HTML的压力?可是渲染放在JS里面不也一样需要渲染?(不明白)总之,就是程序先加载没有具体数据填充页面,然后JS更新数据。&/p&&p&内置的两段JS脚本,JS脚本中有两个变量,该变量很容易转换成JSON数据,也就是两段JSON数据,一个是关于主播的个人信息,另一个是关于弹幕认证服务器的列表(该列表中的任意一个服务器均可以认证,但每一次请求主播页面得到的认证服务器列表都不一样)&/p&&br&&img src=&/3f5baec4a4266_b.png& data-rawwidth=&792& data-rawheight=&477& class=&origin_image zh-lightbox-thumb& width=&792& data-original=&/3f5baec4a4266_r.png&&&br&&img src=&/cf55c1e0af1_b.png& data-rawwidth=&1240& data-rawheight=&700& class=&origin_image zh-lightbox-thumb& width=&1240& data-original=&/cf55c1e0af1_r.png&&&br&&img src=&/b2fb908ea39cf_b.png& data-rawwidth=&729& data-rawheight=&498& class=&origin_image zh-lightbox-thumb& width=&729& data-original=&/b2fb908ea39cf_r.png&&&br&&br&&p&通过这步,我们就拿到了主播的信息以及弹幕服务器的认证地址,端口。&/p&1.3.发送Socket消息的流程简介&p&我们通过抓包,分析那一大坨数据包,可以确定以下通过以下的流程便可以获取弹幕消息。(分析过程比较繁琐)&/p&&p&首先建立两个Socket。一个用于认证(&a href=&///?target=https%3A//ruby-china.org/danmu_auth_socket& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&@danmu_auth_socket&i class=&icon-external&&&/i&&/a&),另一个用户获取弹幕(&a href=&///?target=https%3A//ruby-china.org/danmu_client& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&@danmu_client&i class=&icon-external&&&/i&&/a&)。&/p&&ul&&li&步骤1: &a href=&///?target=https%3A//ruby-china.org/danmu_auth_socket& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&@danmu_auth_socket&i class=&icon-external&&&/i&&/a& 发送消息登陆,获取消息1解析出匿名用户的用户名,再获取消息2解析出gid&/li&&li&步骤2: &a href=&///?target=https%3A//ruby-china.org/danmu_auth_socket& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&@danmu_auth_socket&i class=&icon-external&&&/i&&/a& 发送qrl消息,获取两个没有什么用的消息&/li&&li&步骤3: &a href=&///?target=https%3A//ruby-china.org/danmu_auth_socket& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&@danmu_auth_socket&i class=&icon-external&&&/i&&/a& 发送keeplive消息&/li&&li&步骤4: &a href=&///?target=https%3A//ruby-china.org/danmu_socket& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&@danmu_socket&i class=&icon-external&&&/i&&/a& 发送伪登陆消息(所有匿名用户都一样只需要输入步骤一中用户名就行了,因为认证已经在上面做过了)&/li&&li&步骤5: &a href=&///?target=https%3A//ruby-china.org/danmu_socket& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&@danmu_socket&i class=&icon-external&&&/i&&/a& 发送join_group消息需要步骤一中国的gid&/li&&li&步骤6: &a href=&///?target=https%3A//ruby-china.org/danmu_socket& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&@danmu_socket&i class=&icon-external&&&/i&&/a& 不断的recv消息就可以获取弹幕消息了&/li&&/ul&&p&后面会详细解释&/p&2.1.消息Socket消息格式以及发送一条消息&p&既然是发消息,那么每条消息总是有些格式的。&/p&&p&斗鱼的消息格式大致如下:&/p&&br&&img src=&/51d5ca85bbfa9f4b36d49111_b.png& data-rawwidth=&1240& data-rawheight=&775& class=&origin_image zh-lightbox-thumb& width=&1240& data-original=&/51d5ca85bbfa9f4b36d49111_r.png&&&br&&br&&p&每一条消息并遵循下面的格式:&/p&&p&1.通信协议长度,后四个部分的长度,四个字节&br&2.第二部分与第一部分一样&br&3.请求代码,发送给斗鱼的话,内容为0xb1,0x02, 斗鱼返回的代码为0xb2,0x02&br&4.发送内容&br&5.末尾字节&/p&&div class=&highlight&&&pre&&code class=&language-rb&&&span class=&c1&&# -*- encoding : utf-8 -*-&/span&
&span class=&k&&class&/span& &span class=&nc&&Message&/span&
&span class=&c1&&# 向斗鱼发送的消息&/span&
&span class=&c1&&# 1.通信协议长度,后四个部分的长度,四个字节&/span&
&span class=&c1&&# 2.第二部分与第一部分一样&/span&
&span class=&c1&&# 3.请求代码,发送给斗鱼的话,内容为0xb1,0x02, 斗鱼返回的代码为0xb2,0x02&/span&
&span class=&c1&&# 4.发送内容&/span&
&span class=&c1&&# 5.末尾字节&/span&
&span class=&c1&&#pack('c*')是字节数组转字符串的一种诡异的转化方式&/span&
&span class=&k&&def&/span& &span class=&nf&&initialize&/span&&span class=&p&&(&/span&&span class=&n&&content&/span&&span class=&p&&)&/span&
&span class=&vi&&@length&/span& &span class=&o&&=&/span& &span class=&o&&[&/span&&span class=&n&&content&/span&&span class=&o&&.&/span&&span class=&n&&size&/span& &span class=&o&&+&/span& &span class=&mi&&9&/span&&span class=&p&&,&/span&&span class=&mh&&0x00&/span&&span class=&p&&,&/span&&span class=&mh&&0x00&/span&&span class=&p&&,&/span&&span class=&mh&&0x00&/span&&span class=&o&&].&/span&&span class=&n&&pack&/span&&span class=&p&&(&/span&&span class=&s1&&'c*'&/span&&span class=&p&&)&/span&
&span class=&vi&&@code&/span& &span class=&o&&=&/span& &span class=&vi&&@length&/span&&span class=&o&&.&/span&&span class=&n&&dup&/span&
&span class=&vi&&@magic&/span& &span class=&o&&=&/span& &span class=&o&&[&/span&&span class=&mh&&0xb1&/span&&span class=&p&&,&/span&&span class=&mh&&0x02&/span&&span class=&p&&,&/span&&span class=&mh&&0x00&/span&&span class=&p&&,&/span&&span class=&mh&&0x00&/span&&span class=&o&&].&/span&&span class=&n&&pack&/span&&span class=&p&&(&/span&&span class=&s1&&'c*'&/span&&span class=&p&&)&/span&
&span class=&vi&&@content&/span&
&span class=&o&&=&/span& &span class=&n&&content&/span&
&span class=&vi&&@end&/span& &span class=&o&&=&/span& &span class=&o&&[&/span&&span class=&mh&&0x00&/span&&span class=&o&&].&/span&&span class=&n&&pack&/span&&span class=&p&&(&/span&&span class=&s1&&'c*'&/span&&span class=&p&&)&/span&
&span class=&k&&end&/span&
&span class=&k&&def&/span& &span class=&nf&&to_s&/span&
&span class=&vi&&@length&/span& &span class=&o&&+&/span& &span class=&vi&&@code&/span& &span class=&o&&+&/span& &span class=&vi&&@magic&/span& &span class=&o&&+&/span& &span class=&vi&&@content&/span& &span class=&o&&+&/span& &span class=&vi&&@end&/span&
&span class=&k&&end&/span&
&span class=&k&&end&/span&
&/code&&/pre&&/div&&p&经过封装,我们仅仅关注那些可见的字符串,也就是Content部分就可以了。&br&content部分,也就是发送消息的内容,在文章后面将会详解。&/p&&p&开启两个Socket,一个用户认证,另一个用于弹幕的获取。&/p&&p&用于用户弹幕认证的,是2.1中所说的认证服务器列表中任意一个。挑选出来一组ip和端口&/p&&blockquote&&p&&a href=&///?target=https%3A//ruby-china.org/danmu_auth_socket& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&@danmu_auth_socket&i class=&icon-external&&&/i&&/a& = TCPSocket.new &a href=&///?target=https%3A//ruby-china.org/auth_dst_ip& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&@auth_dst_ip&i class=&icon-external&&&/i&&/a&,&a href=&///?target=https%3A//ruby-china.org/auth_dst_port& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&@auth_dst_port&i class=&icon-external&&&/i&&/a&&/p&&/blockquote&&p&用户获取弹幕的只要为&/p&&div class=&highlight&&&pre&&code class=&language-text&&:8601
&/code&&/pre&&/div&&p&四组域名:端口均可以作为如下的DANMU_SERVER和PORT&/p&&blockquote&&p&&a href=&///?target=https%3A//ruby-china.org/danmu_socket& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&@danmu_socket&i class=&icon-external&&&/i&&/a& = TCPSocket.new DANMU_SERVER,DANMU_PORT&/p&&/blockquote&&p&发送一条消息只需如此&/p&&div class=&highlight&&&pre&&code class=&language-text&&
data = &type@=loginreq/username@=&+@username+&/password@=3456/roomid@=& + @room_id.to_s + &/&
all_data = message(data)
@danmu_socket.write all_data
&/code&&/pre&&/div&&p&把需要传输的字符串放进去就好了.&/p&&p&接下来,我们需处理上面说的六个步骤&/p&2.2.发送消息详细流程之步骤一&p&发送消息内容为:&/p&&blockquote&&p&type@=loginreq/username@=/ct@=0/password@=/roomid@=156277/devid@=DF9E6B39F8D8A2E928BB7C/rt@=/vk@=4fc6e613fc650aed6c8a619/ver@=/&/p&&/blockquote&&p&我们需要注意的内容如下:&/p&&div class=&highlight&&&pre&&code class=&language-rb&&&span class=&n&&type&/span& &span class=&err&&表示消息的类型登陆消息为&/span&&span class=&n&&loginreq&/span&
&span class=&n&&username&/span& &span class=&err&&不需要,请求登陆以后系统会自动的返回对应的游客账号。&/span&
&span class=&n&&ct&/span& &span class=&err&&不清楚什么意思,默认为&/span&&span class=&mi&&0&/span&&span class=&err&&并无影响&/span&
&span class=&n&&password&/span& &span class=&err&&不需要&/span&
&span class=&n&&roomid&/span& &span class=&err&&房间的&/span&&span class=&nb&&id&/span&
&span class=&n&&devid&/span& &span class=&err&&为设备标识,无所谓,所以我们使用随机的&/span&&span class=&no&&UUID&/span&&span class=&err&&生成&/span&
&span class=&n&&rt&/span& &span class=&err&&应该是&/span&&span class=&n&&runtime&/span&&span class=&err&&吧,时间戳&/span&
&span class=&n&&vk&/span& &span class=&err&&为时间戳&/span&&span class=&o&&+&/span&&span class=&s2&&&7oE9nPEG9xXV69phU31FYCLUagKeYtsF&&/span&&span class=&o&&+&/span&&span class=&n&&devid&/span&&span class=&err&&的字符串拼接结果的&/span&&span class=&no&&MD5&/span&&span class=&err&&值(这个是参考了一篇文章,关于这一处我也不大明白怎么探究出来的)&/span&
&span class=&n&&ver&/span& &span class=&err&&默认&/span&
&/code&&/pre&&/div&&p&通过这一步,我们可以获取两条消息,并从消息中使用正则表达式获取对应的用户名以及gid&/p&&div class=&highlight&&&pre&&code class=&language-rb&&
&span class=&n&&str&/span& &span class=&o&&=&/span& &span class=&vi&&@danmu_auth_socket&/span&&span class=&o&&.&/span&&span class=&n&&recv&/span&&span class=&p&&(&/span&&span class=&mi&&4000&/span&&span class=&p&&)&/span&
&span class=&vi&&@username&/span&&span class=&o&&=&/span& &span class=&n&&str&/span&&span class=&o&&[&/span&&span class=&sr&&/\/username@=(.+)\/nickname/&/span&&span class=&p&&,&/span&&span class=&mi&&1&/span&&span class=&o&&]&/span&
&span class=&n&&str&/span& &span class=&o&&=&/span& &span class=&vi&&@danmu_auth_socket&/span&&span class=&o&&.&/span&&span class=&n&&recv&/span&&span class=&p&&(&/span&&span class=&mi&&4000&/span&&span class=&p&&)&/span&
&span class=&vi&&@gid&/span& &span class=&o&&=&/span& &span class=&n&&str&/span&&span class=&o&&[&/span&&span class=&sr&&/\/gid@=(\d+)\//&/span&&span class=&p&&,&/span&&span class=&mi&&1&/span&&span class=&o&&]&/span&
&/code&&/pre&&/div&2.3.发送消息详细流程之步骤二&p&发送的消息内容为&/p&&blockquote&&p&&type@=qrl/rid@=& + &a href=&///?target=https%3A//ruby-china.org/room_id& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&@room_id&i class=&icon-external&&&/i&&/a&.to_s + &/&&/p&&/blockquote&&p&无需多说,类型为qrl,rid为roomid,直接发送这条消息就好。返回的两条消息也没有什么价值。&/p&&div class=&highlight&&&pre&&code class=&language-rb&&
&span class=&n&&data&/span&
&span class=&o&&=&/span& &span class=&s2&&&type@=qrl/rid@=&&/span& &span class=&o&&+&/span& &span class=&vi&&@room_id&/span&&span class=&o&&.&/span&&span class=&n&&to_s&/span& &span class=&o&&+&/span& &span class=&s2&&&/&&/span&
&span class=&n&&msg&/span& &span class=&o&&=&/span& &span class=&n&&message&/span&&span class=&p&&(&/span&&span class=&n&&data&/span&&span class=&p&&)&/span&
&span class=&vi&&@danmu_auth_socket&/span&&span class=&o&&.&/span&&span class=&n&&write&/span& &span class=&n&&msg&/span&
&span class=&n&&str&/span& &span class=&o&&=&/span& &span class=&vi&&@danmu_auth_socket&/span&&span class=&o&&.&/span&&span class=&n&&recv&/span&&span class=&p&&(&/span&&span class=&mi&&4000&/span&&span class=&p&&)&/span&
&span class=&n&&str&/span& &span class=&o&&=&/span& &span class=&vi&&@danmu_auth_socket&/span&&span class=&o&&.&/span&&span class=&n&&recv&/span&&span class=&p&&(&/span&&span class=&mi&&4000&/span&&span class=&p&&)&/span&
&/code&&/pre&&/div&2.4.发送消息详细流程之步骤三&p&发送的消息内容为&/p&&blockquote&&p&&type@=keeplive/tick@=& + timestamp + &/vbw@=0/k@=19beba41da8ac2b4c7895a66cab81e23/&&/p&&/blockquote&&p&直接发送。无太大意义。&/p&&div class=&highlight&&&pre&&code class=&language-rb&&
&span class=&n&&data&/span& &span class=&o&&=&/span& &span class=&s2&&&type@=keeplive/tick@=&&/span& &span class=&o&&+&/span& &span class=&n&&timestamp&/span& &span class=&o&&+&/span& &span class=&s2&&&/vbw@=0/k@=19beba41da8ac2b4c7895a66cab81e23/&&/span&
&span class=&n&&msg&/span& &span class=&o&&=&/span& &span class=&n&&message&/span&&span class=&p&&(&/span&&span class=&n&&data&/span&&span class=&p&&)&/span&
&span class=&vi&&@danmu_auth_socket&/span&&span class=&o&&.&/span&&span class=&n&&write&/span& &span class=&n&&msg&/span&
&span class=&n&&str&/span& &span class=&o&&=&/span& &span class=&vi&&@danmu_auth_socket&/span&&span class=&o&&.&/span&&span class=&n&&recv&/span&&span class=&p&&(&/span&&span class=&mi&&4000&/span&&span class=&p&&)&/span&
&/code&&/pre&&/div&&p&前三步,也就是2.2-2.3-2.4三步骤,也就是使用&a href=&///?target=https%3A//ruby-china.org/danmu_auth_socket& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&@danmu_auth_socket&i class=&icon-external&&&/i&&/a& 完成获取username和gid的重要步骤。获取这两个字段以后,也就完成了它存在的使命。&/p&&p&接下来的就是&a href=&///?target=https%3A//ruby-china.org/danmu_socket& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&@danmu_socket&i class=&icon-external&&&/i&&/a&获取弹幕的时候了!&/p&2.5.发送消息详细流程之步骤四&p&消息内容为:&type@=loginreq/username@=&+&a href=&///?target=https%3A//ruby-china.org/username& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&@username&i class=&icon-external&&&/i&&/a&+&/password@=3456/roomid@=& +&a href=&///?target=https%3A//ruby-china.org/room_id& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&@room_id&i class=&icon-external&&&/i&&/a&.to_s + &/&&/p&&p&和上面2.2中略有不同。但是,需要注意的是&/p&&div class=&highlight&&&pre&&code class=&language-text&&
username 为2.2中所得到的username
password 的值得变化
&/code&&/pre&&/div&&div class=&highlight&&&pre&&code class=&language-rb&&
&span class=&n&&data&/span& &span class=&o&&=&/span& &span class=&s2&&&type@=loginreq/username@=&&/span&&span class=&o&&+&/span&&span class=&vi&&@username&/span&&span class=&o&&+&/span&&span class=&s2&&&/password@=3456/roomid@=&&/span& &span class=&o&&+&/span& &span class=&vi&&@room_id&/span&&span class=&o&&.&/span&&span class=&n&&to_s&/span& &span class=&o&&+&/span& &span class=&s2&&&/&&/span&
&span class=&n&&all_data&/span& &span class=&o&&=&/span& &span class=&n&&message&/span&&span class=&p&&(&/span&&span class=&n&&data&/span&&span class=&p&&)&/span&
&span class=&vi&&@danmu_socket&/span&&span class=&o&&.&/span&&span class=&n&&write&/span& &span class=&n&&all_data&/span&
&span class=&n&&str&/span& &span class=&o&&=&/span& &span class=&vi&&@danmu_socket&/span&&span class=&o&&.&/span&&span class=&n&&recv&/span&&span class=&p&&(&/span&&span class=&mi&&4000&/span&&span class=&p&&)&/span&
&/code&&/pre&&/div&2.6.发送消息详细流程之步骤五&p&接下来就是完成认证的最后一步了,join_group的消息内容为&/p&&blockquote&&p&&type@=joingroup/rid@=& + &a href=&///?target=https%3A//ruby-china.org/room_id& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&@room_id&i class=&icon-external&&&/i&&/a&.to_s + &/gid@=&+&a href=&///?target=https%3A//ruby-china.org/gid& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&@gid&i class=&icon-external&&&/i&&/a&+&/&&/p&&/blockquote&&p&gid为2.2中所得到的gid。&/p&&div class=&highlight&&&pre&&code class=&language-rb&&
&span class=&n&&data&/span&
&span class=&o&&=&/span& &span class=&s2&&&type@=joingroup/rid@=&&/span& &span class=&o&&+&/span& &span class=&vi&&@room_id&/span&&span class=&o&&.&/span&&span class=&n&&to_s&/span& &span class=&o&&+&/span& &span class=&s2&&&/gid@=&&/span&&span class=&o&&+&/span&&span class=&vi&&@gid&/span&&span class=&o&&+&/span&&span class=&s2&&&/&&/span&
&span class=&n&&msg&/span& &span class=&o&&=&/span& &span class=&n&&message&/span&&span class=&p&&(&/span&&span class=&n&&data&/span&&span class=&p&&)&/span&
&span class=&vi&&@danmu_socket&/span&&span class=&o&&.&/span&&span class=&n&&write&/span& &span class=&n&&msg&/span&
&/code&&/pre&&/div&2.7.发送消息详细流程之步骤六&p&获取弹幕,并且打印出来。&/p&&div class=&highlight&&&pre&&code class=&language-text&&
danmu_data = @danmu_socket.recv(4000)
type = danmu_data[danmu_data.index(&type@=&)..-3]
puts type.gsub('sui','').gsub('@S','/').gsub('@A=',':').gsub('@=',':').split('/')
&/code&&/pre&&/div&&p&后三步,则是&a href=&///?target=https%3A//ruby-china.org/danmu_socket& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&@danmu_socket&i class=&icon-external&&&/i&&/a& 获取弹幕的步骤。&/p&&p&于是,通过这些步骤,就可以完成了简单的danmu的核心代码,接下来的步骤就是完善,重构这些代码了。&/p&总结痛点一,至今还没有解决rtmp地址的获取&p&找了很久没有办法解决rtmp地址的自动获取:&/p&&p&路径如下&/p&&p&&a href=&///?target=http%3A///swf_api/room/Fcdn%3D%26nofan%3Dyes%26_t%3Dsign%3D3b2efb130cb25a85e621f477f95c7341& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&/swf_api/roo&/span&&span class=&invisible&&m/301712?cdn=&nofan=yes&_t=&sign=3b2efb130cb25a85e621f477f95c7341&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&/p&&p&这一处的请求不是XHR,也就是不是JS脚本通过XMLHttpRequest异步加载;那么,八成是flash通过http协议获取的。我估计八成执行逻辑应该是在flash之中。也就不方便获取其中的sign值.故,暂时无法解析rtmp视频流地址了&/p&效果图和代码&p&效果图:&/p&我擦,居然不能传输gif图片.&br&请移步到这里查看吧.&br&&br&&a href=&///?target=http%3A///p/efe& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&记一次斗鱼TV弹幕爬虫经历(Ruby版本)&i class=&icon-external&&&/i&&/a&&br&&br&&p&代码的地址为:&/p&&p&&a href=&///?target=https%3A///twocucao/danmu& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GitHub - twocucao/danmu: douyutv弹幕助手&i class=&icon-external&&&/i&&/a&&/p&&p&技术浅薄,还请轻拍。&/p&参考链接&p&PS:如果有问题可以在下方留言或者发送email到给我。&/p&
: 更新Python和Ruby客户端(请大家不要问我为什么情人节这一天为什么闲着没事更新代码)Update
: 更新Python客户端,增加直播视频的Live获取,以及Mac平台下面的Mplayer的视频播放.代码均放在Github上面.
已有帐号?
无法登录?
社交帐号登录

我要回帖

更多关于 斗鱼tv申请直播间转账 的文章

 

随机推荐