20181026 DB作成のパーミッション周りの記述誤り・補足を修正・追加
以前の記事で、mpdを使いミュージックサーバを作りました。これはCentOS7に直結されたスピーカーから音楽を再生するミュージックサーバです。今度はCentOS7から音楽を飛ばし、他のデバイスで音楽を再生できるような環境を作ります。この音楽を飛ばすプロトコルがDLNA。音楽以外に動画や写真なんかも飛ばせます。
きっかけは寝るときの音楽再生環境を何とかしたかったから。これまでずっと寝るときは、日中使うWalkmanで音楽を聴いていたんですが、昼使うものを夜使うと充電がめんどくさい。お古のAndroidがあったのでそっちを寝るとき専用にしようにも、いちいちAndoroidに音楽をコピーするのがめんどくさい。じゃあ音楽が置いてあるファイルサーバから、Andoroidに直接音楽ストリーミングできればいいじゃんってことで。
それに使うのが使うのがReadyMedia。旧称MiniDLNA。Netgear社の社員が作ったOSSで、NetgearのNASには標準搭載されているそうな。
環境
ReadyMedia(MiniDLNA)のバージョンは構築後に確認しました。
|
$ cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) $ minidlnad -V Version 1.1.6 |
ReadyMedia(MiniDLNA)インストール
nux-dextopリポジトリからインストール。依存パッケージ(libFLACなど)導入のためepelリポジトリも同時に参照すべきとのことでしたが、私の環境では依存パッケージは全て導入済みだったため、nux-dextopから本体のみがインストールされました。
|
$ sudo yum install minidlna --enablerepo=epel,nux-dextop |
ちなみにminidlnaが依存しているパッケージ一覧はこちら。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
$ rpm -q --requires minidlna /bin/sh /bin/sh /bin/sh /bin/sh config(minidlna) = 1.1.6-1.el7.nux libFLAC.so.8()(64bit) libavformat.so.56()(64bit) libavformat.so.56(LIBAVFORMAT_56)(64bit) libavutil.so.54()(64bit) libavutil.so.54(LIBAVUTIL_54)(64bit) libc.so.6()(64bit) libc.so.6(GLIBC_2.11)(64bit) libc.so.6(GLIBC_2.14)(64bit) libc.so.6(GLIBC_2.15)(64bit) libc.so.6(GLIBC_2.2.5)(64bit) libc.so.6(GLIBC_2.3)(64bit) libc.so.6(GLIBC_2.3.4)(64bit) libc.so.6(GLIBC_2.4)(64bit) libc.so.6(GLIBC_2.7)(64bit) libc.so.6(GLIBC_2.8)(64bit) libexif.so.12()(64bit) libid3tag.so.0()(64bit) libjpeg.so.62()(64bit) libjpeg.so.62(LIBJPEG_6.2)(64bit) libogg.so.0()(64bit) libpthread.so.0()(64bit) libpthread.so.0(GLIBC_2.2.5)(64bit) libsqlite3.so.0()(64bit) libvorbis.so.0()(64bit) rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rtld(GNU_HASH) shadow-utils systemd-units systemd-units systemd-units rpmlib(PayloadIsXz) <= 5.2-1 |
設定ファイル(minidlna.conf)編集
コンフィグファイルの配置場所は/etc/minidlna.conf。編集したのは以下の通り。日本語コメントは私の補足。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
|
# port for HTTP (descriptions, SOAP, media transfer) traffic port=8200 #ストリーミングに使用するポート。コメントアウトして明示。 (略) # specify the user account name or uid to run as #user=jmaggard user=minidlna #ReadyMediaを実行するユーザ指定。ログインユーザで動かす必要がなければ、minidlnaインストール時に作成されるシステムユーザminidlnaを指定。 # set this to the directory you want scanned. # * if you want multiple directories, you can have multiple media_dir= lines # * if you want to restrict a media_dir to specific content types, you # can prepend the types, followed by a comma, to the directory: # + "A" for audio (eg. media_dir=A,/home/jmaggard/Music) # + "V" for video (eg. media_dir=V,/home/jmaggard/Videos) # + "P" for images (eg. media_dir=P,/home/jmaggard/Pictures) # + "PV" for pictures and video (eg. media_dir=PV,/home/jmaggard/digital_camera) #media_dir=/opt media_dir=A,/home/samba/share/02_voice #各メディアが保存されているディレクトリを指定。ディレクトリ名の前に「A,」などでメディアの種類を指定。Aが音楽、Vがビデオ、Pが写真。 (略) # set this if you want to customize the name that shows up on your clients friendly_name=DLNAServer(192.168.100.102) #DLNAクライアントに表示するサーバ名 # set this if you would like to specify the directory where you want MiniDLNA to store its database and album art cache db_dir=/var/cache/minidlna #minidlnaが使用するDBの場所。コメントアウトで明示。 # set this if you would like to specify the directory where you want MiniDLNA to store its log file log_dir=/var/log/minidlna #minidlnaのログを配置するディレクトリ。コメントアウトで明示 (略) |
ファイアウォール穴あけ
8200/tcpがストリーミングに利用するポート。1900/udpがSSDP(Simple Service Discovery Protocol)で使用するポート。UPnP(Universal Plug and Play)というプロトコルを使ってクライアントが自動的にDLNAサーバを探しに行くのに使います。
|
$ sudo firewall-cmd --permanent --zone=myfirewall --add-port=8200/tcp $ sudo firewall-cmd --permanent --zone=myfirewall --add-port=1900/udp $ sudo firewall-cmd --reload |
ReadyMedia(MiniDLNA)のDB作成
以下のコマンドでメディアをReadyMediaに登録します。同時に音楽のサムネイルの登録なんかもやってくれている様子。パーミッションが面倒なのでsudoは着けないこと。一般権限のログオンユーザで実行することで、最終的にminidlna.conf指定のminidlnaユーザでDBを作成できるようにします。
20181026修正。一般権限のログオンユーザでこのコマンドを実行すると、そのユーザ名が所有者となったDBやサムネイルが作成されるようです(試してから書けよ……)。これらのファイルはrw-r–r–です。そのため、一般権限のログオンユーザがDB作成コマンドを実行すると、minidlnadを動かすminidlnaユーザがこれらのファイルに対して書き込み(更新)できなくなります。そのため、minidlnaユーザで実行するように変更しました。また、後述の通り、この-RコマンドはDB再作成のみならず実際にdlnaサーバプロセスとして起動するため、ログファイル等も同時にminidlnaユーザ所有のファイルとして作成されます。
|
$ sudo -u minidlna minidlnad -R |
再作成が終わったら、一度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)起動&自動起動
|
$ sudo systemctl start minidlna $ sudo systemctl enable minidlna |
クライアントからの接続確認
DLNAクライアントアプリはいろいろありますが、私はAndoroidから接続するのにDMSエクスプローラを利用しました。インストールし、CentS7と同一NWにつないだ状態で起動すると、自動的にDLNAサーバを探しにいってくれます。

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

おわり。これで寝るときにWalkmanの電池を消耗せず、かつお古のスマホにわざわざデータを保管することなく、音楽をお古のスマホから聞けるようになりました。音質は……微妙。ノイズが。今後の課題にします。
→機器や環境をいろいろ変えて切り分けましたが、ホワイトノイズや音声再生時ノイズが出るのは、お古のスマホのBluetoothのコーデックがSBCにしか対応していないこと(これは有線イヤホンで一応対応可能)と、本体が高ヘルツ/ビットレートの音源に対応していないこと(192kHz/24bitなど。これはどうしようもない)なためなような気がしてきました。うーん……。
参考