« ◆◆ hiClass:C++基礎クラスライブラリ ◆◆ | トップページ | miniDLNA改:Artistの取り扱い »

RasPiでDLNAサーバー(iTunesから移行)

# 2020/05/25
この記事で用いたminidlna-1.1.5は安定度に問題があり、実運用には至りませんでした。
その後、miniDLNA1.2.1を用い、
◇RaspiにminiDLNAをソースから入れる
◇miniDLNAでジャンルにalbum層追加
の手続きにより運用可能となりました。


備忘録

Raspberry pi 3にDLNAサーバーをソースからビルドする形で導入しました。

その際のメモの断片を載せます。

その後若干の改造を行いメモ、ソースを ◆miniDLNA改、仮リリースに置きました。

 概要

装置はRaspberryPi3です。 ◆RaspberryPi3導入:日本語設定,ネットワーク設定まで 参照

dlnaサーバは"minidlna"で、おおよそ

  1. 本体(minidlna)ソースをダウンロード
  2. 依存ライブラリをダウンロード
  3. ./configureを実行し環境情報を取り込み
  4. make でビルド
  5. sudo make installで基本のインストールを行い
  6. 設定ファイルなどを実行環境にコピー
  7. コンテンツの配置
  8. 設定ファイル記述
  9. サービス開始
という手順を取ります。

コンテンツはiTunesでタグづけしたAAC(m4a)群で、15429曲/50.1日/70.95GB規模のものです。 128GのUSBメモリに入れてあります。

 1.本体(minidlna)ソースをダウンロード

wgetコマンドを使い
http://downloads.sourceforge.net/project/minidlna/minidlna/1.1.5/minidlna-1.1.5.tar.gz
をダウンロードします。
下の記述ではダウンロード先が2行になっていますが1行に纏めて実行する必要があります。

=== minidlnaソースのダウンロード ===
wget http://downloads.sourceforge.net/project/
minidlna/minidlna/1.1.5/minidlna-1.1.5.tar.gz

// 展開・別名づけ
tar -xzvof minidlna-1.1.5.tar.gz
ln -s minidlna-1.1.5 minidlna

「逆スラッシュで行分割」は往々にして失敗しますので、必ず1行にして実行の事。

 2.依存パッケージのダウンロード

次のような手順で依存パッケージをダウンロードしました。

=== 依存パッケージの導入 ===
$ sudo apt-get update
$ sudo apt-get build-dep minidlna
$ sudo apt-get install gettext
$ sudo apt-get install libavutil-dev
$ sudo apt-get install libavcodec-dev
$ sudo apt-get install libavformat-dev
$ sudo apt-get install libjpeg-dev
$ sudo apt-get install libsqlite3-dev
$ sudo apt-get install libexif-dev
$ sudo apt-get install libid3tag0-dev
$ sudo apt-get install libvorbis-dev
$ sudo apt-get install libflac-dev
なお、この手順は./configureおよびmakeで出た問題を順次解決していった結果となっています。

apt-get installは後ろにターゲットを複数書けるので下のターゲット並びをinstall の後ろにコピペして実行するのが 漏れを防ぐには良いかも。

libavutil-dev libavcodec-dev libavformat-dev libjpeg-dev
libsqlite3-dev libexif-dev libid3tag0-dev libvorbis-dev libflac-dev

 3../configure実行

展開したフォルダに移動し、./configureを実行します。

// configure実行
$ cd minidlna
$ ./configure
ここでライブラリが見つからない(主にヘッダが見つからないというエラーになる)と 言われた場合
 sudo apt-get install ライブラリ名-dev
で導入し、再び./configureを行います。

 4. make実行

makeコマンドを実行します。

// make実行
$ make

「2.依存パッケージのダウンロード」にある
 gettext
のapt-getはこの段階で出たエラーに対処したものです。

今回はmakeではそれ以外に問題は出ていません。

 5. install実行

make installをroot権限で実行します。
// make install実行
$ sudo make install

これだけではサービス実行のための準備は足りないことに留意の事

 6. 設定ファイルなどを実行環境にコピー

設定用ファイルなどを実行環境にコピーし、自動起動の設定を行います。

// 設定ファイルなどを実行環境にコピー
$ sudo cp minidlna.conf /etc/
$ sudo cp linux/minidlna.init.d.script /etc/init.d/minidlna
$ sudo chmod 755 /etc/init.d/minidlna
$ sudo update-rc.d minidlna defaults

 7. コンテンツの配置

今回はUSBメモリ上に置かれたWindowsのiTunesのデータを使います。

USBメモリは挿しただけでマウントされていました。

$ df
ファイルシス   1K-ブロック     使用   使用可 使用% マウント位置
/dev/root         13564680  4667180  8185412   37% /
devtmpfs            494048        0   494048    0% /dev
tmpfs               498364        4   498360    1% /dev/shm
tmpfs               498364     6972   491392    2% /run
tmpfs                 5120        4     5116    1% /run/lock
tmpfs               498364        0   498364    0% /sys/fs/cgroup
/dev/mmcblk0p6       64366    19974    44392   32% /boot
tmpfs                99676        0    99676    0% /run/user/1000
tmpfs                99676        0    99676    0% /run/user/109
tmpfs                99676        4    99672    1% /run/user/1002
/dev/sda1        125001696 77535136 47466560   63% /media/pi/Lexar
/dev/mmcblk0p5       30701      438    27970    2% /media/pi/SETTINGS

