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

时间:2013-11-14 18:30:16

标签: c++ qt qt5 alsa

我有一个小型的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的构造函数挂起我的应用程序似乎是一个错误。我在哪里可以举报?

3 个答案:

答案 0 :(得分:3)

来自Multimedia Backends上的Qt文档wiki:

  

以下是当前音频后端的列表:

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

只有PulseAudio,CoreAudio和QNX后端才是真正的插件。该   其他后端在相关类中是“#ifdef'ed”。

所以基本上ALSA不是插件,但必须在配置Qt时选择(如果你自己构建,我认为你是这样)。

来自building Qt5 from git上的Qt文档wiki:

  

Qt Multimedia

     

你至少需要alsa-lib(> = 1.0.15)和gstreamer(> = 0.10.24,   但是< 1.0 for now [lists.qt-project.org])和base-plugins   封装

     

的Ubuntu / Debian的:

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

配置Qt时,由于缺少依赖性,因为某些功能未编译而导致计数丢失。因此,绝对100%确保所有依赖项都已正确安装,并且所有配置选项对当前配置程序都有效(即使在次要版本之间,可用选项也会更改)!请记住仔细查看构建过程中的输出(收集文件中的输出,并在构建完成后搜索任何带有“跳过”或“错误”的消息或此类关键字。

OTOH,如果你没有建立自己的Qt,那么我就不知道了,你应该忽略这个答案。

答案 1 :(得分:0)

修复存在于Qt 5.4中,提交eb75bf8e3bde3a9b3efc91b54aa4dc2e34a3cde4


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

注意2014-12-03:问题在于plugins.pro:如果找到pulseaudio支持,它不会构建alsa插件。 Chris Ruvolo的问题和补丁将在今天晚些时候推进上游。

答案 2 :(得分:0)

在这里https://wiki.qt.io/Qt_5.13_Multimedia_Backends

enter image description here

是的,我认为Alsa也支持它。