先交代为什么自己做播放器。我自己是典型的片库党:电脑本地一批、NAS 一批、Jellyfin 服务器一批,另有几条想看的 IPTV 频道。需求很朴素:一个入口接住所有来源;格式不用挑;没有字幕的片子能补上;海报墙自己认得片;HDR 在哪块屏上都对。这些需求单拎出来都有办法,但既然解码、渲染、GPU 处理这条链路在引擎里都是现成的,把播放器从头做一遍,就成了顺理成章的事,国庆利用各大模型厂商提供的便宜token,爆肝而成。
实现细节另成系列,一篇一个主题,按需要挑:
- HDR 不同平台的播放实现:直通、整形与逐帧色调映射
- Flutter 与 avox 的视频帧交互:从 Texture 到原生窗口
- ASS/PGS/SRT 的不同平台显示:三条渲染路与四块画布
- avox 本体与插件的不同平台编译:动态还是静态,平台说了算
- 4 倍速播放的实现:解码上限与 I 帧模式
windows(Panvox Player - Windows官方下载 | 微软应用商店 | Microsoft Store).
iOS/Apple 版已上架 [App Store].
android 内部分享包 (连点「Play 商店版本」7 次->开发者选项->内部应用分享)。
播放:格式、蓝光与 HDR
播放是 avox 的本行。MKV、MP4、AVI、HEVC 这些常见格式直接播,硬解可到 8K(视硬件而定),TrueHD、DTS 音轨出声。四个平台的硬解器各不相同——Windows D3D11VA、macOS / iOS VideoToolbox、Android MediaCodec;avox 把 Vulkan 作为统一的 GPU 处理层:凡是需要处理的场合——色调映射、滤镜、画质增强、字幕合成——硬解帧和软解帧都汇进这一条管线,全程不经 CPU 中转;HDR 直通输出时则绕开处理层,硬解帧直接交平台原生渲染。车道按输出方式分,不按解码方式分。需要处理时,平台差异被封在「硬解输出 → Vulkan 导入」这一小段里,管线本身只有一份。
蓝光原盘 ISO / BDMV 直接播放,自动列出标题供选择;VR 视频按容器立体 / 球面声明与画面比例自动检测,识别到全景或立体片源就备好 VR 播放模式。
HDR 单独说。4K、HDR10、HLG 原样播放;杜比视界(P5 / P8)与 HDR10+ 的动态元数据逐帧消费。HDR10 的静态元数据整部片子一份,而动态元数据每一帧都带着自己的亮度目标,处理粒度也应该跟着是逐帧:某一帧高光压多狠、中间调抬多少,由那一帧自己的元数据决定,而不是全片一套固定曲线。落到产品上是两条路:普通显示器逐帧色调映射,四个平台一致;HDR 显示器(Windows / iOS / macOS)自动 HDR 直通输出,画面与元数据交给显示设备自己处理。这条链路怎么落地——杜比视界 RPU 的解析与整形、逐帧色调映射、直通与色调映射的运行时切换——单独成篇:HDR 不同平台的播放实现:直通、整形与逐帧色调映射。

片库党:NAS、服务器与海报墙
添加片源支持本地文件夹、SMB、WebDAV,也支持 rtsp / rtmp / http 直播流。在跑 Jellyfin 或 Emby 的,直接登服务器:媒体库照原样浏览,看完的进度回传服务器,服务器支持 Quick Connect 时可以免密登录。
服务器场景有个选择:让服务器把原始流实时转码成兼容格式,还是服务器发原始流、设备本机解码。泛音选了后者——直连不转码。转码的代价是结构性的:服务器要扛实时转码的负载,画质多过一遍重编码,拖动进度要等转码追上来;直连则起播快,拖动跟手,播的就是文件本身。前提是设备端扛得住各种格式,这里靠的就是引擎的硬解链路。

海报墙媒体库内置 TVDB(可能访问不了) 和 Bangumi 自动识别,免配置;也可以用服务器元数据或手动匹配。剧集按季聚合(S01 · 24 集),标签树、分类筛选、继续观看、全库搜索都有。日常就是:打开,海报墙接着上次看。凭据只存本机,数据直连你自己的服务器。
字幕与 AI
ASS 特效字幕与 PGS 图形字幕按原始样式、定位呈现——ASS 的字体、颜色、定位、动效都是排版指令,完整渲染意味着不抽成纯文本;PGS 本身是位图流,按原始位置叠加。外挂 SRT 直接加载,编码不对导致乱码时自动修复。具体请看 ASS/PGS/SRT 的不同平台显示:三条渲染路与四块画布

AI 接了四件事,并划了一条清晰的边界:能本机做的联网不掺和,必须联网的用你自己的 Key。
- 字幕:没有字幕的片子,语音识别在本机把人声转成字幕,支持中、粤、英、日、韩,音频不出设备;想翻成中文等 14 种语言,在设置里填一个你自己的 AI Key(OpenAI 兼容)——不填也有原文字幕。
- 识别:海报墙上没识别出来的条目,一键交给 AI 批量判定并匹配,判定为影视的自动走 TVDB / Bangumi 收尾。
- 标签:AI 按内容自动打标并扩充标签树;手动打的标签不会被覆盖。
- 查找:用一句话描述想看的片,AI 在全库里帮你找。
后三样使用你自己配置的模型 Key,相关内容只发送到你自己配置的服务商。默认状态下的核心体验——播放、识别、本机字幕——闭环在本机与你的服务器之间;联网 AI 是可选加法,数据去向由你的 Key 决定。这些 AI 结果可能存在错误,仅供参考,均可手动更正。
IPTV 与界面
IPTV 是另一类主场景:m3u 订阅直接导入,频道分组与收藏、节目单(EPG)、清晰度切换都齐,还内置了示例频道,没有订阅源也能先试试。

界面有三种形态:海报墙 / 文件浏览 / 纯播放器;界面语言 14 种跟随系统;深浅色主题与强调色自选。移动端有手势与播放锁定,倍速 0.25–64x 档位自选,音轨、字幕轨随手切换。