Windows 8-10下如何为QAudioRecorder添加AAC/Opus编码支持?
在Windows 8-10为QAudioRecorder添加AAC/OPUS编码支持的解决方案
我来帮你解决这个问题——QAudioRecorder调用supportedAudioCodecs()只返回audio/pcm,是因为默认Qt预编译包的Multimedia模块没集成第三方编码器支持。下面是针对libfaac(AAC)和libopus(OPUS)的具体实现步骤,以及Windows平台的专属技巧:
一、添加AAC编码支持(基于libfaac)
1. 准备依赖文件
首先得拿到匹配你Qt环境的libfaac包:
- 要对应架构(32/64位)和编译器(MSVC/MinGW),别下错版本,不然链接时会报错
- 必须包含头文件(
faac.h)、静态库(libfaac.lib)或动态库(faac.dll)
2. 编译带libfaac支持的Qt Multimedia
预编译Qt没法直接添加第三方编码器,得重新编译Multimedia模块:
- 打开对应编译器的Qt命令行工具(比如MSVC 2019 x64命令提示符)
- 执行configure命令配置Qt,指定使用系统libfaac库,并传入头文件和库文件路径:
configure -prefix <你的Qt安装路径> -system-faac -I <libfaac头文件所在路径> -L <libfaac库文件所在路径> - 接着执行
nmake(MSVC环境)或mingw32-make(MinGW环境)完成编译,嫌全量编译慢的话,也可以单独编译Multimedia模块
3. 验证AAC支持
编译完成后,在你的项目里调用QAudioRecorder::supportedAudioCodecs(),就能看到audio/aac选项了。如果用的是动态库,记得把faac.dll放到程序的运行目录里,不然程序启动会失败。
二、添加OPUS编码支持(基于libopus)
1. 准备依赖文件
和AAC一样,先搞定匹配环境的libopus包:
- 同样要对应架构和编译器
- 拿到头文件(
opus.h等)、静态库(libopus.lib)或动态库(opus.dll)
2. 编译带libopus支持的Qt Multimedia
步骤和AAC基本一致:
- 在Qt命令行工具里执行configure命令,添加libopus支持:
configure -prefix <你的Qt安装路径> -system-opus -I <libopus头文件所在路径> -L <libopus库文件所在路径> - 执行编译命令完成构建
3. 验证OPUS支持
编译完成后,supportedAudioCodecs()就会返回audio/opus。动态库情况下,记得把opus.dll放到程序运行目录。
三、更省事的替代方案:用Windows原生Media Foundation支持AAC
Windows 8及以上系统自带的Media Foundation已经原生支持AAC编码,如果你用的是MSVC编译的Qt(Qt 5.6+默认启用了Media Foundation后端),可以试试这个不用额外编译第三方库的方法:
- 确保项目
.pro文件里添加了QT += multimedia - 在代码里手动指定AAC编码配置:
QAudioRecorder recorder; QAudioEncoderSettings audioSettings; audioSettings.setCodec("audio/aac"); audioSettings.setSampleRate(44100); audioSettings.setBitRate(128000); audioSettings.setChannelCount(2); audioSettings.setQuality(QMultimedia::HighQuality); recorder.setAudioSettings(audioSettings); - 如果还是识别不到AAC,说明你用的预编译Qt没启用Media Foundation的AAC支持,这时候还是得重新编译Qt,加上
-mediafoundation配置选项。
四、关键注意事项
- 编译器/架构匹配:libfaac、libopus的编译环境必须和你的Qt完全一致,否则会出现链接错误或运行崩溃
- 版权合规:libfaac采用LGPL许可,libopus采用BSD许可,分发程序时要遵守对应的开源条款
- Qt版本选择:建议用Qt 5.15及以上的LTS版本,多媒体后端的兼容性更好,坑更少
内容的提问来源于stack exchange,提问作者vatosarmat
相关产品推荐
相关产品推荐

