ReadyMedia

提供: ArchWiki
2019年3月23日 (土) 10:16時点におけるHiromi-mi (トーク | 投稿記録)による版 (→‎設定と起動: 英語版と同期、警告追加)
ナビゲーションに移動 検索に移動

ReadyMedia (旧名 MiniDLNA) は DLNA/UPnP クライアントに完全に対応することを目標に掲げているサーバーソフトウェアです。MiniDNLA デーモンはネットワーク上のクライアントに対してメディアファイル (音楽、画像、動画) を供給します。クライアントアプリケーションとしては totem や kodi などが、デバイスとしてはポータブルメディアプレイヤーやスマートフォン、テレビ、ゲーム機 (PS3 や Xbox 360) などが挙げられます。

ReadyMedia は MediaTomb をシンプルかつ軽量なサーバーとして置き換えますが、備わっている機能は多少少なくなっています。管理用のウェブインターフェイスは存在しないため、テキストファイルを編集することで設定を行います。

インストール

公式リポジトリから minidlnaインストールしてください。

トランスコードをサポートしている非公式ブランチを使いたい場合は、AUR から readymedia-transcode-gitAUR をインストールしてください。

設定と起動

警告: 2019年3月時点で、現行のReadyMedia に致命的なバグがあります: 特定のIPアドレスへのバインドに用いられる -i コマンドラインオプションおよび network_interface 設定オプションは、HTTPサーバーには適用されません。このバグは2017年に上流へ報告されました。Web サーバーは全てのインターフェースから接続でき、公開されたホストでReadyMedia を運用している場合セキュリティ上の問題が生じている可能性があります

デフォルトでは、minidlna はシステムサービスとして実行されます (もしくは、ユーザーで実行することも可能です)。設定は /etc/minidlna.conf に記述します。以下の必須設定を設定してください:

#network_interface=eth0                         # Self-discovers if commented (at times necessary to set)
media_dir=A,/home/user/Music                    # Mounted Media_Collection drive directories
media_dir=P,/home/user/Pictures                 # Use A, P, and V to restrict media 'type' in directory
media_dir=V,/home/user/Videos
friendly_name=Media Server                      # Optional
inotify=yes                                     # 'no' for less resources, restart required for new media
presentation_url=http://www.mylan/index.php     # or use your device static IP http://192.168.0.14:8200/

デフォルトでは MiniDLNA は minidlna ユーザーで実行されますが、ユーザーは /etc/minidlna.confuser 行で変更ができます。MiniDLNA ユーザーを変更した場合、db_dirlog_dir オプションをそのユーザーから書き込みができるディレクトリに変更する必要があります。

minidlna サービスは systemd を使って minidlna.service で管理できます。

Media_DB の自動更新

/etc/minidlna.conf に設定されている Media_Collection ディレクトリ内のディレクトリ/サブディレクトリごとにカーネルは inotify で監視を行い、変更が見つかったら MiniDLNA が即座に Media_DB を更新します。通常ユーザーで MiniDLNA を実行している場合、カーネルの inotify の上限を変更することができません。MiniDLNA が全てのメディアフォルダを監視するためには inotify で監視できる数のデフォルトは十分とは言えないため、sysctl を使って inotify の監視数を増やして下さい (大抵の場合は 100000 が十分な値となります):

# sysctl fs.inotify.max_user_watches=100000

この変更を永続化させるには、以下を /etc/sysctl.d/90-inotify.conf に追加してください:

# Increase inotify max watchs per user for local minidlna
fs.inotify.max_user_watches = 100000

inotify のパフォーマンスはデバイスのタイプによって変わります。メディアドライブをたまにしか再スキャンしなかったり全くしなかったりすることがあります。監視しているメディアディレクトリにファイルが追加/削除されたときでも、DLNA のデバイスクライアントを再起動するまで変更が適用されないかもしれません。

