2012年12月4日火曜日

DLNA/uPnP を満喫する miniDLNA編 家庭内オンデマンドサーバー(2016-04-07改稿)

14.04LTSでインストールでつまづく人が世界的に多いみたいなので、[ダーティなインストール]方法を記載しました。インストール候補がないので。こだわりがなければ、16.04LTSを使うべきです(たぶん)。

はじめに

  • miniDLNA 1.1.5に移行/変更しました。記事は1.1.4です。
  • 一時期公開していた、minidlna 1.1.4のトランスコードバージョンは品質が悪かったため削除/公開停止しました。
  • 1.1.4と1.1.5に特に設定の違いはないと思います。うまく起動スクリプトなどが作られない場合(debに含まれていない場合)は、1.1.4のまま minidlnad を差し替えて、リブート(美しくないが、結果オーライ).2016/01/20頃変更。パスには注意してください。一応miniDLNA1.1.5パッケージhttp://poor-user.blogspot.jp/2015/02/how-to-install-minidlna-114-deb.htmlを公開しました。14.04/17.3用。当方のパッケージングに問題あるのかもしれませんので、可能な限り公式系から落としましょう。あれば教えてください(14.04系)。
  • 16.04beta2から通常インストール候補に復活していますので、下記の普通手順通りで素直に入ります。
  • UniversalMediaServer(Windows,MAC OS X,Linux他)も併用していますので、その概要を記載しました。 http://poor-user.blogspot.jp/2016/04/dlnaminidlnauniversalmediaserver.html


 

 

 

miniDLNA レジュメ・家庭内オンデマンド

まずはインストーラーまかせで導入します。14.04LTSはだめ。 [ダーティなインストール]
インストールします。

sudo apt-get install minidlna

次いで、エディターで定義ファイルを書き換えます。

sudo gedit /etc/minidlna.conf を確認。次の行を探します。

media_dir=/var/lib/minidlna


こんなふうに書き換える。たとえば、メディアファイルを配置しているとして。
media_dir=/home/username/Video
media_dir=/home/username/Music
media_dir=/home/username/Pictures

media_dirを書き換えるか、そこに*.mp4/mkv/m4v/wmv/avi,*.jpg/png,*.mp3/flac/wavなどのテストファイルを放り込む。テストのためです。

sudo reboot

android/Nexusから、ネットワーク上のDLNAサーバーをブラウズしてみるの図。debianロゴふたつがminiDLNAです。青がUMSです。

以下、うまくいっていれば特に後述については確認程度でとどめておけます。実際のところ、当方では、miniDLNAとUniversalMediaServerを同時に起動しています。それぞれ特徴がありますね。
このように、見えて入ればまず問題なくストリーム再生できるはずです。

後者はここ1年でずいぶんブラッシュアップされています。音楽配信サーバーなどNAS的に使うには、両方動かしていて、捗っているなと感じています。片方でうまくいかない場合など、もう一方のサーバーに接続して再生してみるとかできますので便利です。クライアントでの写真の表示の仕方やサムネイルの表示などサーバーソフトウェア側に依存する違いがあります。

流行りなのでしょうが、メディアサーバー用に特段NASを買う必要はありません。たとえばこのマシンは有線LANケーブルで無線ルーターに接続しています。よって、Wi-Fi経由でスマホのPnP/DLNAクライアントで、音楽を再生したりできます(音楽の場合は、miniDLNAに接続するほうが当方の好みです)。Windowsで音楽配信なら、MediaGO(SONY)がおすすめです。

言わずもがなですが、デスクトップのLinuxマシンが無線LANを装備している必要はないんです。(このページを見ている大半の方には当たり前でしょうが、世間的にはそうでないみたいなので付記しました。)

ちゃんと動作していれば下記はもう読む必要はないかもしれません。

第1部 miniDLNAについて最低限知っておくべきこと

