THMonster / Revda

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

不能播放斗鱼直播 #13

Closed jian-lin closed 3 years ago

jian-lin commented 3 years ago

你好,我是gentoo系统。 编译安装后,能正常看B站,但是斗鱼看不了。ykdl能解析出斗鱼的链接。 用qlphelper会卡在这里:

$ qlphelper -d -u 'https://www.douyu.com/topic/EpicLeague?rid=3811559'
Finding stream...
Debug: streamer started (:0, )
Debug: danmaku launcher started (:0, )
Debug: ffmpeg started (:0, )
Debug: mpv started (:0, )
Debug: "https://play2.edgesrv.com/live/3811559rikG9MtpJ.flv?wsAuth=d887ff5ee913d1b661ee08520c6e389b&token=web-h5-0-3811559-84d40b4477b0da480fbeac8120eefa250854db930fc8aa07&logo=0&expire=0&did=6603c70307734258b1b367da94461c55&pt=2&st=0&vhost=play2&origin=ws&mix=0&isp=cmcc" (:0, )

此时能看到有mpv的进程

/usr/bin/mpv --idle=yes --player-operation-mode=pseudo-gui --cache=yes --vf=lavfi="fps=60" --input-ipc-server=/tmp/qlp-{e3920530-03f8-4c74-8d73-8fe17f83e728} /tmp/qlp-{3017ecf2-0a14-4114-8114-1482fa514f6a}

ctrl+c后的输出:

Bye!
Debug: streamlink exited!!!! (:0, )
Debug: waiting for ffmpeg exit! (:0, )
THMonster commented 3 years ago

用标准的链接试试

jian-lin commented 3 years ago

很迷,现在斗鱼也能正常播放了。 我刚才用qlphelper -d -u 'https://www.douyu.com/9999' 试了一下,发现卡在这里:

$ qlphelper -d -u qlphelper -d -u 'https://www.douyu.com/9999'
Finding stream...
Debug: streamer started (:0, )
Debug: danmaku launcher started (:0, )
Debug: ffmpeg started (:0, )
Debug: mpv started (:0, )

和我之前用斗鱼9999试的输出不一样。之前用斗鱼9999试的时候,输出和我最开始发的类似。 感到有点奇怪,于是又试了一下B站直播。发现B站也会和斗鱼9999一样,卡在同一地方。 然后我重新编译,重启后,斗鱼、B站就都正常了。

最后,感谢作者写了这个项目,对我很有帮助。

jian-lin commented 3 years ago

找到原因了:默认的dns有问题,换了个dns服务器就正常了。

goduck777 commented 3 years ago

我测试斗鱼也遇到一样的错误,其他的直播都没有问题。

% qlphelper -d -u "https://www.douyu.com/9999"
Finding stream...
Playing:  出去旅游放松几天,24号回来直播 - yyfyyf
Debug: start ffmpeg proc (:0, )
Debug: streamer started (:0, )
Debug: danmaku launcher started (:0, )
Debug: ffmpeg started (:0, )
Debug: mpv started (:0, )
THMonster commented 3 years ago

我测试斗鱼也遇到一样的错误,其他的直播都没有问题。

% qlphelper -d -u "https://www.douyu.com/9999"
Finding stream...
Playing:  出去旅游放松几天,24号回来直播 - yyfyyf
Debug: start ffmpeg proc (:0, )
Debug: streamer started (:0, )
Debug: danmaku launcher started (:0, )
Debug: ffmpeg started (:0, )
Debug: mpv started (:0, )

你这啥版本的?

goduck777 commented 3 years ago

我测试斗鱼也遇到一样的错误,其他的直播都没有问题。

% qlphelper -d -u "https://www.douyu.com/9999"
Finding stream...
Playing:  出去旅游放松几天,24号回来直播 - yyfyyf
Debug: start ffmpeg proc (:0, )
Debug: streamer started (:0, )
Debug: danmaku launcher started (:0, )
Debug: ffmpeg started (:0, )
Debug: mpv started (:0, )

