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

3 回答 3

4

来自多媒体后端的 Qt 文档 wiki :

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

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

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

所以基本上 ALSA 不是一个插件,但必须在配置 Qt 时选择(如果您构建自己的,我假设您是)。

来自关于从 git 构建 Qt5 的Qt 文档 wiki :

Qt多媒体

您至少需要 alsa-lib (>= 1.0.15) 和 gstreamer (>=0.10.24,但现在 <1.0 [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,那么我不知道,您应该忽略这个答案。

于 2014-07-30T19:14:57.403 回答
0

Qt 5.4 中存在修复,提交 eb75bf8e3bde3a9b3efc91b54aa4dc2e34a3cde4


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

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

于 2014-11-29T19:05:25.417 回答
0

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

在此处输入图像描述

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

于 2020-11-09T23:03:11.177 回答