0)できること、できないこと、要するに「家庭内オンデマンド」サーバーを立てるってこと。今、造語しました。

  1. 楽曲(音声ファイル)、イメージファイル(絵)、動画をストリーム再生できます。
  2. ローカルエリアネットワークのクライアント、アイフォンなり、アンドロイドなり、ネットワーク対応TV(最近のはほとんどそうだと思います)なりで、母艦サーバーのファイルが再生できます。SONYのテレビでもいけます。
  3. クライアントに依拠しますが、H.265/HEVCなどのフォーマットにも対応しています。(垂れ流し、トランスコードなし) 換言すればクライアントのアンドロイド端末がここ1年ぐらいのそこそこ速い機種であれば、FHD/HEVCがほぼストレスなく再生できるはずです(ないわけではありません)。SONY XPERIA Z1クラスでは重いです。2年前の最上位機種です。
  4. (ウィークポイント)特にTV側 など、コーデックをユーザーが変更、追加できないなどの場合に困ります。mpeg2やh.264にトランスコードしてやればいいわけです。SONYの古いBRAVIO(2008年製位)はそうだった気がします。今は使っていない。
  5. これは、minidlnaに期待するのではなく、Universal Media Server と併用すれば、わりと簡単に解決します。つまり、W-DLNAサーバーです。深く考えるよりインストールしたほうが速いです。javaベースで、起動するだけで200MB位、トランスコード用キャッシュを250MB程度仮に与えると0.5GB位はメモリーが必要ということになりますが、デフォルトでけっこういけるかなと思います。「ほぼリアルタイム」トランスコードですから、負荷もそれなりです。いまどきのi7マシンならそもそも議論の必要すらないでしょう。古い機体を再利用したいケースではご注意ください。 

1)miniDLNAがそもそも動いているかの確認方法

http://localhost:8200/
http://そのマシンのIPアドレス:8200/

クライアント(TVなり、アンドロイドなり、アイフォンなり)から、DLNAクライアントを起動して、サーバーが見えているかチェック、再生。

かなり古いアンドロイド端末でも、DLNAクライアントが標準装備だったりします。XPERIAでは動画の機能に含まれていますが、お約束のように少しタコです。Android でおすすめは、BubbleUPnPです。全てのPnPクライアントを試してきましたが、自分の中ではこれがベストチョイスです。アンドロイドの話はいずれまた。再生プレイヤーの選択もありますしね。往々にしてSONYのPnPアプリはタコです(Z4・2016-04-12時点ではそうでもないです)。だいじなことなので2回いいました。どうだいじかというと動作確認には使わないほうがいいということです。だめな子に何をさせてもだめです。時間が盗まれます。

2)ストリームするファイルが格納されたディレクトリを定義ファイルで指定する。


基本は1行書き換えです。そこからスタートしましょう。

sudo gedit /etc/minidlna.conf

media_dir=/media/etcs/ikuji-kiroku

この media_dir=以下で配信メディアを指定します。

media_dir=/media/etcs/ikuji-kiroku APV全部、A=オーディオ、P写真、Vビデオ
media_dir=PV,/media/etcs/ikuji-kiroku 写真と動画のみ

カンマの前の文字列でDBにするファイル種別を指定できるようになりました(1.1.5)。以前のバージョンでは、複数種指定がなかったと思います。

3)メディアDBは放置プレイで更新

メディアファイルDBの更新は自動です。不都合がある場合は、テンポラリー指定して、起動毎に再作成するようにすればよいです。人間は考えるべきではありません。と思う。
実際のDB作成所要時間は、合計24時間程度の動画で200ファイルなら、たぶん数秒です。ビデオ撮影したものなど数秒のものもあったりしますが。ヘッダみているだけでしょうから。

DBファイルが壊れたりして変!ってことになったりはまったりすることを考えるとこの運用は潔いかなと思います。古いバージョン時は、高頻度でDB更新がうまくいかなかったりしました。最近でもだめな場合があります。tmpfs指定のディレクトリに変更して様子をみてみましょう。大量ファイルでなければ全DB作り直しでもものの数分です。

さほどファイル数がないのであれば、起動毎にDB作りなおすというのも簡単な解決かも。minidlna.confを次のように書き換えて再起動してください。

#db_dir=/var/cache/minidlna
db_dir=/run/minidlna

4)サーバー稼働とクライアントでの再生確認、XBMC/kodi、VLCなど。


クライアントで再生確認テスト。

XBMC/kodi はDLNAクライアントとしても優秀ですが、図のようにyoutube動画も再生できます。一定マシンスペックは必要です。xbmcやVLC、もっともいいのは、利用シーンから考えて、androidではないかと思います。

XPERIAなら、標準のミュージックや動画がDLNA対応ですね。まぁ、最近では常識なのかも。BubbleUPnPがアンドロイドのおすすめです。無料でも使えますが、私は買いました。その価値は十分あります。SONYのより多機能というか、おそらく競合製品含めてもいちばん使いやすいです。

なお、kodiは、レンダラーにもなりますから、また活用の範囲は広がります。とはいえ、自分の場合、chromecastに戻しました。デスクトップ機でレンダラーとしては電気消費なども含めてちょっとおおげさなので。

以上


以下、かなり昔、過去の記録です。うまく動いていればもう読む必要ありません。4年前時点なので。

第2部:うまくいかない場合など詳細

