Qt5是否支持通过ALSA进行音频播放?

11

我有一个小的C++ Qt程序,它使用QAudioOutput实例发出声音。在Qt 4.8.5下编译和运行都很好。

然而,在Qt 5.0、5.1和5.2中,我的应用程序可以编译,但无法工作。当QAudioOutput实例的构造函数运行时,我会收到以下错误消息:

无法创建到pulseaudio上下文的连接。

此外,构造函数不会返回,因此我的程序挂起了。

我没有运行pulseaudio。ALSA正常工作,并且在使用Qt 4.8.5编译时,这就是我的程序使用的内容。

检查Qt5“plugins/audio”目录,那里只有“libqtmedia_pulse.so”,其名称表明它依赖于pulseaudio。

我的问题:

  • 在Qt 5+中,是否仍有用于输出到ALSA(而无需pulseaudio)的后端?
  • 如果是,则如何确保已构建它?我没有看到任何配置选项。
  • QAudioOutput的构造函数挂起我的应用程序似乎是个bug。我在哪里可以报告这个问题?

你自己构建了Qt吗?您可能需要启用ALSA音频插件才能使其正常工作。根据Qt Multimedia Backends文档,它应该得到支持。您还可以查看QAudioDeviceInfo Class以查看识别的音频设备。 - deGoot
3个回答

4

以下内容来自Qt文档维基关于多媒体后端的介绍:

Here is the list of the current audio backends:

Windows Multimedia
CoreAudio (Mac OS / iOS)
PulseAudio (Unix)
Alsa (Unix)
OpenSL ES (Android)
QNX

Only PulseAudio, CoreAudio, and QNX backends are actual plugins. The other backends are “#ifdef’ed” in the related classes.

基本上,ALSA不是插件,而是在配置Qt时必须选择的选项(如果您正在构建自己的Qt,则我假设您正在这样做)。
来自Qt文档维基关于从git构建Qt5的页面

Qt Multimedia

You’ll need at least alsa-lib (>= 1.0.15) and gstreamer (>=0.10.24, but <1.0 for now [lists.qt-project.org]) with the base-plugins package.

Ubuntu/Debian:

sudo apt-get install libasound2-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev

当配置Qt时,由于缺少依赖项,我已经不记得有多少次无法编译某些功能了。因此,请确保所有依赖项都已正确安装,并且所有配置选项在当前配置程序中有效(即使是次要版本之间的可用选项也会发生变化)!请牢记查看构建过程的输出(将输出收集到文件中,等待构建完成后搜索任何包含“跳过”、“错误”或类似关键字的消息)。

另一方面,如果您没有构建自己的Qt,则我无能为力,您可以忽略此答案。


0

修复已经在Qt 5.4中存在,提交记录为eb75bf8e3bde3a9b3efc91b54aa4dc2e34a3cde4


我是Qt的Debian维护者,今天有一个用户遇到了同样的问题。构建日志显示alsa依赖项已经存在并且被正确检测... :-/

注2014-12-03:问题出在plugins.pro文件中:如果发现pulseaudio支持,则不会构建alsa插件。问题和补丁由Chris Ruvolo提供,稍后将推送到上游。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接