BubbleUPnPでリモート再生を含めたDLNAな音楽ネットワークの構築

Posted by 雅楽斎 on Saturday, July 13, 2019

TOC

BubbleUPnPで家庭内音楽ライフ

今回はAndroid用のソフトであるBubbleUPnPを使った事例を紹介します。BubbleUPnPはBubbleSoftが提供する音楽再生ソフト1の一種で、359円で別途ライセンスを購入すると広告表示なし等の有償機能がアンロックされるタイプのアプリです。ライセンスを購入しなくてもこの記事に記載するDLNAな音楽ネットワークは構築できますのでぜひ試していただきたいですね。

DLNAの用語(デバイスクラス)の定義

参考:DMC? DMRって?、DLNAネットワークオーディオ“再入門”

DLNAではデバイスクラスという機能を持つ役割が定義されています。

DLNA 1.0で定義

DMS: Digital Media Server

コンテンツを保持、データを送信する機能

DMP: Digital Media Player

DMSのコンテンツを受け取って再生する機能

DLNA1.5で定義

DMC: Digital Media Controller

DMSの持っているコンテンツをコントロールする機能

DMR: Digital Media Renderer

指示されたコンテンツを再生する機能

BubbleUPnPで構築するDLNAネットワーク

前提:一般的な音楽再生におけるユースケース

それではまず大前提として、一般的な音楽再生のユースケースを確認しましょう。

sequenceDiagram title: 一般的な音楽再生 participant a as Human
Being participant b as Music
Player a->>b: 再生 b-->>a: ♪ Note over a,b: 音楽再生

今日の登場人物一覧

  • ぼく(音楽を聴く人)
  • ぼくが操作するAndroid→DMC
  • 再生したい曲にDLNAとしてアクセスできるAndroid→DMS
  • 曲を再生するAndroid→DMR

ここに登場するAndroidには全てBubbleUPnPをインストールします。また、これらDMC、DMS、DMRは全て同一のAndroid端末でも問題ありません。

BubbleUPnP設定

初期起動画面はこうなっています。ナビゲートの案内が表示されるのでタップしていくタイプです。

初期起動画面

DMRにするAndroidの設定

音を出すAndroidの設定をします。

初期画面左下のMoreをタップし、表示されるメニューの⚙(Settings)をタップします

More→Settingsをタップ

SettingsのLocal Rendererをタップします。

Local Renderer

Allow remote controlをタップしたら設定終了です。

Allow remote control

DMSにするAndroidの設定

DMRの場合と同様、初期画面の左下のMoreをタップし、表示されるメニューの⚙(Settings)をタップします。(画像省略)

SettingsのLocal and Cloudをタップします。

Local and Cloud

Advertise on LANとEnable remote browsingをチェックします。LAN上の端末からDLNA経由で画像ファイル、音楽ファイル、動画ファイルが見えるようになるので、プライベートなファイルがある場合は接続元を絞る等の設定を追加ですることをお勧めします。

Enable remote browsing

なお、タップ時にコンテンツにアクセスできるようになるという通知のダイアログが表示され、CONFIGURE MEDIA ALLOWED FOR REMOTE BROWSINGをタップすることで公開するコンテンツを選ぶ画面にも飛びます。

ダイアログ

公開コンテンツ設定

DMR(曲を再生するAndroid)の指定

実際に曲が流れるDMRを指定します。上の画像で白抜きにされている部分がDMRの指定部分になり、通常は「Local Renderer」が指定されていますが、他にDMRが見つかった場合はボタンをタップした際に以下のようになります。別の端末で撮っているので背景が異なりますがご了承ください。

DMRの指定

各DMRの右の…をタップすると、InfoとSettingが選択できるようになってInfoをタップするとデバイスの詳細が表示されます。DMRに設定したいRendererをタップすることでDMRが切り替わります。

…をタップ

Infoで表示される情報

DMS(再生する曲を格納しているAndroid)の指定

上記の初期画面右下にある「Library」をタップすると、どの曲を再生するか選択する画面になります。Libraryの左上でLocal and Cloudの右にある▼をタップすると「Select library…」と「Local and Cloud」を選べるようになります。

Local andCloud

「Select library…」をタップするとDMSの指定画面になるので、DMSとして使用したいものをタップします。これで指定は完了です。

DMS選択

設定が終わって再生すると、操作しているAndroidでもファイルがあるAndroidでもないAndroidから音楽が流れる。いわば音楽再生のリモコン化ができるようになります。音楽再生に特化したなどの一芸に秀でたAndroidがあればそれを活かすことが出来るわけですね。

sequenceDiagram title: DLNAでDMCを操作するとDMRで曲が再生 participant a as ぼく participant dmr as DMR participant dmc as DMC participant dms as DMS a->>dmc: 再生 dmc->>dms: 曲取得 dms->>dmr: 曲データ配信 dmr-->>a: ♪ Note over a,dmr: 音楽再生

おまけ:Raspberry Piに格納されている音楽を手元で聞く

ReadyMedia(旧:minidlna)をセットアップ

うちにあるRaspberry PiはHDD繋げてるので、コンテンツを置いてDMSをインストールしたらDMRやDMPで再生できるようになるよね・・・ということで、UbuntuをインストールしているRaspberry Pi2/3にReadyMediaをインストールしてDMSとして使えるようにします。

# apt-get install minidlna

daemon確認

