Raspberry piのgmediarenderをgmrender-resurrectに入れ替え

今までRaspberry piDLNA (UPnP)のrendererをgmediarenderにしてきました。

gentoolinux.hatenablog.com

しかし、gmediarenderは古くてメンテナンスされていないせいか、Raspberry piには荷が重く、挙動がおかしくなります。
挙動がおかしくなる一例として
・再生後、停止や一時停止ができない。
・次の曲に行かない。
DMCのシークバーも再生時間も動かない。
・曲が停止してもALSAを占有し続ける。
4項目はPulseAudioにでもすればよいのでしょうが、そでも1~3は解決しません。
(PluseAudioは今、悪戦苦闘中)

で、これを解決する軽量レンダラーとしてgmrender-resurrectがgitに上がっています。

github.com

一般的なインストール方法が書かれていますが、Raspberry pi向けに参考にしたのがコチラ

blog.scphillips.com

英語で書かれているのですが、わかりやすいです。
Raspberry piでmakeするので、だいぶ時間かかるかと思いましたが、ものの数分でした。(離席している間に終わってました。)

まず、古いgmediarenderとその時入れた関連パッケージをpurgeします。

apt purge gstreamer1.0-alsa gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-ugly gstreamer1.0-plugins-bad gmediarender

そして、事前に必要なパッケージをインストールします。

apt install libupnp-dev libgstreamer1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-alsa gstreamer1.0-pulseaudio

んでgitからgmrender-resurrectのソースを拾ってきてmakeします。
あ、途中でautoconfもインストールしますが、先にインストールしても構いません。

git clone https://github.com/hzeller/gmrender-resurrect.git
cd gmrender-resurrect
apt install autoconf
./autogen.sh
./configure
make
make install

続いて、systemd用の起動スクリプトをコピーします。
(OpenRC派なんですけど、最近の主流はsystemdですね・・・。)

cp dist-scripts/debian/gmrender-resurrect.service /etc/systemd/system
chmod 775 /etc/systemd/system/gmrender-resurrect.service

設定ファイルはないようなので、etc/systemd/system/gmrender-resurrect.serviceのファイルを直接編集する必要があるようです。
デフォルトでは、

ExecStart=/usr/local/bin/gmediarender -f "$UPNP_DEVICE_NAME" -u "$UPNP_UUID" \
                                      --gstout-audiosink=alsasink --gstout-audiodevice=sysdefault \
                                      --logfile=/tmp/gmediarenderer.log --gstout-initial-volume-db=-10

というふうになってますので、ボリュームを0.0にしたり、アウトプットを変えたりしましょう。

また、pluseaudioを出力にする際は、pulsesinkに変更し、デバイスはpulseaudioで検出されたデバイス番号を指定します。

ExecStart=/usr/local/bin/gmediarender -f "$UPNP_DEVICE_NAME" -u "$UPNP_UUID" \
                                      --gstout-audiosink=pulsesink --gstout-audiodevice=0 \
                                      --logfile=/tmp/gmediarenderer.log --gstout-initial-volume-db=0.0

PulseAudioのデバイス番号の調べ方は

pactl list sinks

で、ずらーっと出てきますので、先頭のSink #0とかSink #1とかがデバイス番号のようです。