Predidit / Kazumi

基于自定义规则的番剧采集APP,支持流媒体在线观看,支持弹幕。
GNU General Public License v3.0
4.71k stars 120 forks source link

[Bug]: macOS 硬件解码会出现帧表现不正常,如跳帧,重复帧等问题 #358

Open ErBWs opened 4 hours ago

ErBWs commented 4 hours ago

在使用的时候发生了什么 Bug ?

如题

您在使用哪个操作系统?

macOS / iOS

请具体提供设备、版本号等信息。

macOS 15.1 Apple Silicon

(选填)一些与 Bug 相关的硬件信息。

No response

日志信息

提交前确认

ErBWs commented 4 hours ago

如果不单独配置硬件解码模式的字段的话,应该是直接使用 video_player 的 AVPlayer 进行解码而不是 fvp 的 VT 进行解码,所以 macOS 硬件解码也会出现 #238 的问题,关于 #353 我并没有在macOS观察到,iOS确实会出现这个问题

Predidit commented 4 hours ago

唔,我在这里说明一下目前视频播放器的现状

1. 为什么要使用 fvp 而不是 media_kit

我们需要 fvp 中的 这个 ffmpeg 树外补丁来兼容使用非标准标头的视频流。这些视频流被伪装成图片来免费托管在公共图床中。Android ExoPlayer 和 Apple AVPlayer 本身无法解码gif和png。所以可以直接识别这种视频流。

2. 为什么不在 macOS 上全部切换到 fvp

353 这个问题很严重,并且部分情况下会导致 native 侧的崩溃。

3. 我们可能自行修补 fvp 中的问题吗

不能,因为 fvp 本质是 mdk 多媒体套件的薄包装。而 mdk 不开源。

4. 我们可能将前面提到的树外补丁 port 到 media_kit 并切换到 media_kit 来一劳永逸解决这些问题呢

可能,主要的挑战在于 media_kit 的底层实现是 mpv。mpv 是开源的,但是其一般静态链接到 ffmpeg。我们需要在编译期应用这一补丁,而不是直接替换对应的 ffmpeg.dll。我有些没搞明白 media_kit 的 libmpv.dll 到底是通过哪个 github actions 编译出来的,他们有多个 mpv 相关仓库。

Predidit commented 4 hours ago

如果不单独配置硬件解码模式的字段的话,应该是直接使用 video_player 的 AVPlayer 进行解码而不是 fvp 的 VT 进行解码,所以 macOS 硬件解码也会出现 #238 的问题,关于 #353 我并没有在macOS观察到,iOS确实会出现这个问题

这部分参考 fvp 的文档,当声明在 macOS/iOS 上使用 fvp 而声明解码器时会使用 VT。当没有声明 macOS/iOS 上使用 fvp 实现时自然是 AVPlayer

实际上从 fvp 迁移到 media_kit 是我一直想做的事情, 这将解决视频方面几乎所有的问题

ErBWs commented 4 hours ago

看来这个问题我无能为力。我会在 macOS 上将硬件解码声明为 fvp 并使用一段时间,目前看起来 fvp 的问题出在移动端,而macOS 貌似没有问题,因为我已经在 macOS 上使用软件解码相当长一段时间了