PipeWire

提供: ArchWiki
2021年3月5日 (金) 15:13時点におけるKgx (トーク | 投稿記録)による版 (→‎WebRTC スクリーンの共有: 微修正)
ナビゲーションに移動 検索に移動


PipeWire は、GNOME が開発した新しいマルチメディアフレームワークです。開発を担当しているのはWim Taymans です。

PipeWire は Flatpak のようなコンテナをサポートしており、 ユーザーグループオーディオビデオ に依存するのではなく、Flatpak や Wayland にスクリーンやオーディオを録音する許可を求める Polkit のようなセキュリティモデルを使用しています。

インストール

公式リポジトリの pipewire パッケージを インストール します。

Pipewire は systemd/ユーザー を使用してサーバーの管理と自動ソケット起動を行います。サービスの起動動作とログの詳細については、それぞれの systemd/ユーザー を参照してください。

必要に応じて、 pipewire-docs をインストールしてドキュメントを確認します。 pipewire-alsapipewire-pulsepipewire-jack などの他のパッケージは、 PulseAudio/JACKの代わりにPipeWireを使用 したくない場合を除き、通常は必要ありません。 multilib をサポートするために、 lib 32-pipewireAURlib 32-pipewire-jackAUR も利用できます。

使用方法

WebRTC スクリーンの共有

ほとんどのブラウザは、 WebRTC を使用しているとき (例えば Google Hongouts で) デスクトップ (または個々のアプリケーション) をキャプチャするために X11 に依存していました。 Wayland では、セキュリティ上の理由から、共有メカニズムは異なる方法で処理されます。 PipeWire は、アクセスコントロールを使用して、 Wayland の下のコンテンツを共有できます。

これには xdg-desktop-portal とそのバックエンドの1つが必要です [1] 利用可能なバックエンドは次のとおりです。

Firefox(84+)はデフォルトでこのメソッドをサポートしていますが、Chromium(73以降)では、WebRTC PipeWireサポート を有効にする必要があります。次のURLの対応する(実験的)フラグ

chrome://flags/#enable-webrtc-pipewire-capturer

xdg-Desktop-Portal-WLR の作業には、 xdg_current_desktop [2] を設定する必要があります。

XDG_CURRENT_DESKTOP=SWAY をエクスポートします

Chromium は現在 PipeWire 0.2 を使用しているので、ArchはPipeWire 0.3 では、LibpipeWire02 も作業するために libpipewire02 をインストールする必要があります。

ヒント: 複数のモニタがある場合に xdg-desktop-portal-wlr を使用して個々のモニタを共有するには、 --output=Monitor フラグをユニットのサービスファイルの ExecStart=} オプション editing で追加します。行全体は ExecStart=@libexecdir@/xdg-desktop-portal-wlr--output=eDP-1 のようになります。
この記事またはセクションの正確性には問題があります。
理由: この要求 が統合されたため、xdg-desktop-portal-gtk の特定のアプリケーション/ウィンドウの共有に関する次の注記が正しくない可能性があります。また、 [3] のディスカッションの追跡チケットも参照してください。 (議論: トーク:PipeWire#)

唯一サポートされている機能はデスクトップ全体を共有することであり、特定のアプリ/ウィンドウを共有することではありません [4] [5]

Video

ソフトウェアはまだ製造済みではありませんが、GStreamer に頼るほとんどのアプリケーション。 PipeWire GStreamer プラグインのおかげで、ビデオストリームはボックス外で機能するはずです。例えばの用途のような用途。そのため、 cheese したがって、すでにそれを使用してビデオ入力を共有できます。

audio

PulseAudio と Jack と同様に、 PipeWire をオーディオサーバーとして使用できます。 PulseAudio 互換のサーバー実装と JACK クライアント用の ABI 互換ライブラリを提供することで、 PulseAudio と Jack の両方を置き換えることを目的としています。詳細については、このブログエントリ

ALSA/レガシーアプリケーション

pipewire-alsa をインストールして、 PipeWire を介して ALSA API を使用してすべてのアプリケーションをルーティングします。

PulseAudio クライアント

pipewire-pulse をインストールします。通常、ユーザーサービス pipewire-pulse.socket がパッケージによって自動的に有効にする必要があるため、それ以上の動作は不要です。システム起動時にPipeWireが正しく機能しない場合は、ユーザーサービス pipewire-pulse.servicepipewire.service が起動して実行されていることを検証します。 Systemd/ユーザーを参照してください。

再起動または再ログインして効果を確認してください。

交換が機能しているかどうかを確認するには、次のコマンドを実行して出力を参照してください。

$ pactl info
...
Server Name: PulseAudio (on PipeWire 0.3.16)
...

JACK clients

pipewire-jack をインストールし、 PW-JACK を使用して、元の libjack* ではなく互換性のあるライブラリを持つジャッククライアントを起動します。

pw-jack application

BufferSize/SampLerate (秒単位でブロック待ち時間に等しい) を設定することで、カスタムバッファサイズを要求することも可能です。

PIPEWIRE_LATENCY="128/48000" pw-jack application

あるいは、 pipewire-jack-dropinAUR} またはアンインストール jack2}/jack2 を自動的にロードさせるために}

