DLNAサーバー(MiniDLNA)を立ててAndroid TVから動画を視聴する

DLNAサーバー(MiniDLNA)を立ててAndroid TVから動画を視聴する


LinuxにMiniDLNAを入れて、PCに保存している動画をAndroid TVから視聴できるようにする手順と、表示されないときの確認ポイント

目次

やりたいこと

PCに保存している動画を、リビングのAndroid TVで観たい。

わざわざUSBメモリにコピーするのも面倒なので、PCをDLNAサーバーにして、Android TVからネットワーク越しに再生できるようにします。

DLNAサーバーには軽量で設定が簡単な MiniDLNA(ReadyMedia)を使います。

環境

  • OS: Ubuntu 26.04 LTS (Desktop)
  • CPU: Intel Core i5-10500T x 12
  • RAM: 16GB

1. インストール

sudo apt install minidlna

インストールするとサービスとして自動で起動します。

2. 公開するフォルダを設定する

設定ファイルを開きます。

sudo nano /etc/minidlna.conf

media_dir に公開したいフォルダを指定します。

media_dir=V,/home/ユーザー名/Videos  # 任意のパス

先頭の V, はメディアの種類の指定です。

指定意味
A音楽(Audio)
V動画(Video)
P画像(Pictures)
なしすべて

複数フォルダを公開したい場合は media_dir を複数行書けばOKです。

ついでに、テレビ側に表示されるサーバー名も変えておくと分かりやすいです。

friendly_name=MyPC

3. データベースを作り直す

media_dir を変更した場合、データベースを作り直さないと最新化されない場合があるようです。

サービスを止めて、キャッシュ(データベース)を削除してから起動し直します。