MiniDLNA の presentation_url でファイルの数を比較して inotify の更新を確認してください。変更が行われない場合、MiniDLNA を実行しているユーザーに DB フォルダへの rw アクセス権があるか確認してください。それでも問題が修正されない場合、新しいファイルを inotify によって監視されていない同一ドライブの Downloads フォルダにコピーまたはダウンロードして、それから問題のメデイアフォルダに移動してみてください。重いメディアファイルのコピーやダウンロードは inotify を混乱させることがあります。

もしくは、MiniDLNA デーモンを停止して MiniDLNA の DB を手動で削除・再作成したり、デバッグ出力を解析しても良いでしょう (Ctrl+C で終了):

MiniDLNA デーモンを停止:

# systemctl stop minidlna

強制的に Media_DB を再作成するには:

# minidlnad -R

Media_DB を再作成した後はデーモンを停止してください。例: killall minidlnad

デバッグモードで起動するには:

# minidlnad -d

Ctrl+C で終了してください。

サービスの自動起動のトラブルシューティング

ときどき minidlna デーモンがブート時に起動に失敗することがあります。この問題は NetworkManager#NetworkManager Wait Online を有効にする で解決します。FS#35325 を参照。

ユーザーで minidlna を実行

システムサービスとしてではなく、自分のユーザーを使って minidlna を実行することもできます。マシンの管理者権限がないときにメディアを共有したい場合に便利です。

ローカルで必要なファイルとディレクトリを作成して設定を編集してください:

$ install -Dm644 /etc/minidlna.conf ~/.config/minidlna/minidlna.conf
$ $EDITOR minidlna.conf

上で書かれているように設定を行って下さい、特に:

media_dir=/home/$USER/dir
db_dir=/home/$USER/.config/minidlna/cache
log_dir=/home/$USER/.config/minidlna

次のコマンドで minidlna を起動できます:

$ minidlnad -f /home/$USER/.config/minidlna/minidlna.conf -P /home/$USER/.config/minidlna/minidlna.pid

ログイン時に自動的に起動させるには、前記の行を ~/.bash_profile に追加します。

その他の設定

性能を発揮するために考える必要がある設定と MiniDLNA の制限。

ファイアウォール

ファイアウォールを使用する場合、ssdp (1900/udp) と trivnet1 (8200/tcp) のポートを開いておく必要があります。例えば、arno's iptables firewall の場合 firewall.conf を編集して以下のようにすることでポートを開きます:

OPEN_TCP="8200"
OPEN_UDP="1900"

ファイルシステムとローカリゼーション

Linux と Windows の両方からアクセスできる外部ドライブに MiniDLNA の Media_DB を配置する場合は、適切なファイルシステムを選ぶようにしてください。NTFS は Windows で Linux のデフォルトを保ちます: root ユーザーには rw アクセス権をファイルの名前には UTF8 のフォントエンコーディングを使うため、ターミナルやメディアプレイヤーが UTF8 をサポートしていれば、Media_DB を見た時にあなたの使っている言語で書かれたメディアの題名も適切に表示されるはずです。古いプレイヤーでの USB ドライブの互換性のために Vfat (FAT32) を使用したい場合、または Media_Collection ドライブが Vfat で、フォルダやファイルの名前があなたの地域言語で書かれている場合、MiniDLNA はフォルダをスキャンして Media_DB を作成する際に名前を UTF8 に変換することができます。Media_CollectionMedia_DB のドライブのマウントオプションにあなたの言語のコードページ (短い DOS ファイル名に変換するため) と iocharset (ターミナルのロケールに長いファイル名を変換するため) を追加してください。例: codepage=cp866,iocharset=utf8 (または ISO-8859-5)Vfat は Linux のアクセス権限を保たないので、全てのユーザーに rw 権限を設定します:

UUID=6140-75F7 /media/MyDrive/Media_DB vfat user,rw,async,noatime,umask=111,dmask=000,codepage=cp866,iocharset=utf8 0 0

システムの iocharsetロケールが一致する場合、ターミナルやプレイヤーが短いファイル名しかサポートしていないときは、codepage も有効になっていることを確認してください (例: ru_RU.CP866)。Arch Linux リリースがコンパイルされたときにシステム設定に含まれている可能性があります。存在しない場合はリリースを再コンパイルして追加してください:

ls /usr/share/fonts/encodings

MiniDLNA はデータベース内の MoviesPhotos をファイル名でリストアップしますが、Music エントリはファイル名ではなく ID3 タグ が使われます。音楽のコレクションのタグで UTF-8 ではなくローカルな文字セットが使用されている場合、MiniDLNA はタグを認識することができず UTF-8 に変換してメディアプレイヤーに表示します。あるいはオリジナルのタグのコードページがシステム上に存在しない場合、(たとえメディアファイルの名前が読めたとしても) タグを読むことができません。その場合、ID3 Tag Converter を使って音楽ファイルのタグを UTF-16BEUTF-8 エンコーディングで再度設定してください。

Media_Collection のファイルシステムの選択はトレードオフです: XFS や EXT4 はハードディスクの読み書き速度が速くて、ストレージが付属している小さな Plug コンピュータ で CPU 負担が低くなります。NTFS は Windows との互換性が最も優れており、ドライブを直接接続して高速にコピーすることができます。Samba, NFS, iSCSI などのネットワークファイルシステムを使って Windows に Linux のファイルシステムをインポートすることもできますが、データコピーは低速です。ファイルの断片化は再生に影響するので、動画を保存する場所は XFS (断片化しづらい), NTFS (断片化しづらくてデフラグが簡単), EXT4 (巨大なファイルのエクステントを使用) などでフォーマットして、EXT3 や断片化しやすい FAT32 を使うのは避けてください [1]。賢いフラッシュドライブでは音楽や写真ファイルが断片化することはほとんどなく、VFAT (FAT32) や EXT4 で高速な書き込み速度が発揮され CPU 負担が低くなります。ただし EXT4 はジャーナリングによってメモリのウェアに影響を与える可能性があり、メディアプレイヤーとの互換性はあまり高いと言えません。ドライブをパーティショニングするときは、ブロックの アライメント を行なって適当なマウントオプション (async,noatime など、ファイルシステムやメモリの種別によって選択してください) を使うことでフラッシュドライブやハードディスクドライブの速度を劇的に 向上 させることができ、他にもメリットが存在します。

メディアの操作

MiniDLNA は小型デバイスを対象としているため、動画のサムネイルを作成しないことで CPU の負担や DB のビルド時間を少なくしています。動画と同じフォルダにサムネイルが存在する場合はそれを使い、MP4 や MKV などのメディアコンテナにアルバムアートタグが埋め込まれている場合はそれを抽出します (AVI は対象外)。Thumbnail Maker を使うことでメディアフォルダにサムネイル (160x160 以下の JPG) を追加することができ、miniDLNA は再スキャン後にメディアファイルとサムネイルを関連付けます。Media_DB 内に保存した巨大なサムネイルはリサイズされるためスキャンが遅くなります。フォルダ一つごとに動画一つを配置して、minidlna.conf のサムネイルの命名規則に従って下さい。複数のエピソードがある場合、サムネイルの名前をエピソードの名前に一致させる必要があります (<file>.cover.jpg または <file>.jpg)。GUID で MS Album Art のサムネイル名を扱うには、* を名前の最後に付けて下さい: "AlbumArt_{*".jpg。MiniDLNA は選択したメディアタイプだけを画面上に表示します (つまり Movies)、同一フォルダの他のファイルは表示しません。

写真を閲覧する場合、プログレッシブ JPG やロスレス圧縮の JPG が DLNA を使用するプレイヤーによってサポートされていない可能性があります。また、画像のスライドショーで問題が発生する場合、プレイヤーの仕様書に書かれた最大写真サイズまで写真をリサイズしてください。DLNA の仕様では画像のタイプは JPG または PNG のみで、最大サイズは 4096 x 4096 ピクセルまでとなっています (DLNA サーバーが LARGE フォーマットをサポートしている場合)。もうひとつ下のサイズ制限 (MEDIUM) は 1024 x 768 となっているので、このサイズまで写真をリサイズすることで正しく表示されるかもしれません。