今回音楽データのフォルダ名は次のように空白を含んでおり、これを

/media/pi/Lexar/iTunes/iTunes Music/Music
空白を含まない
/media/pi/Lexar/iTunes/iTunes_Music/Music
のような形変更しました。
minidlnaが内部で使用しているCの標準関数searchdir()が対応していないためです。
後述の/etc/minidlna.confに書く必要がないフォルダの名前は問題がない可能性もあります。

次のようなフォルダ構成になっています。

/media
   /pi
      /Lexar
         /iTunes
            /iTunes_Music
               /Music
                  /Abbado_Wiener Phil_
                    /交響曲 1番、4番 _Abbado_Wiener Phil_
                       /01 No,1 I-Adagio Molto - Allegro con.m4a
                       /02 II-Andante cantabile con moto.m4a
                       ...
                    /交響曲 3番 _Abbado_Wiener Phil_
                       /01 Part I 1st movement Kraftig. Ents.m4a
                       /02 Part I_ 1st movement_ Langsam. Sc.m4a
                       ...
                    ...
                  /Academy of St.Martin
                    ...
                  ...

 playlistの配置

playlist(m3uファイル)はオーディオデータのベースとなるフォルダ(ここではMusic)の下に置けば参照されます。
m3u内でのファイル記述をベースとなるフォルダ(ここではMusic)からの相対にします。
フォルダを階層化することは可能でその場合でもm3uの記述はベースとなるフォルダ(ここではMusic)からの相対にします。

今回は/media/pi/Lexar/iTunes/iTunes_Music/Musicの下にm3uRELというフォルダを 作成し、m3uファイルを置きました。

/media
   /pi
      /Lexar
         /iTunes
            /iTunes_Music
               /Music
                  /m3uREL
                     Bach-Mozart.M3U
                     カラヤン60.M3U
                     ...

m3uファイルの中身を載せます。

#EXTM3U
#EXTINF:1,無音 - =Bach=ソロバイオリン曲集 ;VICTORIA MULLOVA(Vn)
..\..\..\iTunes\iTunes Music\Music\無音\無音\01 =Bach=ソロバイオリン曲集 _VICTORIA MULLOVA.m4a
#EXTINF:348,ソロバイオリン曲集 ;VICTORIA MULLOVA(Vn) - Partita No. 1 h-moll, BWV 1002 - Allemanda,
..\..\..\iTunes\iTunes Music\Music\Vn. VICTORIA MULLOVA\ソロバイオリン曲集 _VICTORIA MULLOVA(Vn)\01 Partita No. 1 h-moll, BWV 1002 -.m4a
#EXTINF:170,ソロバイオリン曲集 ;VICTORIA MULLOVA(Vn) - - Double
..\..\..\iTunes\iTunes Music\Music\Vn. VICTORIA MULLOVA\ソロバイオリン曲集 _VICTORIA MULLOVA(Vn)\02 - Double.m4a
少し複雑な相対記述となっていますが、これはオリジナルのm3uがMusicとは異なる場所に配置してあったからです。
本来は
..\..\..\iTunes\iTunes Music\Music\Vn. VICTORIA MULLOVA\ソロバイオリン曲集 _VICTORIA MULLOVA(Vn)\01 Partita No. 1 h-moll, BWV 1002 -.m4a
でなく、
Vn. VICTORIA MULLOVA\ソロバイオリン曲集 _VICTORIA MULLOVA(Vn)\01 Partita No. 1 h-moll, BWV 1002 -.m4a
でよいはずです
注目してもらいたいのが、この記述では "iTunes Music" を "iTunes_Music" に変更しなくても参照がうまくいっている点です。ファイルセパレータ―もWindows式の\のまま動作可能でした。minidlna内部で何等かの処置が行われているものと見られます。

 8. 設定ファイル記述

設定ファイル(/etc/minidlna.conf)にオーディオデータのコンテンツフォルダ名など設定します。 次のようにmedia_dirを記述しました。VとPは仮のものです。

$ sudo vi /etc/minidlna.conf
- - - 記述内容
friendly_name=Media Server on RasPi3
media_dir=A,/media/pi/Lexar/iTunes/iTunes_Music/Music
media_dir=V,/home/media/Videos
media_dir=P,/home/media/Pictures
friendly_nameは他マシンに見せる名前です。適当に付けてください。

 9. サービス開始

root権限で起動します。

$ sudo service minidlna start

他のDLNAクライアントからアクセスします。
機器の一覧の中に /etc/minidlna.confのfriendly_nameに設定した名前 (この例なら"Media Server on RasPi3") が見えるはずです。