sudo systemctl stop minidlna
sudo rm -rf /var/cache/minidlna/*
sudo systemctl start minidlna

起動時にデータベースがないので、フォルダが再スキャンされます。

sudo minidlnad -R -u minidlna でも再構築できますが、このコマンドはそのままデーモンとして常駐します。 続けて systemctl start するとポートが競合するので、使う場合は再構築後にそのプロセスを止めてからサービスを起動してください。

4. 権限を設定する

MiniDLNAは minidlna ユーザーで動くため、ホームディレクトリ配下のフォルダを公開する場合は読み取り権限が足りないことがあります。

ホームディレクトリごと全開放するのは避けたいので、ACLで必要な分だけ許可します。

# ホームを「通過」だけ許可(中身の一覧は見せない)
sudo setfacl -m u:minidlna:x /home/ユーザー名

# 動画フォルダは読み取り+通過を許可
sudo setfacl -R -m u:minidlna:rX /home/ユーザー名/Videos

# 今後追加するファイルにも適用(デフォルトACL)
sudo setfacl -R -d -m u:minidlna:rX /home/ユーザー名/Videos

X(大文字)は「ディレクトリ、または既に実行権限のあるファイルにだけ実行権限を付ける」という指定です。 動画ファイルに無駄な実行権限が付かないようにしています。

setfacl が見つからない場合は acl パッケージを入れてください。

sudo apt install acl

設定できたかは getfacl で確認できます。

getfacl /home/ユーザー名/Videos

5. 再起動

sudo systemctl restart minidlna

6. ステータスページで確認する

MiniDLNAにはステータスページがあり、ブラウザから状態を確認できます。 PCのブラウザで以下を開きます。

http://127.0.0.1:8200/

MiniDLNAが動いていればページが表示され、スキャンされたメディアの件数(動画・音楽・画像)や、接続しているクライアントが確認できます。 動画の件数が増えていれば、サーバー側の設定はOKです。

これでAndroid TVのメディア一覧(DLNA対応のプレイヤーアプリ)にサーバーが表示されるはずです。

Android TV側は標準のメディアプレイヤーでも見られる機種がありますが、表示されない・再生できない場合は VLC や Kodi などDLNAに対応したアプリを入れるのがおすすめです。 VLCなら「ローカルネットワーク」から、friendly_name で付けた名前のサーバーが見えます。

表示されない場合

起動に失敗していないか確認する

まずはサービスが起動しているかを確認します。

systemctl status minidlna

active (running) になっていればOKです。

failed になっている場合は、起動に失敗しています。原因を確認します。

sudo journalctl -u minidlna -n 50 --no-pager

設定ファイルの書き間違いや、minidlnad -R で起動したプロセスが残っていてポートが使われている、などがよくある原因です。

ステータスページを見る

手順6のステータスページ(http://127.0.0.1:8200/)を開きます。

ページ自体が開けない場合は、MiniDLNAが起動していません。 動画の件数が 0件 の場合は、テレビ側ではなくサーバー側(パスや権限、スキャン)の問題です。

ログを確認する

sudo tail -f /var/log/minidlna.log

Permission denied などが出ていれば権限の問題なので、手順4を見直します。 スキャンの進み具合もここで確認できます(ファイル数が多いと初回スキャンに時間がかかります)。

ファイアウォールを確認する

ufw を有効にしている場合、DLNAの通信が遮断されてテレビから見えないことがあります。

MiniDLNAは以下のポートを使うので許可します。

ポート用途
1900/udpSSDP(サーバーの検出)
8200/tcpメディアの配信
sudo ufw allow 1900/udp
sudo ufw allow 8200/tcp

家庭内LANからだけに絞るなら、送信元を指定しておくと安心です。

sudo ufw allow from 192.168.1.0/24 to any port 1900 proto udp
sudo ufw allow from 192.168.1.0/24 to any port 8200 proto tcp

(192.168.1.0/24 は自宅のネットワークに合わせて変更してください)

同じネットワークにいるか確認する

DLNAはマルチキャストでサーバーを探すため、PCとAndroid TVが 同じネットワーク(セグメント) にいる必要があります。

  • ルーターのゲストWi-Fiにテレビだけ繋がっている
  • メッシュWi-Fiや中継器で別セグメントになっている
  • ルーターの「プライバシーセパレーター」(端末間通信の遮断)が有効

といった場合は見えないので、接続先を確認します。

また、PCに複数のネットワークインターフェース(有線・無線・Dockerなど)がある場合は、使うインターフェースを明示すると改善することがあります。

network_interface=wlan0  # ip a で確認したインターフェース名

追加したファイルが反映されない

MiniDLNAはinotifyでフォルダの変更を監視して自動で反映しますが、フォルダ数が多いと監視数の上限に引っかかることがあります。

ログに inotify_add_watch 関連のエラーが出ていたら、上限を引き上げます。

echo "fs.inotify.max_user_watches=524288" | sudo tee /etc/sysctl.d/90-inotify.conf
sudo sysctl --system

それでも反映されない場合は、手順3のデータベース再構築を試してみてください。

再生に不備がある場合

一覧には表示されるけれど、うまく再生できない場合です。 DLNAはサーバー側で変換(トランスコード)せずにファイルをそのまま送るので、テレビ側が対応していない形式だと再生できません。 その場合は、ffmpegで再生できる形式に変換します。

sudo apt install ffmpeg

音声が出ない場合

映像は出るのに音声が出ない(音声トラックがないように見える)場合は、音声コーデックがテレビに対応していない可能性があります。

音声コーデックは以下で確認できます。

ffprobe -v error -select_streams a -show_entries stream=codec_name -of csv=p=0 "対象.mp4"

ac3 や dts、opus などが表示されたら、対応していないかもしれません。 映像はそのままで、音声だけ AAC に変換してみます。

ffmpeg -i "対象.mp4" -c:v copy -c:a aac -b:a 192k "修正.mp4"

映像は -c:v copy で再エンコードせずにコピーするので、すぐに終わります。

MP4動画が再生できない場合

MP4ファイルの中には、動画の情報(moov)と実際のデータ(mdat)が入っています。 mdat が先で moov が後ろ にあるファイルは、ストリーミング再生だと最後まで読まないと再生を始められないため、再生できないことがあるようです。

どちらが先にあるかは以下で確認できます。

ffprobe -v trace "対象.mp4" 2>&1 | grep -oE "type:'(moov|mdat)'" | head -2
type:'mdat'
type:'moov'

このように mdat が先に表示されたらNGです。moov が先ならOKです。

NGの場合は、ffmpegで moov をファイルの先頭に移動します。

ffmpeg -i "対象.mp4" -c copy -movflags +faststart "修正.mp4"

-c copy なので再エンコードはされず、画質は落ちません。

まとめ

  • apt install minidlna → media_dir を設定 → 再起動 でDLNAサーバーが立つ
  • media_dir を変えたらデータベースを作り直す
  • ホーム配下を公開するなら minidlna ユーザーへの権限付与(ACL)が必要
  • 見えないときは「起動状態 → ステータスページの件数 → ログ → ファイアウォール → ネットワーク」の順に確認
  • 再生できないときはffmpegで変換(音声はAACに、MP4は -movflags +faststart で moov を先頭に)

これでPCに溜まった動画をソファから観られるようになりました。快適です。

参考

リンクをコピーしました