Skip to content

[Added]: 支持 MP3 和 M3U8 的下载#1452

Closed
aliferne wants to merge 34 commits intoPredidit:mainfrom
aliferne:main
Closed

[Added]: 支持 MP3 和 M3U8 的下载#1452
aliferne wants to merge 34 commits intoPredidit:mainfrom
aliferne:main

Conversation

@aliferne
Copy link
Copy Markdown
Contributor

@aliferne aliferne commented Nov 2, 2025

相关 Issue

#26

@aliferne aliferne marked this pull request as draft November 2, 2025 12:04
@aliferne aliferne marked this pull request as ready for review November 9, 2025 06:51
@aliferne
Copy link
Copy Markdown
Contributor Author

aliferne commented Nov 9, 2025

@Predidit 我认为这个实现应该可以满足你下载 M3U8 文件的需求了

@aliferne aliferne changed the title [Added]: 初步支持 MP3 视频的下载 [Added]: 支持 MP3 和 M3U8 的下载 Nov 9, 2025
@Predidit
Copy link
Copy Markdown
Owner

Predidit commented Nov 9, 2025

抱歉,我今天在忙于一些其他事情,现在才来得及cr这个pr,这个PR看上去相当不错

但是合并的方法似乎过于粗暴,直接将 ts 片段拼在了一起,我的直觉告诉我这里有兼容性问题,你实际上运行过那几个规则的测试,合并后的文件可以被 mpv 播放器正确播放吗

这里兼容性更好的方案应该是把片段放在一个文件夹内,不进行合并,然后手动生成一个 index.m3u8 指向这些 ts 片段,这也是大部分带有下载功能的软件的做法

@aliferne
Copy link
Copy Markdown
Contributor Author

aliferne commented Nov 9, 2025

我只测试了两个视频,均是可以支持的。

使用 windows media 打开和正常播放没有问题,
我随意拖动和快进均可支持,
借助 ffmpeg 工具扫描也没有问题

后者那个方案我似乎不知道应当怎么处理,
但是原 ts 文件是存在的,可以通过设定 delTemp=false 保留源文件,
如果直接合成会导致奇怪的问题,也可以通过源文件播放,我没有太多时间测试其他用例

@Predidit
Copy link
Copy Markdown
Owner

Predidit commented Nov 9, 2025

我会在进行一些测试后给出反馈,直接合并绝对会破坏时间戳,这也是 animeko 的做法,它们的缓存功能至今存在严重的兼容性问题,包括但不限于无法 seek ,或是播放时闪退

此外这个PR包括了简单的 m3u8 解密功能,我的印象中没有规则带有加密 m3u8 流,这是为了兼容哪一条规则加入了该功能

@aliferne
Copy link
Copy Markdown
Contributor Author

aliferne commented Nov 9, 2025

我简单学习了 M3U8 文件格式,因为不太确定是否有带加密的 M3U8 文件流,为了避免出错而额外加上的

我会等待测试用例的结果,倘若确实有问题,那我会尝试把 tsFiles 写入 index 文件中,之后也许你可以通过该文件来逐个打开 ts 文件

@Predidit
Copy link
Copy Markdown
Owner

Predidit commented Nov 9, 2025

我简单测试了一下,甚至 m3u8 清单文件解析本身都存在问题

测试用例:

https://ai.girigirilove.net/zijian/oldanime/2025/10/cht/GNOSIACHT/04/playlist.m3u8

@aliferne
Copy link
Copy Markdown
Contributor Author

@Predidit 抱歉,我这几个月有些事情,最近才来得及继续修改这个 PR,我昨晚已经成功跑通你提供的失败的用例了,想请问一下是否还可能存在一些其他的情况需要处理,以及你还可能期望有什么功能(比如中断下载过程),我一并添加。此外我在 Windows 下构建 Debug 程序时遇到了一些问题:

[   +3 ms] executing: C:\Program Files (x86)\Microsoft Visual
Studio\2022\BuildTools\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe -S
D:\xxx\Kazumi\windows -B D:\xxx\Kazumi\build\windows\x64 -G Visual Studio 17 2022 -A x64
-DFLUTTER_TARGET_PLATFORM=windows-x64
[  +58 ms] -- Selecting Windows SDK version 10.0.26100.0 to target Windows 10.0.22631.
[+1588 ms] -- The CXX compiler identification is MSVC 19.44.35221.0
[ +115 ms] -- Detecting CXX compiler ABI info
[ +611 ms] -- Detecting CXX compiler ABI info - done
[  +34 ms] -- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual
Studio/2022/BuildTools/VC/Tools/MSVC/14.44.35207/bin/Hostx64/x64/cl.exe - skipped
[   +8 ms] -- Detecting CXX compile features
[   +9 ms] -- Detecting CXX compile features - done
[  +18 ms] -- Downloading archive from
https://github.com/Predidit/libmpv-win32-video-cmake/releases/download/20251210/mpv-dev-x86_64-20251210-git-ad59ff1.
7z...
[   +9 ms] -- Downloaded archive to D:/xxx/Kazumi/build/windows/x64/mpv-dev-x86_64-20251210-git-ad59ff1.7z
[   +1 ms] CMake Error at flutter/ephemeral/.plugin_symlinks/media_kit_libs_windows_video/windows/CMakeLists.txt:43
(message):
[   +1 ms]   D:/xxx/Kazumi/build/windows/x64/mpv-dev-x86_64-20251210-git-ad59ff1.7z
[        ]   Integrity check failed, please try to re-build project again.
[        ] Call Stack (most recent call first):
[        ]   flutter/ephemeral/.plugin_symlinks/media_kit_libs_windows_video/windows/CMakeLists.txt:77
(download_and_verify)
[        ] -- Configuring incomplete, errors occurred!
[   +3 ms] Building Windows application... (completed in 2,469ms)
[+16899 ms] Error: Unable to generate build files
[   +1 ms] "flutter run" took 25,501ms.
[  +33 ms]
           #0      throwToolExit (package:flutter_tools/src/base/common.dart:34:3)
           #1      RunCommand.runCommand (package:flutter_tools/src/commands/run.dart:897:9)
           <asynchronous suspension>
           #2      FlutterCommand.run.<anonymous closure>
