PulseAudioシンクを設定する方法は?


16

Raspberry PiにPulseAudioシンクをセットアップして、そこからすべてのシステムサウンドをPCからストリーミングしようとしています。そうするための最良の方法は何ですか?

たとえば、映画を視聴することは可能ですか、それとも待ち時間が長すぎますか?しばらく前にgstreamerを使用してこれを試しましたが、待機時間は約2秒でしたが、これは私の要件には役に立ちません。


1
待ち時間が1〜2秒かかります。
goldilocks

回答:


19

ネットワーク上に「直接接続」を作成するための公式の指示は、ほとんどの人にうまくいけばいいのですが、pulseaudioのようで、うまくいきません。何時間もかかりました。[「直接接続」の他に、さらに下で説明する「トンネル」メソッドを使用することもできますが、最初にこれを読むことをお勧めします。]

piに(fedora 17)デスクトップストリーミングサウンドができました。/etc/pulse両側の構成ファイルを最小化しました。デスクトップ側:

/etc/pulse/client.conf

# See man pulse-client.conf
default-server = tcp:192.168.2.13:4713

デフォルトのpulseaudioポートを持つ私のpiのLANアドレス。しかし、ここでしばらく混乱したことがあります。サーバーが指定されていると、pulseaudioは起動しません。

> pulseaudio --start
N: [pulseaudio] main.c: User-configured server at tcp:192.168.2.13:4713, refusing to start/autospawn.

フォアグラウンドで実行されます(おそらくpulse-client.confを読み取らないためでしょうか?)。 しかし結局のところ、デスクトップ(送信)側実行する必要はまったくありません。これはpulseaudioのドキュメントでは説明されていません。これを使用lsof -i -Pすると、さまざまなメディアプレーヤーの低レベルのプラグインが作業を行うようです。

したがって、その1行の「client.conf」は、実際にデスクトップ/クライアント側で必要なものすべてです。ネットワークを使用するだけの場合(ただし、以下の「さらに複雑な問題」を参照)。

(受信側/サーバー側の)pulseaudioデーモンはシステムサービスとして実行できますが、pulseの開発者はこれに対して推奨します。実際、piではinitスクリプトが警告を発行するだけです。まだ起動する必要がありますそれを自分で。Fedoraにはsystemdブートサービスエントリも含まれていません。

したがって、pi側では、このように構成されたpulseaudioサーバープロセスを明示的に開始および停止する必要があります。

/etc/pulse/daemon.conf

# See man pulse-daemon.conf
log-level = info
exit-idle-time = 10800 # 3 hours

-1を使用exit-idle-timeして、デーモンを無期限に実行し続けることができます。これは秒であり、デフォルトは20であることに注意してください(これを設定しないと「不思議なことに」死に続けることを意味します)。

/etc/pulse/default.pa

# See man default.pa
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;192.168.2.0/24
load-module module-alsa-sink device=hw:0,0

これはネットワークアプリであるため、ルートとして実行することはお勧めできません。ただし、で述べたようにman pulseaudio、プロセスを「優先」して優先順位を高くすることもお勧めします。あなたは使って手動でこれを行うことができniceますが、PulseAudioは、ルート、またはのメンバーのためにそれを自動的に行いますpulse-rt、グループ場合は実行ファイルが「setuidさ」である、それはいくつかのルートprivillegesを利用することができますを意味し、正しいunprivelleged UIDにダウンして(pingpasswdこれも行う必要があります)。そのため(rootまたはsudoとして):

chmod u+s /usr/bin/pulseaudio

pulse-rtpulseaudioがraspbianにインストールされている場合、グループが作成されないため、次のようになります。

groupadd pulse-rt

これにより、1003のようなgidが得られます。そのグループに(たとえば)ユーザーpiを追加します。

usermod -aG pulse-rt pi

しかし、Raspbianでは、piとしてレニスすることはできません。そのためには、次を追加し/etc/security/limits.confます。

@pulse-rt       hard nice -20
@pulse-rt       soft nice -20

これらの変更を行う前に、実際にログインを実行する必要があります。piでsshを使用する場合は、単に使用しますlogin。これでpulseaudioを起動でき、-11になります。これはおそらく他のほとんどのプロセスよりも高い優先度です(のNICE値を見てくださいtop)。

ネットワークからストリーミングされたサウンドの再生中、piのpulseaudioはCPUの約10%とわずかなメモリを使用します。:)それと私のデスクトップは有線LAN上にあります。パルスは生のpcmデータをストリームするので(帯域幅の使用量はソースのサンプルレート、1 kB / s以上に対応します)。残念ながら、ビデオを視聴している場合、音に顕著な遅れがあります。

さらに複雑な問題...

残念ながら、私のPCのさまざまなサウンドアプリケーションはすぐに動作しませんでした。 mpg123まったく実行されません。そのためには、fedoraでmpg123-plugins-pulseaudioパッケージが必要です。ブラウザー内のフラッシュなど(youtudeなど)が必要ですalsa-plugins-pulseaudio(これらは実際にリモートサーバーに接続するものです)。他のディストリビューションにも同様のパッケージが必要です。以前にpulseaudioを使用したことがある場合(私はそうではありません)、すでにインストールされている可能性があります。

KDEのデスクトップ機能も機能しませんでした。これは、ローカルpulseaudioサーバーを探すため、解決が難しい問題です。また、説明したように、直接接続を使用すると、サーバーをローカルで実行できなくなります。これを回避する方法は、「トンネル」メソッドを使用することです。

モジュールトンネルシンク

これはpulseaudioのドキュメントで言及されている他の方法です。この場合、サーバーが両側で実行され、一方が他方にハンドオフします。これを行うには、「default-server」をコメントアウトして、以下を含む/etc/client.confローカル/etc/default.paを追加します。

load-module module-tunnel-sink sink_name=rpi_tunnel server=tcp:192.168.2.13:4713 sink=bcm1

入れないsink_nameと、pulseaudioは起動しません。sink次に、名前を必要とPI側、にシンク名を指します。そこに対応sink_nameするmodule-alsa-sink行を追加しdefault.paます:

load-module module-alsa-sink device=hw:0,0 sink_name=bcm1 

両側でサーバーを起動します。KDEブリープを含むすべてのものが持ち運ばれたが、ブラウザのフラッシュ再生はひどく途切れた。ただし、別のデスクトップ環境(実際には、単なるウィンドウマネージャーfvwm)では問題ありませんでした。

私はKDEが好きですが、音を立てずに生きることができるので、今のところは直接接続に固執します。

トラブルシューティング

問題がある場合pulseaudio -vvvv --log-level=debugは、pi で使用すると多くのデバッグメッセージが表示されます。最初はpiでサウンドを取得できなかったが、これは「ALSA bcm2835ドライバーのバグに関連する」問題を報告しました。サウンドはalsaだけで問題なかったので、奇妙なようでした。 pulseaudioで— apt-get remove pulseaudio再インストールapt-get install pulseaudioはこれを修正するように見えました...私が見たい解決策ではありませんが、少なくとも今は、すべてのボックスにスピーカーを接続することなく、tishを聞くことができます。主に。


広範な回答をありがとう。ただし、Piから直接送られてくるオーディオはどうなりますか?
ビンセント

ダンノ(私はこれをやったことがない)が、pulseaudioはマルチプレクサであると想定されているので、動作するはずです。
goldilocks
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.