JACK アプリケーションが正しいライブラリにリンクしていることを確認するには、LDD を使用します。

$ ldd /usr/bin/qjackctl | grep -i libjack
libjack.so.0 => /usr/lib/pipewire-0.3/jack/libjack.so.0 (0x00007f7e5080a000)

Bluetooth デバイス

PipeWire は、Bluetooth オーディオデバイスをハンドルします。 pipewire-pulse パッケージがインストールされている場合。具体的には、メディアセッションデーモンは /etc/pipewire/media-session.d/with-pulseaudio をチェックし、ファイルが存在する場合は自動的にその BLUEZ5 モジュールを有効にします。

ネイティブジャックの上で PipeWire を実行します

PipeWire は、必要に応じてネイティブジャックデーモンの上にあるジャッククライアントとして実行することもできます。詳細については、and pipewire を参照してください。

オーディオの後処理

パルス効果

PulseEffects は GTK ユーティリティで、個々のアプリケーション出力ストリームとマイク入力ストリームに多数のオーディオエフェクトとフィルタを提供します。注目すべきエフェクトには、入出力イコライザー、出力ラウドネスイコライゼーションとベースエンハンスメント、入力ディエッサーとノイズリダクションプラグインなどがあります。エフェクトの全リストについては、 GitHubページ を参照してください。

PipeWire で PulseEffects を使用するには、pulseeffects または pulseeffects-gitAUR をインストールします。

ノート: これにより、 pipewire-pulsePulseAudio を PipeWire に置き換えて インストールされます。詳細は、 FS#69437 を参照してください。レガシーバージョンについては、 PulseAudio#PulseEffects を参照してください。

プリセット設定のコレクションについては、Community Presets を参照してください。

トラブルシューティング

PipeWire によってマイクが検出されません

PipeWire の alsa-monitor モジュールは、デフォルトで alsa-card-profiles を使用してデバイスを検出します。これでうまくいかない場合は、 api.alsa.use-acp をオフにするか、 /etc/pipewire/media-session.d/alsa-monitor.confrules->最初のルール->actions->update-props の下でオプションとして api.alsa.use-ucm をオンにしてみてください。

