我从大一(2023年秋)开始学习Flutter,并尝试开发一个媒体播放器项目。最初计划是构建一个Bilibili第三方客户端,但由于没有安卓手机,项目逐渐转向桌面端开发。
大一下学期因参加ACM竞赛,项目几乎停滞,我一度认为项目已死。然而去年年末,我意外发现项目开始受到关注,star数快速增长,这让我重新燃起热情,于是在今年年初重启项目。现在的目标是开发一个跨桌面平台的本地媒体播放器,定位类似IINA,但功能可能较为简陋,目前实现了简单的媒体库和播放器页面。
播放器底层使用mpv库,我魔改了依赖的media-kit包,删除了不必要的代码并换用新版mpv库。感觉media-kit代码啰嗦且性能有提升空间,因此尝试复刻了一套ffi加texture渲染(libmpv_dart),但未找到突破口,重构工作暂时搁置。
在某些情况下,视频以100%大小输出时,Flutter的高分辨率拉伸效果不如mpv高分辨率输出拉伸,且mpv字幕显示模糊,需手动调整视频输出到显示大小。由于Windows上Flutter视频贴图渲染依赖angle库转译纹理,修改视频输出大小开销较大,因此无法在窗口调整时自动应用调整选项,否则会卡顿。
除了上述不便,基本mpv功能都已实现,包括input.conf和mpv.conf等配置文件的支持,用户可以配置Anine4K等着色器以提升体验。界面设计上,我偏好Google的Material Design,应用界面灵感来源于Material 3应用和Google系统。
在窗口管理方面,window manager库在Windows下全屏有问题,提交的PR已一个月无人理会。此外,Linux下window manager的窗口置顶和大小限制有严重bug,因此迷你播放器模式在Linux下不可用(但Mac下正常)。Whisper字幕生成支持预计在下个月的beta版本推出。
欢迎提出建议或支持项目发展。