システムの負担を抑えるために、MiniDLNA はサポートされていないメディアファイルを、プレイヤーによってサポートされているフォーマットにその場で変換するということをしません。Media_DB の作成時に、プレイヤーによってサポートされているフォーマットかどうか正しく認識されない可能性があります。プレイヤーによっては UPnP で幅広いフォーマットを再生できることがあります。DLNA の仕様ではメディアコンテナの UPnP サブセットや使用できるコーデックのプロファイルはかなり制限されています。TV 画面で表示されなかったり、Media_DB に含まれているメディアファイルが再生できない場合、ハードディスクが回っているか確認したりメディアプレイヤーに USB で接続して再生してみてください。MiniDLNA はオーディオトラックや字幕、ディスクチャプターの選択やソートなど、プレイヤーの機種によって高度な再生機能をサポートしていないことがあります。

メディアサーバーの作成

開発ボード (Raspberry Pi, CubeBoard など) のような安価で軽量なシステムを使ってメディアを流したいということもあるでしょう。このようなボードでは X サーバーすら必要としないのが普通です。

外部ドライブの自動マウント

サーバーを自動化したい場合に便利です。詳しくは udev を見て下さい。

問題

MiniDLNA ベースのメディアサーバーにはドライブの再スキャン問題が存在します。接続した外付け HDD が何度もスキャンされるという問題です。スキャンが発生するのはドライブが切断されるたびに MiniDLNA が DB レコードを削除するのが原因です。ドライブをずっと接続したままにしておくのであれば問題ありませんが、"抜き差しする"巨大な外付けドライブにメディアライブラリを保存している場合、動画を視聴する前に多大な待ち時間が発生します。

minidlna の フォーク を使うことで再スキャン問題は解決できます。フォークでは動画ファイルと同じ場所にメタデータファイルが作成されます。巨大なメディアでスキャン時間が大幅に増えます。

トラブルシューティング

無線でルーターを介したときにサーバーが認識されない

MiniDLNA サーバーを動作させているマシンをイーサネットでルーターに接続している場合、(同一ルーターの) WiFi で MiniDLNA サーバーにアクセスできないという問題が発生することがあります。この問題を解決するには、ルーターで "Multicast Isolation" をオフにしてください。例えば、ADB / Pirelli P.RG EA4202N ルーターの場合、設定ページに接続して、Settings->Bridge and VLAN->Bridge List->Bridge Ethernet WiFi の edit をクリック->Multicast Isolation を No に設定->Apply。

メディアディレクトリにアクセスできない

デフォルトの systemd サービスファイルでは ProtectHome=on パラメータを使っています。/home ファイルシステムの中に保存しているファイルを共有したいときは、制限を緩和しましょう。systemd ユニットファイルを上書きすることでパラメータを変更できます (例: systemctl edit minidlna.service):

/etc/systemd/system/minidlna.service.d/override.conf
[Service]
ProtectHome=read-only

ブリッジデバイスで共有したときに DLNA サーバーが表示されなくなる

(Ethernet デバイスにブリッジした OpenVPN デバイスなど) ブリッジデバイスで ReadyMeadia を外部から使えるようにしている場合、一定時間後にサーバーがクライアントから表示されなくなることがあります (表示されなくなる時間は数秒から半日までと幅があります)。問題を解決するにはマルチキャストスヌーピングを無効化する必要があります。以下のコマンドで一時的に設定できます:

# echo 0 >> /sys/devices/virtual/net/br0/bridge/multicast_snooping

上記のコマンドを実行するとすぐにクライアントからサーバーにアクセスできるようになります。ただし再起動すると元に戻ります。上記のコマンドで問題が解決することが確認できたら、以下のコマンドで変更を永続化できます:

# echo 'net.br0.bridge.multicast_snooping=0' > /etc/sysctl.d/35-minidlna_no_snoop.conf