ubuntu、mint、debianでは、mediatombが定番のようですが、個人的な超お勧めDLNAサーバーは、minidlnaです。定期的なアップデートもありますし、mediatombのメンテナーも参加されているようです。なおテストと運用は、mint/ubuntu 12.04/12.10 32bit 64bitと8環境をサーバー側とし、iOS6及びmint13 をクライアントとして行なっています。最終運用は、mint14シナモンをサーバーに固定しました。minidlnaの特徴は、
  • 軽量、バイナリもびっくりするほど小さい。軽いのは当たり前。
  • テキストファイルで定義指定できるのでシンプルで確実。簡単。
なお、同機体で、Windows7標準搭載DLNA/WMP12での運用テストをしてみましたが、遅延の発生、DB更新の遅れや勝手にサボることによるユーザー負担(むかつく)で、使う気になれません。再構築方法はわかりましたが、どうしてWindowsは、自動的にDB更新しないのか不思議でたまりません。ま、とにかく圧倒的に速い!! minidlnaはおすすめです。MSは改善する気がないのかな?!

以下、mint13でやりながら

インストール
sudo apt-get minidlna

ヴァージョン確認(Vは大文字)
minidlnad -V

起稿段階で、1.0.25で、ソースからビルドしましたので、通常インストールですとそれ以下の版になります。さほど気にすることはないと思います。GUIなソフトウェア導入ももちろん使えます。ちなみに、.24と.25ではバイナリサイズが大きく違いますが、特に差は感じませんでしたので、メンテナ推奨パッケージに戻しました。/etc/minidlna.confも順序が違うだけで基本的には同じです

導入し、起動確認

$ /etc/init.d/minidlna status
 * minidlna is running
起動していなければ次で起動してみる。
$ sudo service minidlna start 

クライアントから”machine:minidlna” が見えますか。

正常稼動していれば、ローカル、minidlna導入マシンで、
 http://192.168.1.xx:8200/をブラウザで開けば次のような表示になります。
 http://localhost:8200/ http://127.0.0.1:8200/ でも同じ。
 
1.1.4でのSTATUSに差し替えました。以前はテキスト1行だけでした。 左上は加工です。

STATUS確認はsudoは不要です。
この段階で起動していなければ念のため、再起動して確認しなおしてください。
サービスが起動しないことには使えません。再起動して自動起動していないのは当方の調査によれば、NetworkManagerがらみの問題じゃないでしょうか。はまる前に後述分[自動起動しない場合の対策]を読んでみてください。これは過去の話です。現在では問題はでないと思います。

定義ファイル編集(最小:まず1行だけ書き換える)


ストリーミングしたいディレクトリを、まずは指定してください。それだけでたいていは動きます。ハマる前に最小のことだけしましょう。誤字がないか注意しましょう

sudo gedit /etc/minidlna.conf


#media_dir=/opt ここを書き換える例
#media_dir=V,/media/etcs/ikuji-kiroku
media_dir=/media/etcs/ikuji-kiroku
media_dir=/media/friends/nomikai

※NTFSをマウントして必要動画Directoryを指定しています。


#friendly_name=My DLNA Serverの行を書き換えるのは環境が確定した最後にしてください。書き換える必要もまったくありませんし。Deamonオーナーがわからなくなります。

定義ファイル書き換え後、リロードするか、マシンを再起動
再起動がおすすめ。ここでいろいろすべきではないです。

ちなみに、リロードは、

 sudo /etc/init.d/minidlna force-reload 

 * Restarting DLNA/UPnP-AV media server minidlna                         [ OK ] 


DLNAクライアントをアンドロイドなりiPhoneで起動してください。別のクライアント、ubuntu機(VLC、BANSHEEがおすすめ)でももちろんOK。それでサーバが見えていて再生できればOK。
machine:minidlna が見え、ファイル再生できれば丸ということです。

一旦、再起動すると良いです。でないとrootで実行されているはずです。再起動後minidlnaユーザーで起動していれば完璧です。今後は、DB再構築コマンド一行だけを覚えておくだけでいいですし、仮に忘れても自動でやってくれます。

DB再構築についての考え方

順当に起動すれば、hostname:minidlna でuPnP/DLNAサーバー見えているはずです。この状態で、もし media_dir=/media/etcs/ikuji-kiroku に放り込んである動画、音楽、写真が見えてないなら(空なら見えませんよ)、

DB再構築を強制する

コマンドが以前と変わっています。minidlnad です。

sudo minidlna -R
sudo minidlnad -R

を発行してください。HDDを読み込みにいってしばらく音がしています(DBを再構成している)。正常に起動するようになれば、sudo minidlna -R コマンドぐらいしか使うことはありませんし、新しいファイルも自動DB構築してくれます。もう1年以上このコマンドは発行していいません。必要にならないので。放置でもいけるかと思います。

(以下はさらに4年前の話で現在/平成27年/は発生しないはずです?!) 自動起動しない場合の対策:レアケースなので、ここまで読んでいただけれればけっこうです。
固定プライベートアドレスを割り当てている場合に多く発生するようです。ただし、固定している方の大半は理由があって固定しているわけで、DHCPまかせにはできないと思います。(また実験した結果では、12.04と12.10では挙動が違います)。DHCPでMACアドレス指定、固定IPの場合は問題がおそらくでないと思いますので、ここを読む必要はありません(すでに使えているはずですしね)。

そういうわけで、絶対的に正しいとはいいませんが、起動するようにしてみました。

まず、/etc/network/interfaces
これが通常、
auto lo
iface lo inet loopback
の2行のみになっているはずです。
その下に次を書き加えてください。

sudo gedit /etc/network/interfaces

auto eth0:0
iface eth0:0 inet static
address 192.168.xxx.yyy
netmask 255.255.255.0
gateway 192.168.xxx.1


eth0:0という仮想インターフェイスに割り当てるという例です。
これでNetworkManagerと共存できており、特に問題は発生していません。

再起動して、Internetに問題なく接続できるなら、あるいは、

ifconfig

eth0:0    Link encap:イーサネット  ハードウェアアドレス d4:dd:e9:29:d2:9a  
          inetアドレス:192.168.1.xxx  ブロードキャスト:192.168.1.255  マスク:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  メトリック:1
          割り込み:60 ベースアドレス:0xc000 


このように、nicが仮想であれ実体であれ使えることを確認してみましょう。

ここまで来れば、あとはなんとでもなります。まちがっても、起動scriptをいじろうとかまだ考える必要はありません。あなたがそれなりのユーザーならやってしまうかもしれませんがそれは(できますが)無駄です。ばかげています。仕様変更に伴って、NetworkManagerによるNICの初期化タイミングが遅いため、minidlnaが起動できていないのだと結論づけています。12.04と12.10で確認。mintも同様。そして、一時的なものでした。

あるいは、NetworkManagerを自動起動しないようにして、従前の /etc/network/interfaces だけを用いたnic初期化でもうまくいきました。そっちのほうがいいのかもしれませんが、ubuntu系は新しいNetworkManager方式が今後も採用されつづけるはずみたいなので、それに敬意を払うことにします。ですが、やはり「管理外」なのでサービス停止、自動起動停止にします。

sudo service network-manager stop
sudo update-rc.d -f network-manager remove

これでうまくいかない。Beginner時代は、Webminで起動スクリプト調整をしていたので、Webminをインストール。システム-起動及びShutdownで、network connection manager  を停止して、自動起動しない設定にして保存、リブート。今度は起動していないようです。/etc/init.d/を見るとあれこれシンボリックリンクになっていますね。

プロセス確認方法

$ ps ax | grep NetworkM
4491 ?        Ssl    0:00 NetworkManager  <--- font="font">
4495 pts/0    S+     0:00 grep NetworkManager

仮に筆者と同じ仮想NIC方式の構成にされた場合は、

sudo gedit /etc/minidlna.conf 


で定義ファイルを一行だけ書き換えてください。

# この行を有効にして
network_interface=eth0:0

これで、リブート。うまくいくといいね!!

それでもボクはうまく行かない(T_T)場合

log_dir=/var/log 
のログをみてみましょう。minidlna はminidlnaユーザーで実行されることを前提にしていますので、いくつかのエラー表示があるはずですよね。

最終的に、ただしく起動したら、

ホスト名:minidlna

というDLNAサーバーが見えます。あとは使い放題。これが

ホスト名:root 

になっていてももちろん使えますが、root起動は不適切な使い方ではないかと思います(それにいじり倒しましたね?!)ので、いじり倒さないほうが得策です。一旦再起動してみましょう。

補足:自分でBuild

Compileした場合、/usr/sbin と/usr/binのいずれにminidlnaが配置されたか確認してみてください。見つからない場合、後者に移動する、か、起動scriptを1文字だけ修正してください。sです。コンパイルオプションをさわってももちろんおけ。

追加例:固定アドレス運用の場合


現在すべてのmint/ubuntu機/etc/network/interfacesは以下の考えに基づく設定にしました。(2015年現在は違います。ネットワークの仕組みが変わる過渡期だったためです)
12.04/12.10で、staticにしている/etc/network/interfacesの例

auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.1.11
netmask 255.255.255.0
gateway 192.168.1.1


1.1.4 1.1.5パッケージ、試験的に置いてみました。不要な方は入れる必要はありません。

0 件のコメント:

コメントを投稿