CentOS7でReadyMedia(MiniDLNA)を使ってDLNAミュージックストリーミングサーバを作る

20181026 DB作成のパーミッション周りの記述誤り・補足を修正・追加

以前の記事で、mpdを使いミュージックサーバを作りました。これはCentOS7に直結されたスピーカーから音楽を再生するミュージックサーバです。今度はCentOS7から音楽を飛ばし、他のデバイスで音楽を再生できるような環境を作ります。この音楽を飛ばすプロトコルがDLNA。音楽以外に動画や写真なんかも飛ばせます。

きっかけは寝るときの音楽再生環境を何とかしたかったから。これまでずっと寝るときは、日中使うWalkmanで音楽を聴いていたんですが、昼使うものを夜使うと充電がめんどくさい。お古のAndroidがあったのでそっちを寝るとき専用にしようにも、いちいちAndoroidに音楽をコピーするのがめんどくさい。じゃあ音楽が置いてあるファイルサーバから、Andoroidに直接音楽ストリーミングできればいいじゃんってことで。

それに使うのが使うのがReadyMedia。旧称MiniDLNA。Netgear社の社員が作ったOSSで、NetgearのNASには標準搭載されているそうな。

環境

ReadyMedia(MiniDLNA)のバージョンは構築後に確認しました。

ReadyMedia(MiniDLNA)インストール

nux-dextopリポジトリからインストール。依存パッケージ(libFLACなど)導入のためepelリポジトリも同時に参照すべきとのことでしたが、私の環境では依存パッケージは全て導入済みだったため、nux-dextopから本体のみがインストールされました。

ちなみにminidlnaが依存しているパッケージ一覧はこちら。

設定ファイル(minidlna.conf)編集

コンフィグファイルの配置場所は/etc/minidlna.conf。編集したのは以下の通り。日本語コメントは私の補足。

ファイアウォール穴あけ

8200/tcpがストリーミングに利用するポート。1900/udpがSSDP(Simple Service Discovery Protocol)で使用するポート。UPnP(Universal Plug and Play)というプロトコルを使ってクライアントが自動的にDLNAサーバを探しに行くのに使います。

ReadyMedia(MiniDLNA)のDB作成

以下のコマンドでメディアをReadyMediaに登録します。同時に音楽のサムネイルの登録なんかもやってくれている様子。パーミッションが面倒なのでsudoは着けないこと。一般権限のログオンユーザで実行することで、最終的にminidlna.conf指定のminidlnaユーザでDBを作成できるようにします。

20181026修正。一般権限のログオンユーザでこのコマンドを実行すると、そのユーザ名が所有者となったDBやサムネイルが作成されるようです(試してから書けよ……)。これらのファイルはrw-r–r–です。そのため、一般権限のログオンユーザがDB作成コマンドを実行すると、minidlnadを動かすminidlnaユーザがこれらのファイルに対して書き込み(更新)できなくなります。そのため、minidlnaユーザで実行するように変更しました。また、後述の通り、この-RコマンドはDB再作成のみならず実際にdlnaサーバプロセスとして起動するため、ログファイル等も同時にminidlnaユーザ所有のファイルとして作成されます。

再作成が終わったら、一度ReadyMediaのプロセスを全て落とす。れやらないとsystemdから見たstatusがFailedになってsystemdから触れない状態になる。

20181026補足。minidlnad -Rを打つと、DBの新規作成を行うだけでなく、バックグラウンドでサーバプロセスとして稼働もするようです(DBの新規作成だけやって落ちてくれるのが普通の感覚ですよね……)。この-Rによって起動されたminidlnadは、systemdを経由していないので当然systemdの管轄外です。よって、このままsystemctlでminidlnaをstartしようとすると、同じプロセスが2つ起動しようとしてFailedになる(ただし-Rで起動したminidlnadは生きているため、クライアントからアクセスは可能)。systemdから触れるものはsystemdから統合管理したいため、minidlnad -Rを実施したら、そのバックグラウンドプロセスを殺し、systemdから起動しなおすようにする。

ReadyMedia(MiniDLNA)起動&自動起動

クライアントからの接続確認

DLNAクライアントアプリはいろいろありますが、私はAndoroidから接続するのにDMSエクスプローラを利用しました。インストールし、CentS7と同一NWにつないだ状態で起動すると、自動的にDLNAサーバを探しにいってくれます。

んでサーバを選択して、フォルダから再生したいメディアを選択すると、スマホでメディアが再生できます。

 

おわり。これで寝るときにWalkmanの電池を消耗せず、かつお古のスマホにわざわざデータを保管することなく、音楽をお古のスマホから聞けるようになりました。音質は……微妙。ノイズが。今後の課題にします。

→機器や環境をいろいろ変えて切り分けましたが、ホワイトノイズや音声再生時ノイズが出るのは、お古のスマホのBluetoothのコーデックがSBCにしか対応していないこと(これは有線イヤホンで一応対応可能)と、本体が高ヘルツ/ビットレートの音源に対応していないこと(192kHz/24bitなど。これはどうしようもない)なためなような気がしてきました。うーん……。

参考