11

QAudioOutput インスタンスを使用してサウンドを出力する小さな C++ Qt プログラムがあります。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

Multimedia Backendsの Qt ドキュメント wiki から:

現在のオーディオ バックエンドのリストは次のとおりです。

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

PulseAudio、CoreAudio、および QNX バックエンドのみが実際のプラグインです。他のバックエンドは、関連するクラスで「#ifdef」されます。

したがって、基本的に ALSA はプラグインではありませんが、Qt を構成するときに選択する必要があります (独自にビルドする場合は、そうであると思います)。

git からの Qt5 の構築に関する Qt ドキュメント wikiから:

Qt マルチメディア

base-plugins パッケージには、少なくとも alsa-lib (>= 1.0.15) と gstreamer (>=0.10.24、ただし今のところ <1.0 [lists.qt-project.org]) が必要です。

Ubuntu/デビアン:

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

Qt を構成するときに、依存関係がないために一部の機能がコンパイルされなかった回数を数え切れませんでした。したがって、すべての依存関係が適切にインストールされていること、およびすべての構成オプションが現在の構成プログラムで有効であることを 100% 確実に確認してください (使用可能なオプションは、マイナー バージョン間でも変更されます)。ビルド プロセスからの出力を注意深く確認することを忘れないでください (出力をファイルに収集し、ビルドの完了後に「skipping」または「error」などのキーワードを含むメッセージを検索します。

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 に答える