(package:flutter_tools/src/runner/flutter_command.dart:1559:27)
           <asynchronous suspension>
           #3      AppContext.run.<anonymous closure> (package:flutter_tools/src/base/context.dart:154:19)
           <asynchronous suspension>
           #4      CommandRunner.runCommand (package:args/command_runner.dart:212:13)
           <asynchronous suspension>
           #5      FlutterCommandRunner.runCommand.<anonymous closure>
           (package:flutter_tools/src/runner/flutter_command_runner.dart:487:9)
           <asynchronous suspension>
           #6      AppContext.run.<anonymous closure> (package:flutter_tools/src/base/context.dart:154:19)
           <asynchronous suspension>
           #7      FlutterCommandRunner.runCommand
(package:flutter_tools/src/runner/flutter_command_runner.dart:422:5)
           <asynchronous suspension>
           #8      run.<anonymous closure>.<anonymous closure> (package:flutter_tools/runner.dart:104:11)
           <asynchronous suspension>
           #9      AppContext.run.<anonymous closure> (package:flutter_tools/src/base/context.dart:154:19)
           <asynchronous suspension>
           #10     main (package:flutter_tools/executable.dart:103:3)
           <asynchronous suspension>


[        ] Running 3 shutdown hooks
[   +7 ms] Shutdown hooks complete
[ +267 ms] exiting with code 1

我尝试直接通过 GitHub 获取该 7z 文件,但被提示 404.

@Predidit
Copy link
Copy Markdown
Owner

网络问题,尝试使用IP更加干净的代理并启用 TUN 模式。

你直接访问时404应该是粘贴日志中的地址时意外粘贴了一个换行符,相关资源是存在的。

你的代码里存在大量的TODO,实在太多了,你准备完成他们吗,如果不再有相关计划,将没有计划的TODO删除,以让我可以跟上你的思路。

@aliferne
Copy link
Copy Markdown
Contributor Author

@Predidit 我想至少应当完成移除 ! 的操作,直接在正式版使用非空断言太危险了,如果你认为这项工作已经差不多的话,我会在完成空安全相关的代码之后删除其余 TODO 并恢复主界面按钮的逻辑

@Predidit
Copy link
Copy Markdown
Owner

是这样的,我个人比较希望开始检查的代码是逻辑清晰,大部分逻辑已经完成的,这个实现现在的占位符(也就是TODO)太多了

基本的清理工作完成后,才可以比较安心地进行更多的测试

@aliferne
Copy link
Copy Markdown
Contributor Author

对于 m3u8 文件,视频的分片源是否只有 ts 一种?我能否假定只有 ts 一种文件格式,如果有其他格式,请告知,我好一起支持

@aliferne
Copy link
Copy Markdown
Contributor Author

@Predidit 我想我准备好了,你测试一下吧

@Predidit
Copy link
Copy Markdown
Owner

CI 需要通过

@aliferne
Copy link
Copy Markdown
Contributor Author

我想现在可以检查了 @Predidit

@Predidit
Copy link
Copy Markdown
Owner

好的,检查非常复杂,我要检查大部分插件的视频链接能否被正确识别,这可能在周末才能进行

@aliferne
Copy link
Copy Markdown
Contributor Author

你要先看么?我这边合并了一下冲突代码之后 CI 又炸了

@Predidit
Copy link
Copy Markdown
Owner

不是你的问题,某个windows依赖的自托管仓库又爆炸了

恢复之后我会手动重新运行

@aliferne aliferne deleted the branch Predidit:main January 31, 2026 07:58
@aliferne aliferne closed this Jan 31, 2026
@aliferne aliferne deleted the main branch January 31, 2026 07:58
@Predidit
Copy link
Copy Markdown
Owner

我刚刚在这个pr上进行一些单元测试

这个pr暂时被放弃了吗

@aliferne
Copy link
Copy Markdown
Contributor Author

不,抱歉,我会恢复,我将分支名更改了,然后 GitHub 就把这个和那个 main 分支的绑定断开了(因为main被修改成了其他名称),我正在尝试恢复没有任何 pr 的分支,这样就可以开发其他功能

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants