gd-ng的视音频解码分别由ffmpeg和qtwebengine负责,但由于两个项目的某些bug或者专利纠纷,导致直接用它们会遇到一些问题。解决这些问题结论是:
视频编码格式兼容性: AV1 > H264 > H265(HEVC)
AV1是开源格式,而另外两种是有专利的。AV1是这三种里面最新的,也是压缩后文件最小的。在qtwebengine的官方版本中受到支持。但其硬件编解码只有较新的设备才支持。比如苹果直到M3才支持,而这时其他厂的新设备早就支持几年了
H264是最老、最流行的格式,QtWebengine的官方版本不支持该格式,除非自己手动重编译,通过-DQT_FEATURE_webengine_proprietary_codecs=ON
启用。目前只知道Arch Linux、Debian、Ubuntu、Fedora的QtWebengine是重新编译该包实现了对该格式的支持。
H265出现的时间介于两者中间,qtwebengine的官方版本也不支持该格式,自己编译在windows上可以支持该格式,而Linux仍不支持,甚至该平台的谷歌浏览器也不支持该格式。但FFmpeg和Nvidia等早就在Linux上实现的该格式的编解码,不好说是专利问题还是谷歌为推广自家格式不择手段
音频格式:不要用spx
FFMpeg 7.x开始,其内置spx解码器一直处于不可用状态。见 issue
但目前的QtMultimedia和FFMpeg深度绑定,使得用户要么重新编译当前版本ffmpeg,要么连着QtMultiMedia一起重新编译。
release/6.x分支无此bug。
对于release/7.x分支,可以通过合并4a0e1cf和c14b837实现该问题的修复
对于master分支,由于最近引入的提交f6986e7又将该解码器破坏,需要撤销才可用。
长期来看,由于该格式过于冷门,不能保证以后FFMpeg还会引入破坏性提交,请用格式转换工具将其转为其他格式。