以前の記事で、mpdを使いミュージックサーバを作りました。これはCentOS7に直結されたスピーカーから音楽を再生するミュージックサーバです。今度はCentOS7から音楽を飛ばし、他のデバイスで音楽を再生できるような環境を作ります。この音楽を飛ばすプロトコルがDLNA。音楽以外に動画や写真なんかも飛ばせます。きっかけは寝るときの音楽再生環境を何とかしたかったから。これまでずっと寝るときは、日中使うWalkmanで音楽を聴いていたんですが、昼使うものを夜使うと充電がめんどくさい。お古のAndroidがあったのでそっちを寝るとき専用にしようにも、いちいちAndoroidに音楽をコピーするのがめんどくさい。音楽が置いてあるファイルサーバから、Andoroidに直接音楽ストリーミングできればいいじゃんってことで。それに使うのが使うのがReadyMedia。旧称MiniDLNA。Netgear社の社員が作ったOSSで、NetgearのNASには標準搭載されているそうな。環境ReadyMedia(MiniDLNA)のバージョンは構築後に確認しました。ReadyMedia(MiniDLNA)インストールnux-dextopリポジトリからインストール。依存パッケージ(libFLACなど)導入のためepelリポジトリも同時に参照すべきとのことでしたが、私の環境では依存パッケージは全て導入済みだったため、nux-dextopから本体のみがインストールされました。--enablerepo=epel,nux-dextop1ちなみにminidlnaが依存しているパッケージ一覧はこちら。設定ファイル(minidlna.conf)編集コンフィグファイルの配置場所は/etc/minidlna.conf。編集したのは以下の通り。日本語コメントは私の補足。*_dirのディレクトリはuserで指定したユーザが読み書きできるようにしておいてください。#ストリーミングに使用するポート。コメントアウトして明示。#ReadyMediaを実行するユーザ指定。ログインユーザで動かす必要がなければ、minidlnaインストール時に作成されるシステムユーザminidlnaを指定。media_dir=PV,/home/jmaggard/digital_camera)#media_dir=/optmedia_dir=A,/home/samba/share/02_voice#各メディアが保存されているディレクトリを指定。ディレクトリ名の前に「A,」などでメディアの種類を指定。Aが音楽、Vがビデオ、Pが写真。cachedb_dir=/var/cache/minidlna#minidlnaが使用するDBの場所。コメントアウトで明示。filelog_dir=/var/log/minidlna#minidlnaのログを配置するディレクトリ。ファイアウォール穴あけ8200/tcpがストリーミングに利用するポート。Protocol)で使用するポート。Play)というプロトコルを使ってクライアントが自動的にDLNAサーバを探しに行くのに使います。以下のコマンドでメディアをReadyMediaのDBに登録します。同時に音楽のサムネイルのDB登録なんかもやってくれている様子。音楽のサムネイル登録はDBを再作成しないとできません(これは20190617にバッチ化しました。このコマンドが作成するDBのファイルの所有者は、コマンド実行したユーザになります。これらのファイルはrw-r–r–ですので、一般ユーザがDB作成コマンドを実行すると、minidlnadを動かすminidlnaユーザがこれらのファイルに対して書き込み(更新)できなくなります。そのため、DB作成コマンドはminidlnaユーザで実行するようにします。このタイミングでログファイルも生成されます。ログファイルの所有者もコマンドを実行したユーザです。-R1再作成が終わったら、一度ReadyMediaのプロセスを全て落とします。これをやらないとsystemdから見たstatusがFailedになってsystemdから触れない状態になる。20181026補足。-Rを打つと、DBの新規作成を行うだけでなく、バックグラウンドでサーバプロセスとして稼働もするようです(DBの新規作成だけやって落ちてくれるのが普通の感覚ですよね......)。この-Rによって起動されたminidlnadは、systemdを経由していないのでsystemdの管轄外です。-S」がminidlnaのサービスプロセスだと認識しているからです。-Rでバインド済みのポートに別プロセスのminidlnadがポートをバインドさせようとして失敗してFailedになります(ただし-Rで起動したminidlnadは生きているため、クライアントからアクセスは可能)。-Rを実施したら、そのバックグラウンドプロセスを殺し、systemdから起動しなおすようにします。DB更新をバッチ化しました。インストールし、CentS7と同一NWにつないだ状態で起動すると、自動的にDLNAサーバを探しにいってくれます。サーバを選択して、フォルダから再生したいメディアを選択すると、スマホでメディアが再生できます。これで寝るときにWalkmanの電池を消耗せず、かつお古のスマホにわざわざデータを保管することなく、音楽をお古のスマホから聞けるようになりました。