你这啥版本的?

4.1.0

goduck777 commented 3 years ago

之前的版本(4.0.1)也一样

THMonster commented 3 years ago

之前的版本(4.0.1)也一样

你能具体一点描述一下错误吗?我这没有问题诶。

goduck777 commented 3 years ago

没有多余的错误信息,跟 @jian-lin 描述的一样。

我在美国,会不会是这个原因。

有没有办法显示streamfinder的错误信息。

THMonster commented 3 years ago

没有多余的错误信息,跟 @jian-lin 描述的一样。

我在美国,会不会是这个原因。

有没有办法显示streamfinder的错误信息。

你上面贴的debug信息来看,在拿真实链接阶段没有问题,问题大概在播放上,我估计和你在美国有关。

goduck777 commented 3 years ago

我试着拉了一个douyu的m3u8文件,大概是这样 https://hls1a-akm.douyucdn.cn/live/9999rKG98OZafBj1/playlist.m3u8?wsAuth=9e07d8587a2ef5c549bf204b570b532d&token=web-h5-0-9999-26339a83b5a3e114f96aa45030dd339ecdfc702c2393a6c4&logo=0&expire=0&did=668e59475bc94b6281fad26e630c2806&pt=2&st=3&origin=tct&mix=0&isp=&pushdouyu=1

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-ALLOW-CACHE:NO
#EXT-X-MEDIA-SEQUENCE:1635031686
#EXT-X-TARGETDURATION:2
#EXTINF:2,
9999rKG98OZafBj1-1635031686.ts?wsAuth=fd6df6c447b5bf8eca35afafa2a4f149&token=web-cph-132466444-9999-aec4e8c4573d36ebfef7eae822b61ea21376ccfe28e19a0d&logo=0&expire=0&did=d3f6ed6c7e6a5f7574cc162400081501&pt=2&st=3&origin=tct&mix=0&isp=&pushdouyu=1&v=220120211024&did=d3f6ed6c7e6a5f7574cc162400081501&tt=1635046895&sign=6e55eca64bfd95989edb04c0878ec316&cdn=&rate=0&ver=Douyu_221102105&iar=1&ive=0&hevc=0&fa=0
#EXTINF:2,
9999rKG98OZafBj1-1635031687.ts?wsAuth=fd6df6c447b5bf8eca35afafa2a4f149&token=web-cph-132466444-9999-aec4e8c4573d36ebfef7eae822b61ea21376ccfe28e19a0d&logo=0&expire=0&did=d3f6ed6c7e6a5f7574cc162400081501&pt=2&st=3&origin=tct&mix=0&isp=&pushdouyu=1&v=220120211024&did=d3f6ed6c7e6a5f7574cc162400081501&tt=1635046895&sign=6e55eca64bfd95989edb04c0878ec316&cdn=&rate=0&ver=Douyu_221102105&iar=1&ive=0&hevc=0&fa=0
#EXTINF:2,
9999rKG98OZafBj1-1635031688.ts?wsAuth=fd6df6c447b5bf8eca35afafa2a4f149&token=web-cph-132466444-9999-aec4e8c4573d36ebfef7eae822b61ea21376ccfe28e19a0d&logo=0&expire=0&did=d3f6ed6c7e6a5f7574cc162400081501&pt=2&st=3&origin=tct&mix=0&isp=&pushdouyu=1&v=220120211024&did=d3f6ed6c7e6a5f7574cc162400081501&tt=1635046895&sign=6e55eca64bfd95989edb04c0878ec316&cdn=&rate=0&ver=Douyu_221102105&iar=1&ive=0&hevc=0&fa=0

可见所有的URL并不以http开头。我觉得这个可能是原因。

THMonster commented 3 years ago

