lightMPD/upnpgw は lightMPDをupnpのレンダラーとして動作させるためのパッケージです。 PC Engines の apu1,apu2 で動作します。
UPnP動作時にはmpdとメディアサーバー間にキャッシュサーバーを配置し、より高音質化を目指しました。
UPnPについて
オーディオ愛好家にはDLNAという呼び方の方が馴染みがあると思いますが、、最近はUPnPという呼び方が一般的のようです。
UPnP,DLNAの関係に関してはここを参照して下さい。
要約すると、UPnPという技術を使ったオーディオ用途向けのガイドラインがDLNAのようです。
UPnPでのオーディオ再生環境は以下の3つのコンポーネントが必要です。
この文書を読むにあたって
この文書はlightMPD/upnpgwの説明書ですが、lightMPDの知識を必要とします。
lightMPDについては下記を参照して下さい。
また、lightMPD/upnpgwの説明には下記の用語を使用します。
ファイル名は /ディレクトリ/ディレクトリ...../ファイル のように表記します。"/"はディレクトリの区切りです。
ドライブ名はありませんが、lightMPDをインストールしたドライブを各自で補完して下さい。
例えば、D:ドライブにインストールした場合
/lightMPD/conf/lightmpd.conf-standalone
の表記は Windowsでは
D:¥lightMPD¥conf¥lightmpd.conf-standalone
になります。
2. 仕様
mpdのロードモジュール名はmpd-0.19.18-native-dsd-upnpで、mpd-0.19.18をベースに以下のパッチを当ててあります。
さらにlightMPDの独自の機能を有してます。
mpd を upnp化するに当たってupmpdcliというプログラムを利用しています。
upmpdcliはUPnPのプロトコルをmpdのプロトコルに変換するプログラムです。upmpdcliを使う事によってmpdをUPnPのレンダラーにする事ができます。
upmpdcliについてはここを参照して下さい。
polipoはHTTPサーバーからのデータをキャッシュします。
upmpdcliを使ってmpdをUPnPのレンダラーにした場合、mpdはUPnPメディアサーバーからHTTPによりデータを取り出します。
lightMPD/upnpgwではUPnPレンダラーとしてmpdを使う場合にpolipoを介して楽曲データをメモリ内にキャッシュする事ができます。
polipoのキャッシュデータはメモリ上に置かれ、領域の大きさはlightmpd.confで指定できます。
キャッシュメモリの上限は1Gバイトです。
本来のpolipoはローカルのディスクへのキャッシュ機能も有してますが、lightMPD/upnpgwではこの機能を削除してあります。
lightMPD/upnpgwは下記の使い方ができます。
apu1またはapu2 1台で UPnPレンダラーになります。
図-1 にスタンドアローンのUPnPレンダラーの構成図を示します。
図-1 スタンドアローンのUPnPレンダラー
従来のlightMPDに
が組み込まれています。
キャッシュサーバーは設定により外す事も可能です。
mpdはメディアサーバーからHTTPによりデータを受信します。したがって、メディアサーバーをマウントする必要がありません。
v1.0.2以前のlightMPDをホームネットワークから分離します。
図2にオーディオ用ネットワークルーターの構成図を示します。
図2 オーディオ用ネットワークルータ
lightMPD/upnpgwをインストールしたapuのeth0をホームネットワークに接続し、eth1にlightMPDを接続します。
このような構成を取ることによりlightMPDはホームネットワークから分離され、lightMPD にはホームネットワークから不要なパケットが流れ込まなくなります。
ホームネットワークに繋がっている機器が多い環境では効果的です。
lightMPD/upnpgwはルータとして機能します。
ホームネットワー上の機器からlightMPDにアクセスする場合はIP MSQUERADE機能により行います。
逆に、lightMPDからホームネットワーク上のNASにアクセスする場合はNAT機能により行います。
v1.0.2以前のlightMPDをupnpレンダラーにすると供にホームネットワークから分離します。
図3にUPNPアダプターの構成図を示します。
図3 UPNPアダプター
接続はオーディオ用ネットワークルーターと同じですが、UPnPレンダラー化に必要なupmpdcli,polipoがmpdと分離されます。
DLNAコントローラーからのパケットはupmdcliがDLNA メディアサーバーからのデータはpolipoが中継するので、IP MASQUERADE,NAT機能は使いません。
polipoを使わない場合はNAT機能にりDNLAメディアサーバーとの通信を行います。
apu1/2 を2台使い、 NASまたはDLNAサーバーからのデータとそれ以外のデータを分離します。
apu同士の接続には2本のイーサーネットを使います。
図4,5にNASモード、UPnPレンダラーでのイーサーネットを分離した場合の構成図を示します。
この機能を使うためにはlightMPD側にその為の機能が必要です。この機能はlightMPD v1.1.0からサポートします。
図4 イーサーネットの分離(NASモード)
図5 イーサーネットの分離(UPnPモード)
bbbの用にOTGポートを持っている機器は図6,7のような構成も可能になります。
図6 USB OTG ポートを使ったイーサーネットの分離(NASモード)
図7 USB OTGポートを使ったイーサネットの分離(UPNPレンダラー)
イメージファイル
パッケージ
rootイメージ
rootイメージの入れ替えは解凍して出来たファイルを/boot/initrd-lightmpd-64にコピーして下さい。
BOOTイメージの書き込み
パッケージのインストール
lightmpd.confの編集については「5.設定」で説明します。
パスワード
このバージョンからrootにパスワードを設定しました。
コンソールからまたはtelnetでloginする場合
loginid root
passwd lightmpd
を使用して下さい。
設定は/lightMPD/lightmpd.conf を編集する事で行います。
/lightMPD/confディレクトリに使用目的毎のlightmpd.confを用意しました。
設定手順は以下のようになります。
lightmpd.confの変更の他に/boot/grub/menu.lstを変更する必要もあります。
/boot/grub/menu.lstの編集については
を参照して下さい。
ブートデバイスの指定(menu.lstの補足)
lightmpdのブートデバイスを/boot/grum/menu.lstのkernelオプションのlightmpd.bootdevで指定します。
lightmpdではブートデバイスとして下記の物を指定できます。
apu1,apu2のUSBメモリとapu1のSDメモリはSCSI DISKと認識されます。そのデバイス名は sda1,adb1,... になります。
デバイス名はfirmwareやUSBポートに接続されているデバイスによって一意に決まらない場合があります。
このような場合、ブートデバイスのデバイス名を特定するのが困難になります。
この問題を解決する為にデバイスの指定方法にディスクラベルを使えるようにしました。
lightmpd.bootdev=LABEL=LIGHTMPD
とするとディスクラベルが"LIGTMPD"のディスクをブートデバイスとして指定した事になります。ディスクラベルを使ったほうがより確実にブートデバイスを指定する事ができます。
ディクスラベルを使う場合はディスクラベルの重複(同一のディスクラベルを持つディスクが複数存在する)が無いようにして下さい。
ディスクラベルはWindows 等でのディスク名の事です。ディスクラベルの設定・変更はWindows等を使って下さい。
5-1 スタンドアローンのUPnPレンダラーとして使用する場合
「3-1. スタンドアローンのUPnPレンダレラー」で説明したように、apu1またはapu2をUPnPレンダラーとして使用します。
lightmpd.confの編集
この場合のlightmpd.confの雛形は /lightMPD/conf/lightmpd.conf-standalone です。
lightmpd.conf-standalone
[network]
interface=eth0
address=192.168.0.0
gateway=192.168.0.0
netmask=255.255.255.0
nameserver=192.168.0.0
domain=mydomain.jp
[ntp]
server=192.168.0.0
ntpd=no
timezone=Asia/Tokyo
[mpd]
load_module=mpd-0.19.18rt-native-dsd-upnp
[cpuaffinity]
# 0 normal
# 1 cpu1: usb irq handler
# 2 cpu1: usb irq handler
cpu2,cpu3: mpd
type=2
[irqpriority]
setdefault=no
ehci_hcd:usb1=FIFO:99
[upmpdcli]
enable=yes
upnpiface = eth0
mpdhost=localhost
mpdport=6600
friendlyname=UpLightMpd
ohproductroom=UpLightMpd
openhome = 1
ohmetapersist = 1
logfilename=/var/log/upmpdcli.log
loglevel = 3
[polipo]
enable=yes
#
proxyAddress = 0.0.0.0
allowedClients = 127.0.0.1
#
chunkHighMark = 1024
chunkLowMark = 256
chunkCriticalMark = 768
objectHighMark = 2048
#
dnsQueryIPv6 = no
cacheIsShared = false
dnsUseGethostbyname = yes
disableConfiguration = true
disableIndexing = true
disableLocalInterface = true
[webconsole]
# yes | no
# start page: http://thishost:${port}/index.html
enable=yes
port=9000
[telnetd]
# yes | no
enable=yes
port=23
雛形ファイルに対して下記のセクションを編集します。
1. [network],[ntp]セクション
これはlightMPDをお使いの方はlightMPDの設定と同じにして下さい。
2.[upmpdcli]セクション
upmpdcliの設定を行います。各パラメータはupmpdcliのパラメータそのものです。
パラメータが沢山ありますが、下記のもの以外変更する必要はありません
UPnPコントロールポイントでレンダラー一覧に表示される名前です。
デフォルトは"UpLightMpd"です。
変更する場合はfriendlyname,ohproductroomに同じ値を設定して下さい。
3. [polipo]セクション
キャッシュサーバーの設定を行います。
キャッシュサーバーを使わない場合は
enable = no
として下さい。
キャッシュの大きさの指定は下記のパラメータで行います。
polipoの動作は、キャッシュ内のデータがchunkCriticalMarkに達したときにキャッシュデータがchunkLowMarkになるまで古いデータを削除します。
これらのパラメータはキャッシュのフローを制御します。音質に関係しそうなパラメータですのでいろいろ試したくなりますが、不適切な値を設定すると音切れなどが発生するなどの問題を引き起こす場合があります。設定の目安としては chunkCricicalMarkはchunkHighMarkの2/3程度、chunkLowMarkはchunkHighMarkの1/3程度にして下さい。
その他のパラメータは変更しないで下さい。
mpd.confの編集
mpdをUPnPレンダラーとして使用する場合は、
input {
plugin "curl"
proxy "127.0.0.1:8123"
}
をmpd.confに追加して下さい。
キャシュサーバーを使わない場合は
input {
plugin "curl"
}
とします。
kernelパラメータ
/boot/grub/menu.lstのkernelは下記のように設定して下さい。
kernel /boot/bzImage-4.6.5rt10-64 root=/dev/ram0 ro console=ttyS0,115200n8 ramdisk_size=98304 rootfstype=romfs rootdelay=5 clocksource=tsc idle=poll processor.max_cstate=1 isolcpus=1 nohz_full=1 rcu_nocbs=1 lightmpd.systype=apu1 lightmpd.bootdev=/dev/sda1
lightmpd.systype,lightmpd.bootdevはお使いのシステムに合わせて変更して下さい。
5-2. オーディオ用ネットワークルータ
図2に示すように、従来のlightMPDまたは他のネットワークプレーヤーをhomeネットワークから分離します。
5-2-1. 接続
lightMPD/upnpgwではethを2ポート使います。
5-2-2. lightmpd/upnpgwのlightmpd.confの編集
オーディオ用ネットワークルータとして使う場合のlightmpd.confの雛形は/lightMPD/conf/lightmpd.conf-mpdgwです。
lightmpd.conf-mpdgw
[network]
interface=eth0
address=192.168.0.0
gateway=192.168.0.0
netmask=255.255.255.0
nameserver=192.168.0.0
domain=mydomain.jp
[ntp]
server=192.168.0.0
ntpd=no
timezone=Asia/Tokyo
[network:player]
interface=eth1
address=10.0.0.1
netmask=255.255.255.252
[cpuaffinity]
type=0
[irqpriority]
setdefault=no
[telnetd]
# yes | no
enable=yes
port=23
[ympd]
enable=no
host=10.0.0.2
webport=8080
mpdport=6600
[nat]
masquerade=network:player
dnsforwarding=yes
ntpforwarding=yes
8023=10.0.0.2:23
6600=10.0.0.2:6600
80=10.0.0.2:80
9000=10.0.0.2:9000
雛形ファイルに対して下記のセクションを変更します。
1. [network]セクションでhome ネットワークと接続するethポートの設定を行います。
2. [network:player]セクションでmpdが稼働する装置と接続するethポートの設定を行います。
3. [nat]セクションではgatewayの設定を行います。
雛形ファイルは以下のような設定になっています。
この設定例はlightMPD/upnpgw上にmpd,webサーバー,webコンソールが動いていない場合です。
これらを動作する場合は下記のようにポートが重複しないようにして下さい。
5-2-3. player側の設定
player側のネットワークをlightMPD/upnpgwの[network:player]に合わせて下さい。
playerがlightMPDの場合は、lightmpd.confの[network]の address,netmask,gatewayを下記の通りに変更して下さい。
[network]
interface=eth0
address=10.0.0.2 <---- 変更
netmask=255.255.255.252 <---- 変更
gateway=10.0.0.1 <---- 変更
nameserver=192.168.0.0
domain=mydomain.jp
domainはlightMPD/upnpgwの設定値と同じにして下さい。
nameserverはlightMPD/upnpgwのdnsforwrdingを
にして下さい。
図3に示すように、従来のlightMPDまたは他のネットワークプレーヤーをhomeネットワークから分離するとともに、UPnPレンダラーとして動作します。
5-3-1. 接続
lightMPD/upnpgwではethを2ポート使います。
ネットワークプレーヤーはmpdである必要があります。lightMPDに限らず"input plugin"に"curl"を組み込んだmpdなら使用する事ができます。
5-3-2. lightmpd/upnpgwのlightmpd.confの編集
UPnPアダプターとして使う場合のlightmpd.confの雛形は/lightMPD/conf/lightmpd.conf-upnpgwです。
lightmpd.conf-upnpgw
[network]
interface=eth0
address=192.168.0.0
gateway=192.168.0.0
netmask=255.255.255.0
nameserver=192.168.0.0
domain=mydomain.jp
[ntp]
server=192.168.0.0
ntpd=no
timezone=Asia/Tokyo
[network:player]
interface=eth1
address=10.0.0.1
netmask=255.255.255.252
[cpuaffinity]
type=0
[irqpriority]
setdefault=no
[telnetd]
# yes | no
enable=yes
port=23
[upmpdcli]
enable=yes
upnpiface = eth0
mpdhost=10.0.0.2
mpdport=6600
friendlyname=UpLightMpd
ohproductroom=UpLightMpd
openhome = 1
ohmetapersist = 1
logfilename=/var/log/upmpdcli.log
loglevel = 3
[polipo]
enable=yes
#
proxyAddress = 0.0.0.0
allowedClients = 10.0.0.2
#
chunkHighMark = 1024
chunkLowMark = 256
chunkCriticalMark = 768
objectHighMark = 2048
#
dnsQueryIPv6 = no
cacheIsShared = false
dnsUseGethostbyname = yes
disableConfiguration = true
disableIndexing = true
disableLocalInterface = true
[nat]
masquerade=network:player
dnsforwarding=yes
ntpforwarding=yes
8023=10.0.0.2:23
雛形ファイルに対して下記のセクションを変更します。
1. [network]セクションでhome ネットワークと接続するethポートの設定を行います。
2. [network:player]セクションでmpdが稼働する装置と接続するethポートの設定を行います。
3. [nat]セクションではgatewayの設定を行います。
雛形ファイルは以下のような設定になっています。
5-3-3. player側の設定
1. ネットワークアドレスの設定
player側のネットワークをlightMPD/upnpgwの[network:player]に合わせて下さい。
playerがlightMPDの場合は、lightmpd.confの[network]の address,netmask,gatewayを下記の通りに変更して下さい。
[network]
interface=eth0
address=10.0.0.2 <---- 変更
netmask=255.255.255.252 <---- 変更
gateway=10.0.0.1 <---- 変更
nameserver=192.168.0.0
domain=mydomain.jp
domainはlightMPD/upnpgwの設定値と同じにして下さい。
nameserverはlightMPD/upnpgwのdnsforwrdingを
にして下さい。
2. mpd.confの編集
mpd.confに下記を追加します。
input {
plugin "curl"
proxy "10.0.0.1:8123"
}
"10.0.0.1"はlightMPD/upnpgwのIPアドレスです。キャッシュはlightMPD/upnpgwに置かれます。
キャシュサーバーを使わない場合は
input {
plugin "curl"
}
を追加します。
3. NASのマウント
UPnPメディアサーバーを使うのでNASのマウントは必要ありません。
mpd.confのmusic_directory,playlist_directory,db_file,sticker_fileは指定しなくても構いません。
lightMPDを使う場合は
[mpd]
load_module=mpd-0.19.x <-- 使っているmpdを指定して下さい
sticker_file=/tmp/sticker.sql
db_file=/tmp/tag_cache
log_file=/dev/null
5-4 upnpplayer
lightMPD/upnpgwから余分な機能を省いてplayer専用としました。upnpgwと接続して使う事が前提になります。単体では動作しません。
インストールは4.2 インストール を参照して下さい。
lightmpd.conf,mpd.confはlightmpd.conf-upnpgw-nasgatgeに合わせてあります。lightmpd.conf-upnpgw-nasgateを使っている場合はそのまま使う事ができます。
kernel
kernelはpreempt-rtカーネルの他xenomaiを用意しました。各OSのバージョンは
になります。
kernelの切換は/boot/grub/menu.lstで行います。
mpd
mpdのバージョンはmpd-0.20.8rtです。
ダウンロード