PulseAudioシンクのutter音


12

Piにraspbianをインストールし、デスクトップからPiにすべてのオーディオをストリーミングしてスピーカーを駆動するためにPulseAudioシンクを構成しました。

私はこの素晴らしい説明に従いました:http : //www.raspberrypi.org/phpBB3/viewtopic.php?f=38&t=11124

最初は、これは問題なく機能するように見えました。ただし、デスクトップから送信されたオーディオは、Piで途切れることがありません。まるで、いくつかのサンプルが間に入るだけで一定のバッファアンダーランが発生したかのようです。

私は原因を見つけるために一日中過ごしたが、役に立たなかった。基本的なセットアップは次のとおりです。

  • 有線LAN接続
  • 最新のファームウェア更新を伴う最新のraspbian pi(26 Sep 2013)
  • 両側のPulseAudio 2.0(Ubuntuデスクトップ)
  • mplayer、totem、ffplayによる再生
  • module-native-protocol-tcpを介したネットワーク伝送

これは私が試したものです:

  • Piで直接オーディオを再生することは完全に機能します。
  • 他の(デスクトップ)コンピューターへのストリーミングは正常に機能します。
  • 直接接続($ PULSE_SERVERを指定)で音声を送信すると、非常にわずかなwith音で非常にうまく機能しますが、問題2が発生しやすくなります(以下を参照)。
  • デスクトップPulseAudioトンネリング経由でオーディオを送信すると、一定のst音が発生します
  • 優先順位の引き上げ/リアルタイムスケジューリング...助けにはなりませんでした
  • サンプリングレートを48 kHzに修正しました...解決しませんでした
  • リサンプリングアルゴリズムを「自明」に設定しました...助けにはなりませんでした
  • default-fragments / fragment-sizeの調整...助けにはなりませんでした
  • PulseAudioログで問題の兆候を見つけることができません(再生を開始した時点から表示されます)。

    D: [alsa-sink] protocol-native.c: Requesting rewind due to end of underrun.
    D: [alsa-sink] sink-input.c: Requesting rewind due to uncorking
    D: [pulseaudio] sink.c: Suspend cause of sink alsa_output.platform-bcm2835_AUD0.0.analog-stereo is 0x0000, resuming
    I: [alsa-sink] alsa-sink.c: Trying resume...
    I: [alsa-sink] alsa-util.c: cannot disable ALSA period wakeups
    D: [alsa-sink] alsa-util.c: Maximum hw buffer size is 341 ms
    D: [alsa-sink] alsa-util.c: Set buffer size first (to 16384 samples),  period size second (to 16384 samples).
    I: [alsa-sink] alsa-util.c: ALSA period wakeups were not disabled
    D: [alsa-sink] alsa-sink.c: Latency set to 25.00ms
    D: [alsa-sink] alsa-sink.c: hwbuf_unused=60736
    D: [alsa-sink] alsa-sink.c: setting avail_min=15665
    I: [alsa-sink] alsa-sink.c: Time scheduling watermark is 15.00ms
    I: [alsa-sink] alsa-sink.c: Resumed successfully...
    I: [alsa-sink] alsa-sink.c: Starting playback.
    D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial iterations by half.
    D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial iterations by half.
    D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial iterations by half.
    D: [pulseaudio] module-suspend-on-idle.c: Sink alsa_output.platform-bcm2835_AUD0.0.analog-stereo becomes busy.
    D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial iterations by half.
    D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial iterations by half.
    D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial iterations by half.
    D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial iterations by half.
    D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial iterations by half.
    D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial iterations by half.
    D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial iterations by half.
    D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial iterations by half.
    D: [alsa-sink] ratelimit.c: 115 events suppressed
    D: [alsa-sink] alsa-sink.c: Wakeup from ALSA!
    ... no more output, but stuttering continues ...
    

