web-dev-qa-db-ja.com

mpdからpulseaudioにオーディオを送信しようとすると、「オーディオ出力を開けませんでした」エラー

Pulseaudioでmpdを再生しようとすると、mpd.logが次のように報告します。

Pulse_output:「Pink ROCKI」の有効化に失敗しました[パルス]:pa_context_connect()が失敗しました:接続が拒否されました

  • Pulseは、pacmd list-sinksがすべてのPulseシンクを表示し、mebブラウザのオーディオがデフォルトのシンクを介して正常に再生され、VLCがそれらのいずれかを介してサウンドを再生できるため、正常に動作しているようです。
  • pulseの代わりにalsaを介して出力を送信すると、mpdは正常に動作します
  • 私のアカウント(fred)でmpdとpulseaudioの両方が実行されています。
  • fred、mpd、およびpulseaudioは、すべてPulse、Pulse-access、およびaudioグループのメンバーです。
  • 私は、pulseaudioの異なるビルドでこれを試しました。Ubuntu14.04に付属の4.0、Pulse 4.0でビルドされた 実験的RAOP2 、およびPulse 5.0でビルドされた実験的RAOP2。 mpdはそれらのいずれでも動作しません。

私のmpd.confファイルはVanillaです。パルスセクションはジェネリックです。

    audio_output { 
    type "Pulse" 
    name "General Pulse" 
    }

Laugeoが以下に示唆しているように、私はまた、両方の名前で個々のシンクを指定しようとしました:

audio_output {
    type        "Pulse"
    name        "ROCKI"
    sink        "raop_output.ASAP1826T.local"
}

インデックス番号:

audio_output {
    type        "Pulse"
    name        "ROCKI"
    sink        "4"
}

次に何を試すべきですか?システムサービスとして実行するようにpulseaudioを構成できますか?

これはUbuntu 14.04、pulseaudio 4.0(および5.0)、Music Player Daemon 0.18.7にあります

更新:見つけました このブログ ブロガーのLouizが同じ(または非常によく似た)問題を解決したようです:

MPDは明らかに、私自身のユーザーとして新しいpulseaudioプロセスを生成しようとしますが、すでに実行されているため失敗します。新しいインスタンスを生成しようとせずに、既存のpulseaudioインスタンスを使用できない理由を理解できませんでした。

この投稿 のおかげで理解できました。

MPDは、環境変数XDG_RUNTIME_DIRが設定されておらず、pulseaudioがそのファイル(ソケット、プロセスpidなど)を保存しているため、既に実行中のpulseaudioインスタンスを見つけることができませんでした。

私は彼の解決策を試しました:

以下を含む新しいファイル/etc/systemd/system/mpd.service.d/fixenv.confを作成します。

[サービス] Environment = XDG_RUNTIME_DIR =/run/user/1000

(1000をユーザーのUNIX IDに置き換えます。)

リブートし、XDG_RUNTIME_DIRが正しく設定され、Pulseはそのpidファイルを/ run/user/1000/Pulse /ディレクトリー(ユーザーIDは1000)に入れましたが、mpdから同じエラーが表示されます:

Pulse_output:「ROCKI」の有効化に失敗しました[パルス]:pa_context_connect()が失敗しました:接続が拒否されました

私は毎日linuxの詳細を学んでいますが、ソケット、プロセスPID、systemd(Ubuntuはupstartを使用するはずではありませんか?systemdは実行され起動しているようです)森の中で失われたm。

7
Fred Hamilton

最後に、pulseaudioデーモンモードよりも優れた最良の解決策は あり です。mpdを(mpdユーザーではなく)自分で実行することなので、セッションpulseaudioを使用しても問題ありません。

別の答えですが、テスト済みで動作しています:
pulseaudioを、標準の「ユーザーモード」ではなく「デーモンモード」として実行するように設定します

  • ターミナルで、実行します
    Sudo gedit /etc/init/pulseaudio.conf
    次に#を削除して行20のコメントを外し、以下を取得します。
    start on runlevel [2345]
    geditを保存して終了します。
  • ターミナルで次の2つのコマンドを実行します。
    Sudo usermod -aG Pulse,pulse-access mpd
    Sudo usermod -aG Pulse,pulse-access your-login
    2番目のコマンドで、「your-login」を置き換えます

今再起動:うまくいけば、それは動作します。

注:情報については、この page にpulseaudioデーモンモードを避ける必要がある理由がリストされていますが、単一ユーザーのPCでは問題ないことがわかります(特に、ユーザーモードよりも多くのCPU /メモリ使用量は表示されません)。

3
laugeo

XDG_RUNTIME_DIRソリューションはうまくいきましたが、/ etc/systemd/systemにファイルを作成する必要はありません。 /etc/init.d/mpdに次の行を追加するだけです。

export XDG_RUNTIME_DIR=/run/user/1000

すでに/etc/mpd.confで自分のユーザーおよび「オーディオ」グループとして実行するようにmpdを指定しています。

2
user13097

MPD設定ファイルでpulseaudioシンクを指定してみることができます:

Pulseaudioシンクを表示するには、ターミナルで次のコマンドを実行します。
pactl list short sinks

次のようなものが出力されます。

0   alsa_output.pci-0000_00_03.0.hdmi-stereo    module-alsa-card.c  s16le 2ch 44100Hz   IDLE
1   alsa_output.pci-0000_00_1b.0.analog-stereo  module-alsa-card.c  s16le 2ch 44100Hz   RUNNING

メインシンク(HDMIサウンドがないため2番目のメインシンク)を選択し、その名前をmpd.conf audio_outputにコピーします。

音声出力 {

    type                    "Pulse"
    name                    "MPD PulseAudio Output"
   sink                    "alsa_output.pci-0000_00_1b.0.analog-stereo"

}

0
laugeo