pipewire で Airplay する備忘録

Apple
Photo by hyt.

pipewire で Airplay する備忘録です.

いつもの通り結論から記すと,

PipeWire RAOP Discover モジュールを読み込む

ことで使えますが,いまのところどの機器を使うのかによって再生できたりできなかったりすることに注意が必要です.

PipeWire RAOP Discover について

PipeWire RAOP Discover とは Zeroconf の情報を元に Airplay Sink デバイスを自動的に作成してくれる PipeWire 用のモジュールです.公式の情報は,

PipeWire: RAOP Discover

にありますが,このモジュールを読み込むだけで,必要なこと(必要な他のモジュールの読み込み)は全部やってくれるみたいです.

PipeWire RAOP Discover の簡単な使い方

とは言え,公式ページの説明だけだと使い方よく分からなかったのですが,いろいろ調べてみると,

$ pactl load-module module-raop-discover

で RAOP Discover モジュールを読み込んだ上で,pavucontrol コマンドか,前記事

mpv で V4L に対応のキャプチャデバイスを使う備忘録
mpv で V4L に対応のキャプチャデバイスを使う備忘録です. いつもの通り結論から書くと, mpv av://v4l2:/dev/video2 --audio-file=av://pulse:alsa_output.pci-0000_0...

で取り上げた qpwgraph を用いて使用する Airplay レンダラーを選ぶ(つまり,どの機器で再生するのかを選ぶ)方法が一番簡単だと思います.

なお,モジュールの読み込みは pactl ではなく,pw-cli コマンドでも行えますが,

$ pw-cli load-module libpipewire-module-raop-discover

のようなやり方だとすぐに終了してしまいます(つまり使えない).pw-cli コマンドを使う場合は,

$ pw-cli
Welcome to PipeWire version 0.3.76. Type 'help' for usage.
>> remote 0 is named 'pipewire-0'

pipewire-0>> load-module libpipewire-module-raop-discover 
....

のようにしないといけないようです.モジュールを読み込むと同時にかなり詳しい認識情報が表示されます.ただし,pw-cli を終了させると読み込まれたモジュールもアンロードされてしまうので,動作確認ならばともかく,日常的な利用は pactl コマンドの方が良いです.なお,使い終わったあとにモジュールをアンロードするには,

$ pactl unload-module module-raop-discover

とすればOKです.

PipeWire RAOP Discover の細かな設定

PipeWire RAOP Discover の細かな設定,例えばモジュールの自動ロードやレイテンシなどを設定したい場合は,

  • /etc/pipewire/pipewire.conf.d/
  • ~/.config/pipewire/pipewire.conf.d/

以下のどちらかに,

$ vi 30-raop-discover.conf
context.modules = [
   {
       name = libpipewire-module-raop-discover
       args = { }
   }
]

のようにファイルを作れば良いようです.上の例は単に RAOP Discover モジュールを自動的に読み込むだけの設定ですが,

PipeWire: RAOP Discover

にレイテンシなどの設定をどのように行うのかの例が示されています.

実際に読み込まれているかどうかは,pw-config コマンドを

$ pw-config paths
{
  "config.path": "/etc/pipewire/pipewire.conf",
  "override.1.0.config.path": "/home/hyt/.config/pipewire/pipewire.conf.d/10-clock-rate.conf",
  "override.1.1.config.path": "/home/hyt/.config/pipewire/pipewire.conf.d/30-raop-discover.conf",
  "override.2.0.config.path": "/etc/pipewire/pipewire.conf.d/10-rates.conf",
  "override.2.1.config.path": "/etc/pipewire/pipewire.conf.d/20-upmix.conf"
}

$ pw-config list
{
  "config.name": "pipewire.conf",
  "config.path": "/etc/pipewire/pipewire.conf",
  "context.properties": {
    ## Configure properties in the system.
    #library.name.system                   = support/libspa-support
    #context.data-loop.library.name.system = support/libspa-support
    #support.dbus                          = true
    #link.max-buffers                      = 64
...

のように使うことで分かります.

PipeWire RAOP Discover の注意

最後に PipeWire RAOP Discover モジュールについての注意をしておきます.

PipeWire 自体もそうですが,このモジュール自体もまだ発展途上です.現在私が試しているのは PipeWire 0.3.76 ですが,機器によって使えたり使えなかったりします.

私が試した範囲だと,

  • AirReceiver for Android: OK
  • AeroPlayne for Android: OK
  • AirSpeaker for iOS: NO
  • AirFloat for iOS: NO
  • macOS Ventura: NO

です.PipeWire 本家の

Issues · PipeWire / pipewire · GitLab
Multimedia processing graphs

にも結構頻繁に RAOP モジュールの問題が報告されており,修正が取り込まれているようです.実際,つい最近まで PipeWire 0.3.71 でしたが,そのときは AirReceiver 以外は全滅でした.

この辺りは少し調べてみましたが,どの辺りでエラーとなっているのかいまのところよく分かりません.と言うか,そもそも pipewire 自体にあまりまだ慣れておらず,仕組みや考え方をよく理解していないせいで,どのように調べたら良いのかもいまのところよく分かっていないです.

なお,現状,最もよく PipeWire についてまとまっている日本語の記事は Arch Linux の記事

PipeWire - ArchWiki

だと思うので,PipeWire について分からないことがある場合はまずこの記事を見てから他をあたるのがいまのところ効率的かなと思います.

以上!

タイトルとURLをコピーしました