問題2:上記のように、直接接続することでまったく問題ないオーディオを得ることができます。ただし、ストリーム内で(mplayerを使用して)数回スキップすると、PulseAudioサーバーがハングし、オーディオがまったく再生されません。mplayerを再起動すると復活する場合があります。ときどきハングアップして、PulseAudioを再起動する必要があります。ボリュームレベルを変更するだけでハングすることさえあります。

PulseAudioのドキュメントによると、トンネル接続を介した直接接続の利点は、より優れたバッファリング制御が得られることです。これは、直接接続で良い音声が得られる理由を示しているようです:http : //www.freedesktop.org/wiki/Software / PulseAudio / Documentation / User / Network /

私は今アイデアを失っています。st音と問題2の原因は何ですか?デバッグを進める方法についてのアイデアもいただければ幸いです。


オーディオを直接再生した方法は?私はプレイに問題はありませんでしたが、パプレイは途切れ途切れになり、ひどくエコーします。
ジョンラルーイ14年

私はmplayer、totem、madplayなどを使用しました...しかし、異なるプレーヤーが異なる動作をするという事実は、データバッファリングに関するソフトウェアの問題のように思われるという私の推測をサポートします。一部のプレーヤーは、他のプレーヤーよりもリアルタイムでより多くのデータをプッシュします。
farindk

サイン波を弾くだけ困ってます。LANでストリーミングを試す前に、それを解決する必要があると思います。
ジョンラルーイ14

回答:


6

tsched_buffer_sizeそしてtsched_buffer_watermark、それが私にとってうまくいった設定でした。

PulseAudioをシステムインスタンスとして実行するため、構成はにあり/etc/pulse/system.paます。代わりにセッションインスタンスを使用している場合、構成はになります/etc/pulse/default.pa

これがデフォルトです:

### Automatically load driver modules depending on the hardware available
.ifexists module-udev-detect.so
load-module module-udev-detect
.else
### Use the static hardware detection module (for systems that lack udev/hal  support)
load-module module-detect
.endif

これに置き換えました:(つまり、コメントアウトしました)

### Automatically load driver modules depending on the hardware available
.ifexists module-udev-detect.so
#load-module module-udev-detect
.else
### Use the static hardware detection module (for systems that lack udev/hal  support)
#load-module module-detect
.endif

次に、次の行を追加しました。

load-module module-alsa-card device_id=0 tsched=true tsched_buffer_size=1048576 tsched_buffer_watermark=262144

http://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/Modules/#index6h3を参照してください


いい視点ね。試しましたが、助けにはなりませんでした。はるかに大きなバッファサイズでも。PULSE_SERVERをPiに設定して直接接続を介してオーディオを送信すると、きれいなオーディオが得られますが、音量を変更するだけで最終的に接続がフリーズします。トンネリングを介したオーディオは依然としてstill音を発生させます。私の推測では、これは本当にPulseAudioの問題だと思います。その大きなバッファサイズ(4 MBを使用しました)では、ファイルの先頭でオーディオが事前にデコードされることがわかるはずです。そうではありません。そのため、補充が遅くなる何かがあるはずです。
ファリンド

同じ種類の問題が発生しています。私の特定のケースでは、PULSE_SERVER + mplayerはチャームのように機能しますが、PULSE_SERVER + clementine(gstreamerを使用していると思われます)はひどく途切れます。両者の違いは何ですか?
ジョナサンプロツェンコ

@Protzenko:ソースを見ずに推測すると、mplayerはPulseAudioがブロックされるまでデータをプッシュし、gstreamerはリアルタイムリファレンスによってクロックされたデータを送信する可能性があります。つまり、前者の場合はバッファーがはるかに多くなり、その結果、遅延が大きくなります。
farindk

私は同じ問題をPULSE_SERVER + ffmpegの罰金、PULSE_SERVER + MPDシャッター、暗黙のアンダーラン見ている
Reimundo Heluani

3

主なポイントはを使用する必要があることですmodule-tunnel-sink-newが、raspberry pi 1でスタッターのないネットワークオーディオを取得するには、他にもいくつかの変更を行う必要があります。

  1. リアルタイムの優先度でラズベリーパイでpulseaudioを実行します:
pulseaudio --start --high-priority=yes --realtime=yes

送信者」という用語を使用して、ストリームをラズベリーパイに送信するコンピューターを示します。

  1. 送信者で次の値を設定default-fragmentsdefault-fragment-size-msecて入力daemon.confします。
default-fragments = 8
default-fragment-size-msec = 12
  1. 送信者でmodule-tunnel-sink-newこのコマンドを発行して使用します(raspberry piのホスト名がRP1であり、ローカルネットワークでmDNSが機能している場合。そうでない場合は、raspberry piのIPアドレスを使用します)。
pactl load-module module-tunnel-sink-new server=RP1.local

これらの設定により、54 Mbpsで動作するワイヤレスネットワークを介してraspberrypi 1からスタッターのないオーディオを取得します(私の設定では、送信者はイーサネットを使用し、RP1はwlanを使用しています)。実際には、少なくともワイヤレスネットワーク上に他のデバイスがない場合、送信者とraspberrypiの両方がwlanを使用している場合でも機能します。


これまでのところうまくいきます。Pi3(やや新しいdebian /ソフトウェア)では、 "default-fragments"設定をピックアップするために何か他のものを変更する必要があることがわかりました。(つまり、何か設定tsched=0wiki.archlinux.org / index.php / PulseAudio /…を参照)
rien333

それでも吃音発生した場合は、アーチのWikiも、RTPストリーミングプロトコルに変更することをお勧めします: wiki.archlinux.org/index.php/PulseAudio/...
rien333を

1

このページをチェックアウトしましたか:

http://manpages.ubuntu.com/manpages/lucid/man5/pulse-daemon.conf.5.html

デフォルトのフラグメント設定

   Some hardware drivers  require  the  hardware  playback  buffer  to  be
   subdivided  into  several  fragments.  It  is  possible to change these
   buffer metrics for machines with high  scheduling  latencies.  Not  all
   possible  values  that  may  be  configured  here  are available in all
   hardware. The driver will to find the nearest setting supported. Modern
   drivers that support timer-based scheduling ignore these options.

   default-fragments= The default number of fragments. Defaults to 4.

   default-fragment-size-msec=The  duration of a single fragment. Defaults
   to 25ms (i.e. the total buffer is thus 100ms long).

はい、試してみましたが、助けにはなりませんでした。前述したように、デバイス自体のオーディオ再生は正常に機能します。これはPulseAudioトンネリングのネットワークプロトコルの問題だと思います。直接接続プロトコルでもうまく機能します。信頼性が高く、RPiを他の用途に使用する単純なBluetoothストリーミングハードウェアに切り替えました。
farindk

1

st音やタイムアウトの問題を取り除くには、FWのダウングレードを試してください。

sudo rpi-update eeb2e51c3e08cd5efa4246aa8dc54a09b25ada12

1
警告rpi-updateこの方法で使用するとシステムに何ができるかに注意してください。
earthmeLon

@earthmeLon少なくとも参照を提供するかrpi-update、この方法でシステムに何ができるかをお知らせください
...-user11171

必ずマニュアル読んで、これがシステムと潜在的な危険にどのように影響するかを理解するためにいくつかの調査を行ってください。
earthmeLon

0

この問題はカーネルのバージョンに関連している可能性があることを認識しました。3.6.11から3.12.0にアップグレードした後、これらのアンダーランを常に受け​​取りました。3.6.11にダウングレードすると、問題は解決しました。


0

私はこのページを数回読んでいます... RaspberryPi-pulseaudio-networkの組み合わせのutter音にもイライラしています。私はもう少し検索して、解決策の一部を見つけたページを見つけました:

=> default.pa(またはsystem.pa)でmodule-suspend-on-idleを無効にします。

見よ、st音は消えた!

唯一の問題は、しばらくすると(10〜20秒)再生がハングすることです:-/

助言がありますか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.