我试着拉了一个douyu的m3u8文件,大概是这样 https://hls1a-akm.douyucdn.cn/live/9999rKG98OZafBj1/playlist.m3u8?wsAuth=9e07d8587a2ef5c549bf204b570b532d&token=web-h5-0-9999-26339a83b5a3e114f96aa45030dd339ecdfc702c2393a6c4&logo=0&expire=0&did=668e59475bc94b6281fad26e630c2806&pt=2&st=3&origin=tct&mix=0&isp=&pushdouyu=1

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-ALLOW-CACHE:NO
#EXT-X-MEDIA-SEQUENCE:1635031686
#EXT-X-TARGETDURATION:2
#EXTINF:2,
9999rKG98OZafBj1-1635031686.ts?wsAuth=fd6df6c447b5bf8eca35afafa2a4f149&token=web-cph-132466444-9999-aec4e8c4573d36ebfef7eae822b61ea21376ccfe28e19a0d&logo=0&expire=0&did=d3f6ed6c7e6a5f7574cc162400081501&pt=2&st=3&origin=tct&mix=0&isp=&pushdouyu=1&v=220120211024&did=d3f6ed6c7e6a5f7574cc162400081501&tt=1635046895&sign=6e55eca64bfd95989edb04c0878ec316&cdn=&rate=0&ver=Douyu_221102105&iar=1&ive=0&hevc=0&fa=0
#EXTINF:2,
9999rKG98OZafBj1-1635031687.ts?wsAuth=fd6df6c447b5bf8eca35afafa2a4f149&token=web-cph-132466444-9999-aec4e8c4573d36ebfef7eae822b61ea21376ccfe28e19a0d&logo=0&expire=0&did=d3f6ed6c7e6a5f7574cc162400081501&pt=2&st=3&origin=tct&mix=0&isp=&pushdouyu=1&v=220120211024&did=d3f6ed6c7e6a5f7574cc162400081501&tt=1635046895&sign=6e55eca64bfd95989edb04c0878ec316&cdn=&rate=0&ver=Douyu_221102105&iar=1&ive=0&hevc=0&fa=0
#EXTINF:2,
9999rKG98OZafBj1-1635031688.ts?wsAuth=fd6df6c447b5bf8eca35afafa2a4f149&token=web-cph-132466444-9999-aec4e8c4573d36ebfef7eae822b61ea21376ccfe28e19a0d&logo=0&expire=0&did=d3f6ed6c7e6a5f7574cc162400081501&pt=2&st=3&origin=tct&mix=0&isp=&pushdouyu=1&v=220120211024&did=d3f6ed6c7e6a5f7574cc162400081501&tt=1635046895&sign=6e55eca64bfd95989edb04c0878ec316&cdn=&rate=0&ver=Douyu_221102105&iar=1&ive=0&hevc=0&fa=0

可见所有的URL并不以http开头。我觉得这个可能是原因。

qliveplayer不用hls的斗鱼直播流

goduck777 commented 3 years ago

但是我这里是连接的hls。Bilibili和huya都是flv。

THMonster commented 3 years ago

emmmmm,你确定qlp拿的是hls流而不是flv?

goduck777 commented 3 years ago

上边那个URL就是qlib.get_url(room_url, QString());返回的,我加了一行输出得到的。

THMonster commented 3 years ago

那应该就是国外ip的原因了,正常情况下那里拿到的是flv流。

goduck777 commented 3 years ago

试着改了一下,果然可以了

diff -Naur a/src/qlphelper/streamer.cpp b/src/qlphelper/streamer.cpp
--- a/src/qlphelper/streamer.cpp    2021-10-24 00:28:27.638706870 -0400
+++ b/src/qlphelper/streamer.cpp    2021-10-24 00:32:59.603733066 -0400
@@ -266,6 +266,14 @@
             } else {
                 ++base_seq;
             }
+        } else if (line.contains("douyu")) {
+            if (base_seq > hls_seg) {
+                line.prepend("https://hls1a-akm.douyucdn.cn/live/");
+                hls_seg_queue.enqueue(line);
+                hls_seg = base_seq++;
+            } else {
+                ++base_seq;
+            }
         }
     }
     reply->deleteLater();

看来douyu的hls比较特别,我可以先这样用,反正douyu看的不多。