THMonster / Revda

Tools to play live stream with danmaku.
GNU General Public License v2.0
214 stars 12 forks source link

fix streamfinder about "qliveplayer://" #23

Closed Chinory closed 3 years ago

Chinory commented 3 years ago

目前qlphelper不能正确处理从qliveplayer://发来的部分直播链接,比如斗鱼、虎牙就不行,哔哩哔哩却可以。这是因为前者在src/qlphelper/streamfinder/streamfinder中的实现类中有如下语句:

async with sess.request('get', self.room_url, headers=self.headers) as resp:

把这个room_url直接拿来发请求所以出问题了,而哔哩哔哩的实现没有直接拿这个room_url发请求,就没有问题。向外溯源,其内容来源于同目录的__main__.py,然后是:

src/qlphelper/streamfinder.cpp

args.append(room_url);

src/qlphelper/streamfinder.cpp

this->room_url = room_url;

src/qlphelper/qlphelper.cpp

stream_finder = new StreamFinder(room_url, stream_socket, this);

src/qlphelper/qlphelper.cpp

room_url = args.at(0);

src/qlphelper/main.cpp

auto qlphelper = new QLPHelper(args, &a);

src/qlphelper/main.cpp

args << parser.value(urlOption);

src/qlphelper/main.cpp

QCommandLineOption urlOption(QStringList() << "u" << "url", "The url to open", "url", "null");
parser.addOption(urlOption);

misc/qlp-mime.desktop

Exec=qlphelper -u %u

当访问qliveplayer://*时,这个地址没有修正前缀就一路传到了streamfinder用来发请求,所以失败。这里选择了一个修改比较小的方案,测试可用。

我的浏览器脚本也更新了,现在支持哔哩哔哩、斗鱼、虎牙、Twitch,可以实现点击即打开QLivePlayer进行播放。但除了哔哩哔哩外必须要有此修正。如之前讨论的,这些脚本可以不合并而保留在我的个人仓库中,以利于维护。也请尽快在wiki里加入这个脚本的wiki链接~

THMonster commented 3 years ago

感谢感谢,但还请不要着急,我最近真的有其他的事情很忙,而且手上这边还积压着移到5.15的代码没有提交,到时候一并处理。

THMonster commented 3 years ago

看了下你的pr,大概明白你想做什么了。 其实这个问题是已知的,因为我一开始那个网页脚本就只考虑了b站视频,因为这个东西不好做进那个gui里面,就写了个网页脚本作为补充,也没有考虑通过脚本打开直播。 其次这个问题最主要的原因其实还是因为爬虫部分没有针对各种五花八门的奇怪链接进行筛选,只考虑了标准的链接。你发的这个pr其实也只是治标不治本。如果真的要解决这个问题,还是得在爬虫部分改进一下。但是这个问题目前优先级比较低,因为直播不像视频,直播间都是固定的,而视频每天每个都是新的编号。所以我建议你先用着自己的fork版本,我这暂时不打算merge。以后有时间了我再考虑把这个功能完善一下。 另外,如果有疑问其实可以先发issue问一下,每次都这样我也怪不好意思的,感觉辜负了别人的劳动。万分抱歉。

Chinory commented 3 years ago

先从我做这个的动机开始说起吧。

我是个轻度直播观众,喜欢逛直播间,到处看看别人现在在做什么。虽然也有比较倾向的几个领域,但不会特地去追几个主播。所以常常想要去探索,这时B站网页的分领域、排热度、预览图就非常好用,但QLivePlayer没有针对探索的设计,也就只能将其作为收藏夹来使用了。然而即使是B站那三件还是不够,要想对主播有个清晰的印象,还得进去看几秒。这时网页略显迟钝,就想用qlp,然而我得:

  1. 右键菜单复制链接(对准、点击、对准、点击)
  2. 找到一个文本框,粘贴进去(Super、gedit、Enter、Ctrl+V)
  3. 提取数字,前缀bi-(双击、Ctrl+C、Ctrl+A、Ctrl+V、Home、输入)
  4. 复制这个格式化好的地址到qlp(Ctrl+A、Ctrl+C、点击、Ctrl+V、Enter)

所以我很快放弃了用qlp窥屏。然而为了将直播存入qlp,我还是不得不重复上述那一串繁琐的操作,最后当收藏夹我也懒得用了。我想它应该更适合那些关注基本不变的人,否则它对网页用户的转换率大概有点低。

爬虫?其实我不指望它做探索的工作,互联网流量是根本,细节是魔鬼,赢家通吃。跨直播平台的本地订阅应该是个不错的基本盘,因为没有一家商业公司会做这个,但不难。可是qlp做的不够好,它应该要能简单到:点一下,就能订阅,这才能吸引到用户。

而我做的正好也是这个方向,点一下,就能通过qlphelper打开直播。你完全可以在qlphelper中记录最近打开的直播,以便用户将其收藏,引流别人做,沉淀都归你,这不香吗?不过我确实是没动机做,所以看你了。

还有一个动机就是原厂脚本的强制双手+组合键+鼠标移动的神秘交互方式令我有很多问号,应该不止我一个人这么想。我还经常在B站首页到处点视频/直播看的,改成拦截单击之后体验真的好了很多。

THMonster commented 3 years ago

我终于明白了。 我觉得你从一开始对这个项目的看法就错了,这里并没有那种商业软件的野心,我不敢有,也不感兴趣。这个项目只是个人兴趣使然,我顺手开源了。如果你有好的想法,在符合开源协议的标准下怎么干都行,至于merge不merge,我觉得这是我个人的喜好,我没有妨碍别人fork啊。 至于你最后说的那个,为什么用移动不用点击?其实我一开始也是用点击的,但有些地方点击事件还是会被b站网页捕获,我就改成移动鼠标了。前端这块我不太懂,就暂时这样了。

Chinory commented 3 years ago

不是的,并非商业野心,只是单纯地想要软件变得更好用,所以要考虑用户体验;想要软件被更多人用,所以要考虑生存空间。我来讨论,是觉得不要一言不合就fork,想交流一下为什么我觉得这样好。总之这个分支已经够我用了,谢谢你。

THMonster commented 3 years ago

fork不是什么一言不合,这是使用者的权利。 同样我觉得我也有merge与否的权利。 其实我不太想用的人太多,这不是什么好事(否则我也不会只做个linux版了)。