系统及环境
系统:统信UOS(基于linux)
CPU架构:ARM
Qt:5.15.2
Qt通过源码编译安装。
问题
运行Qt 自带事例QAudioOutput ,当调用 QAudioDeviceInfo::availableDevices
获取可用的音频输出设备列表时,报错 "using null output device none available"
,不能正常播放音频。
解决
查看Qt安装目录中的插件目录 plugins
正常情况下,这里面应该有一个audio插件:
如果没有的话,那就会导致这个问题咯。
如果是linux x86的话 通过Qt安装包会自动包含audio的插件,但是如果通过Qt源码编译安装,那就需要自己指定编译参数后才会编译生成该插件。
我的Qt安装目录下一开始也没有这个插件,通过排查定位到这个问题。ok,接下来看如何修改源码编译参数。
网上有很多关于编译Qt 源码时配置configure的文章,但是需要注意的是,不同Qt 版本可能对应的configure配置会有差异,特别是大版本之间,所以网上的有些配置并不一定能适用你当前的Qt版本,除非用的Qt版本一样。
那我们如何查看并配置相应参数呢,很简单,直接在Qt 源码目录,通过命令行 configure -h
就可以查看配置帮助,非常详细。
打开终端,切换到Qt安装目录,输入命令 ./configure -h
可以看到所有相关的配置说明,非常详细,接着我们找到 Multimedia options
说明:
这里可以看几项对于audio的编译配置,主要是前两个,在linux x86环境下通过Qt 安装包安装的目录下,插件audio中可以看到两个库,libqtaudio_alsa.so
和 libqtmedia_pulse.so
,其中音频播放需要用到前面一个库,那对应的编译参数就需要加上 -alsa
,视频播放需要后面那个库,编译参数指定 -pulseaudio
ok, 那接下来我们在自动配置的脚本里面添加上 -alsa :
#!/bin/sh
./configure \
-prefix /usr/bin/qt5.15.2_ARM \
-confirm-license \
-opensource \
-release \
-make libs \
-xplatform linux-aarch64-gnu-g++ \
-pch \
-qt-libjpeg \
-qt-libpng \
-qt-zlib \
-Fontconfig \
-system-freetype \
-opengl \
-xcb \
-dbus \
-build-qtpdf \
-build-qtwebengine-core \
-alsa \
注意,其它编译选项根据自己的需要进行添加。
在编译之前还有一个地方要注意,要编译libqtaudio_alsa这个库必须要先在本机安装 alsa,可以通过 sudo apt-get install alsa*
和 sudo apt-get install pulseaudio*
将alsa和pulseaudio相关的东西都安装上。
安装完可能还是会报错,这时候再安装两个依赖库 libpulse-dev和libasound2-dev
,也是通过sudo apt-get进行安装。这样基本就没问题了。
如果安装,那么在执行configure后会报错:
ERROR: Feature 'alsa' was enabled, but the pre-condition 'config.unix && !config.qnx && libs.alsa' failed.
接着如果之前已经编译过源码,需要先 make clean清理一下,重新编译。
最后编译安装完,就可以在plugins下找到 audio目录了:
再次运行示例,可以正常播放音频。