コンテンツがクライアントから見えるようになるには少し時間がかかるようです。
とは言えlogを見ると15372曲,8分くらいです。

$ tail /var/log/minidlna.log
[2016/04/01 20:54:42] scanner.c:726: warn:
 Scanning /media/pi/Lexar/iTunes/iTunes_Music/Music
...
[2016/04/01 21:02:48] scanner.c:815: warn:
 Scanning /media/pi/Lexar/iTunes/iTunes_Music/Music finished (15372 files)!
=== iTunesでみる曲数15429との差は少し気になる

 minidlna1.1.5の問題点

raspberryPiでdlnaサーバーを立てる目的は 現用のfoobar2000/Windowsの置き換えにあります。 ◆ネットワークオーディオの魅力はリストでの曲選択にある参照。

しかし実運用の為には大きな2つの問題があります。

 1.Artistの代わりにAlbumArtistになってしまう。

artist/album artistをどう捉えるかにもよりますが、 僕の所は album artistというタグが追加される以前からのシステムのため 主にartistで分類するようになっています。

Windows版iTunesではアーティストとしてArtistを使うかAlbum artistを使うかは選択できます。
foobar2000ではリスト構成をタグ指定で設定することができます。
nasneでもArtistがアーティストとして採用されます。

ところがminidlnaではアーティストといえばAlbum ArtistであってArtistタグ の内容を採用することはできないのです。
これでは僕の所では使えません。

 2.ジャンル(genre)の下が多階層可できない。

ジャンルの下はalbum artistに固定され、しかもその下はalbumではなく直接曲になっています。
album構成を完全無視されるのはさすがにつらい。

 さて、どうするか?

特に設定項目にもないのでこれがminidlnaの仕様なのでしょう。

さてどうするか?

「足りないものは自分で作れ」というUnixの基本に沿ってなんとかするか。。。

それは、、、次の記事のココロだ~!

 minidlna1.2.1 メモ

$ sudo apt-get update
$ sudo apt-get build-dep minidlna
エラーを無視し
$ sudo apt-get install の後ろに2回に分け
gettext libavutil-dev libavcodec-dev libavformat-dev libjpeg-dev
libsqlite3-dev libexif-dev libid3tag0-dev libvorbis-dev libflac-dev
$ ./configure
$ make
$ sudo make install

[12117234.878178] scsi host0: usb-storage 1-1.3:1.0
[12117235.310962] usb 1-1.3: USB disconnect, device number 4
[12117369.194775] usb 1-1.3: new high-speed USB device number 5 using dwc_otg
[12117369.295685] usb 1-1.3: New USB device found, idVendor=14cd, idProduct=121c
[12117369.295699] usb 1-1.3: New USB device strings: Mfr=1, Product=3, SerialNumber=2
[12117369.295706] usb 1-1.3: Product: Mass Storage Device
[12117369.295712] usb 1-1.3: Manufacturer: Generic
[12117369.295718] usb 1-1.3: SerialNumber: 812320100708
[12117369.296203] usb-storage 1-1.3:1.0: USB Mass Storage device detected
[12117369.296976] scsi host1: usb-storage 1-1.3:1.0
[12117370.295546] scsi 1:0:0:0: Direct-Access     USB Mass Storage Device        PQ: 0 ANSI: 0 CCS
[12117370.311024] sd 1:0:0:0: Attached scsi generic sg0 type 0
[12117370.567203] sd 1:0:0:0: [sda] 999743488 512-byte logical blocks: (512 GB/477 GiB)
[12117370.567448] sd 1:0:0:0: [sda] Write Protect is off
[12117370.567467] sd 1:0:0:0: [sda] Mode Sense: 03 00 00 00
[12117370.567702] sd 1:0:0:0: [sda] No Caching mode page found
[12117370.567719] sd 1:0:0:0: [sda] Assuming drive cache: write through
[12117370.572555]  sda: sda1
[12117370.575095] sd 1:0:0:0: [sda] Attached SCSI removable disk
hiura@raspi03:/media/usb1 $ sudo mkdir /media/foobar
hiura@raspi03:/media/usb1 $ sudo mount -t exfat /dev/sda1 /media/foobar
FUSE exfat 1.1.0

$ sudo vi /etc/minidlna.conf

$ sudo cp linux/minidlna.init.d.script /etc/init.d/minidlna
$ sudo chmod 755 /etc/init.d/minidlna

###

https://sourceforge.net/p/minidlna/patches/153/
からalubum.c.patchをダウンロード
$ cp albumart.c albumart.c.org
$ sed -e albumart.c < albumart.c.patch

$ make clean
$ make
$ sudo service minidlna stop
$ sudo make install
$ sudo service minidlna start

|

« ◆◆ hiClass:C++基礎クラスライブラリ ◆◆ | トップページ | miniDLNA改:Artistの取り扱い »

トラックバック


この記事へのトラックバック一覧です: RasPiでDLNAサーバー(iTunesから移行):

« ◆◆ hiClass:C++基礎クラスライブラリ ◆◆ | トップページ | miniDLNA改:Artistの取り扱い »