# systemctl status minidlna.service
● minidlna.service - LSB: minidlna server
   Loaded: loaded (/etc/init.d/minidlna; generated)
   Active: active (running) since Sat 2019-07-13 01:06:19 UTC; 11min ago
     Docs: man:systemd-sysv-generator(8)
    Tasks: 2 (limit: 1055)
   CGroup: /system.slice/minidlna.service
           └─32083 /usr/sbin/minidlnad -f /etc/minidlna.conf -P /run/minidlna/mi
(略)
# systemctl is-enabled minidlna.service
minidlna.service is not a native service, redirecting to systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install is-enabled minidlna
enabled

ということで、systemdネイティブのdaemonではないですがdaemonとして動いていて自動起動も有効になっています。設定の変更は以下の通りです。

# diff -u /etc/minidlna.conf{.org,}
--- /etc/minidlna.conf.org      2019-07-13 01:22:12.218029513 +0000
+++ /etc/minidlna.conf  2019-07-13 01:31:46.483088272 +0000
@@ -23,7 +23,8 @@
 #   * "P" for pictures (eg. media_dir=P,/var/lib/minidlna/pictures)
 #   * "V" for video    (eg. media_dir=V,/var/lib/minidlna/videos)
 #   * "PV" for pictures and video (eg. media_dir=PV,/var/lib/minidlna/digital_camera)
-media_dir=/var/lib/minidlna
+media_dir=A,/mnt/hdd/ippan/nextcloud/SNAP_COMMON/admin/files
+#media_dir=/var/lib/minidlna

 # Set this to merge all media_dir base contents into the root container
 # (The default is no.)
@@ -92,7 +93,7 @@
 #model_number=

 # Automatic discovery of new files in the media_dir directory.
-#inotify=yes
+inotify=yes

 # List of file names to look for when searching for album art.
 # Names should be delimited with a forward slash ("/").

こちらの変更箇所は

  • media_dirに/mnt/hdd/ippan/nextcloud/SNAP_COMMON/admin/filesを指定2
  • inotifyで更新を検出する

です。後者についてはdaemon起動時に数字が小っちゃいと言われるのですが実害が出たら書き換えようかと。

# systemctl restart minidlna.service

サービスを再起動して、ブラウザから http://192.168.1.130:8200/ にアクセスしてみると動作状況が表示されます。これはうれしいですね。

Media library
Audio files0
Video files0
Image files0

ドーン!1ファイルも認識されてない。ディレクトリ読めてないのかしら。serviceってrootで上がるんじゃないの?念の為minidlnaプロセスをkillしてsystemctl start minidlna.serviceしてから確認したら…

$ ps -ef | grep minidlna
minidlna  5453     1  0 01:54 ?        00:00:00 /usr/sbin/minidlnad -f /etc/minidlna.conf -P /run/minidlna/minidlna.pid -r
root      5558 31072  0 01:55 pts/0    00:00:00 systemctl status minidlna.service
ubuntu    5836  5806  0 01:56 pts/3    00:00:00 grep --color=auto minidlna

はい出たminidlnaユーザー。設定ファイルをもう一回見てみると。

# Specify the user name or uid to run as (root by default).
# On Debian system command line option (from /etc/default/minidlna) overrides this.
#user=minidlna

コメントアウトされてるからminidlnaユーザーじゃないと思っていたらDebianシステムでは/etc/default/minidlnaの設定値で上書きされるとのこと。だもんで編集。

# diff -u /etc/default/minidlna{.org,}
--- /etc/default/minidlna.org   2019-07-13 02:06:38.429802550 +0000
+++ /etc/default/minidlna       2019-07-13 02:07:12.213394202 +0000
@@ -15,7 +15,7 @@
 #LOGFILE="/var/log/minidlna.log"

 # User and group the daemon should run as
-#USER="minidlna"
+USER="root"
 #GROUP="minidlna"

 # Additional options that are passed to the daemon

改めて再起動。

# systemctl restart minidlna.service

BubbleUPnPから接続

DMSとして利用するので検索します。

DebianロゴのUbuntu…

このDebianロゴのubuntu3のInfoを見てみると

対応フォーマットが狭い!

対応フォーマットがだいぶ狭いです。OPUSがない。画像もgifとpngがない。よく考えたらうちのNASはReadyNASなのでminidlnaと同じものは元々使ってたものと機能的に同じですね。

OPUSについてはissueが上がってて、更にpatchもあるのに取り込まれてないという現状であることを確認。うーん。

UbuntuでのDLNAソフトについて

今回試したReadyMedia以外に代表的なDLNAソフトとしてKodiがあります。KodiはLibreELEC等のRaspberry PiのOSとしてビルトインするほど著名でユーザーも多いのですが、私の家ではRaspberry Piはheadless(画面なし)で運用していることと、KodiはDMCとしての側面が強いこともあり今回はReadyMediaをインストールしています。インストールするバイナリのサイズがReadyMediaの場合14MB程度なのに対して、ReadyMediaインストール済みの状態からKodiをインストールするだけでも57MB必要になるなど重量級なので、今回は採用を見送りました。


  1. 音楽だけでなく動画の再生も可能ですが、その場合は外部の動画プレイヤーを呼び出す形になっています。 [return]
  2. Nextcloudのディレクトリです [return]
  3. DMSとして表示する時の名前については設定ファイルで変更可能です。 [return]

comments powered by Disqus