...
update-props = {
    api.alsa.use-acp = false
...

次に、PipeWire を再起動し、使用可能なデバイスをチェックします。

$ pw-record --list-targets
Available targets ("*" denotes default): 62
	58: description="Built-in Audio" prio=1872
	60: description="Built-in Audio" prio=2000
*	62: description="Built-in Audio (Loopback PCM)" prio=1984

Bluetooth デバイスに接続しても音が聞こえない

2020-12-07 の時点で、Bluetooth デバイスを接続しても音が出ない場合は、デフォルトのシンクに切り替えるか、シンク入力を正しいシンクに移動する必要があります。 pactl list sinks を使用して使用可能なシンクを一覧表示し、pactl set-default-sink を使用してデフォルトのシンクを Bluetooth デバイスに切り替えます。これは この1 のようなスクリプトを使って udev で自動化できます。

この問題については、この Redditスレッド を参照してください。スクリプトの作成者によると、ヘッドセットプロファイル (HSP) にまだ問題がある可能性があります。

音量が小さい

PulseAudio を Pipewire に置き換えた後、サウンドは正常に動作しましたが、再起動後にボリュームが極端に低くなりました。

alsamixer を開き、F6 を使って適切なサウンドカードを選び、 ALSA のボリュームが100%であることを確認してください。 alsactl は、再起動後もこの設定を維持する必要があります。

RLIMIT_MEMLOCK の増加

12月13日 11:11:11 HOST pipewire-pulse [99999] :mlock memory 0x7f4f659d8000 32832:に失敗しました。これは問題ではありませんが、最高のパフォーマンスを得るために、 RLIMIT_MEMLOCK の増加を検討してください。

realtime-privileges をインストールし、 realtime グループに自分のユーザーを追加します。

あるいは、memlock を 64kB から 128kB に増やすことで、この問題を解決できるようです。systemd/ユーザーpipewire-pulse を実行している場合は、{{ic|/etc/security/limits.d/username.conf} に次を追加します。

username	soft	memlock	64
username	hard	memlock	128

再接続後に外付けサウンドカードがアクティブにならない

~/.config/pipewire-media-session/default-profile にデフォルトプロファイル オフ のエントリがあるかどうかを確認し、削除します。それでも解決しない場合は、 ~/.config/pipewire-media-session/ からすべてのファイルを削除し、 systemctl--user restart pipewire.service を使用して PipeWire を再起動します。

No Sound または pactl info show Failure:Connection refused

これは、アプリケーションが PipeWire-Pulse サービスに接続できず、/etc/pipewire/pipewire-pulse.conf が存在し空でないことを確認し、 systemctl--user restart pipewire-pulse.service を使用して PipeWire-Pulse を再起動して下さい。

それでも解決しない場合は、 strace-f-o/tmp/pipe.txt pactl情報 と pastebin /tmp/pipe.txt を実行し、IRC (Freenode #pipewire) かメーリングリストでヘルプを探してください。

Bluetooth のオーディオ品質が低い

Feb 17 18:23:01 HOST pipewire[249297]: (bluez_input.18:54:CF:04:00:56.a2dp-sink-60) client too slow! rate:512/48000 pos:370688 status:triggered

Bluetooth 再生が途切れる場合は、systemctl --user status pipewire.servicepipewire.serviceを確認してください。このようなエラーが発生した場合は、pactl list sinks を使用して現在選択されているコーデックをチェックし、 {{ic|/etc/pipewire/media-session.d/bluez-monitor.conf} の bluez 5.codecssbc aac ldac aptx aptx_hd の場合 のいずれかに設定して変更を試み、変更を有効にするために systemctl--user restart pipewire.service を使用して PipeWire を再起動します。

/etc/pipewire/media-session.d/bluez-monitor.conf
...
properties = {
  ...
  bluez5.codecs = [sbc]
...

PipeWire の更新と再起動後 (git/>=0.3.23) デバイスが検出されません

commit 012a68f8[6] の時点で、新しい systemd サービスが追加され、デフォルトでは無効になっています。これは、システムリブート時に pipewire-media-session が実行されないことを意味します。サービスの実行を有効にするには、次の手順に従います。 systemctl--user enable--now pipewire-media-session.service

ユーザーまたはパッケージマネージャが更新後に構成ファイルの変更をソートしていない場合、 pipewire.service で pipewire-media-session の別のインスタンスが実行されている可能性があります。実行をチェックしてください :systemctl --user status pipewire.service

実行中の pipewire および pipewire-media-session が表示される場合は、システムまたはユーザ設定、あるいはその両方を更新します。

/etc/pipewire/pipewire.conf および/または ~/.config/pipewire/pipewire.conf
context.exec = {
  ...
  # 以下の行はコメントアウトする必要があります
  #"/usr/bin/pipewire-media-session" = { args = "" }
  ...
}

参照