ラズパイで実用的なストリーミングプレイヤーを作る（構築編）

# 前回の記事
前回の記事はこちらを参照ください。

ラズパイで実用的なストリーミングプレイヤーを作る（構想編）
https://qiita.com/quni310/items/399ba2dd413fc5582f66

今回の記事は、エラーなどがなければ30分でおつりがきます。
Beagleboneにて再現確認しましたが、同様にできました。

# OS選定
OSは、Raspberry PI Imagerアプリ（https://www.raspberrypi.com/software/）から、
ヘッダレス（GUIがないものとして、no desktop environmentとあるもの）を選択。

私は、Rasp4　2GBモデルを使っているので、64bitCPUの中で新しいものから選択。
![raspi_imager.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117070/efb62d9e-e6bb-4392-8080-ed327d61f0b1.png)


イメージファイルをSDカードに書き込んだら、ラズパイに挿入。
起動前にネットワーク上のデバイスをチェック（あとで増えたデバイスをわかりやすくするため。私はルータ上でチェックしてます。そしてルータにて固定IPの割り当てを行います。）


LANケーブルを差し、起動。
固定IPにSSHでアクセス。
（IPが不明な場合、AndroidのFingアプリ推奨）
（SSHの設定を忘れた場合、bootパーティションに、ファイル名SSHの空ファイルを作ればOK）

# OS初期セットアップ
Raspberry PI Imagerにて設定したユーザでログイン（Teratermがお勧め）


まずはお約束
```console
sudo apt update
sudo apt upgrade
```

# DLNA Rendererインストール
DLNAレンダラの前提パッケージ・本体のインストール

```sh
sudo apt install gstreamer1.0-alsa gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-ugly gstreamer1.0-plugins-bad gmediarender
```

# DLNA Renderer設定
まず、USB DACのデバイスを確認。
２つ目に出ている　**Card 1、Device　0** が出力に指定したいデバイス。

```perl
aplay -l

#以下はBeagleboneでの例です。-----------------------------
**** List of PLAYBACK Hardware Devices ****
card 0: Black [TI BeagleBone Black], device 0: davinci-mcasp.0-i2s-hifi i2s-hifi-0 [davinci-mcasp.0-i2s-hifi i2s-hifi-0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

card 1: Pro [DX7 Pro], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
```


設定ファイルを、以下のように更新
```perl
sudo nano /etc/default/gmediarender

# 以下を追記。これは必須。
ENABLED=1

# DLNAコントローラから見える機器名を変える場合は以下を更新
UPNP_DEVICE_NAME="gmediarender on $(hostname)"

# ボリュームの初期値。小さすぎるので0にしておく
INITIAL_VOLUME_DB=0.0

#　出力デバイスの指定。aplay -lの結果に合わせる
# hw:カード番号,デバイス番号 で指定
ALSA_DEVICE="hw:1,0"

# エラー調査用にログを出力するようにしておく。安定してきたらなくてもOK
DAEMON_EXTRA_ARGS="--logfile /var/log/gmediarender.log"
```

サービスの自動起動の設定、サービス起動
```shell-session
# OS起動時にレンダラーサービスが自動起動するように設定
sudo systemctl enable gmediarender.service

# まだサービスは動いていないので起動
sudo systemctl start gmediarender.service

#　サービスの起動確認
sudo systemctl status gmediarender.service

#　以下のように active(running) となっていればOK
gmediarender.service - LSB: Start GMediaRender
   Loaded: loaded (/etc/init.d/gmediarender; generated)
   Active: active (running) since Wed 2025-04-30 10:15:33 UTC; 55s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 1444 ExecStart=/etc/init.d/gmediarender start (code=exited, status=0/
    Tasks: 13 (limit: 1026)
   Memory: 62.4M
   CGroup: /system.slice/gmediarender.service
```



# あると便利な設定・もの
- Teratermのログ設定。いつ・何をやったかの記録が残るので設定推奨。ただしキーボード操作がすべて残るので見づらいです。
![スクリーンショット 2025-04-03 184419.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117070/d05e3793-49be-4682-a8a0-6643f14be30a.png)


- 信頼できるSDカード。安いSDカードはだめです。本当にすぐに壊れます。

- RaspContoroller。Androidからラズパイを操作しやすいです。電源切り忘れたときなど便利。
- ArgonOneV2,V3ケース。電源ボタン付きで便利。ラズパイは電源をブチ切すると、SDカードが壊れやすい為、必ずちゃんと電源を落とします。
ラズパイでなく、beagleboneで本体のemmcを使用するとSDカードの問題はクリアになります。レスポンスは気持ち遅くなります。

# 余談
- Raspberry PI Imagerで、WiFiなどの設定はできますが、なぜかうまくいかないことが多いです。信用せず、チェックするのがおすすめです。私は余計なものを動かしたくなく、有線でつなげやすい環境のため、WiFiは無効化してます。（WiFiやBluetoothは動かさないのが推奨）

- gmediarenderは古くあまりメンテナンスされておらず、gmrender-resurrectが出ています。ただ私の環境ではgmrender-resurrectは安定しなかったので、gmediarenderに戻しました。