読者です 読者をやめる 読者になる 読者になる

dorapon2000’s diary

忘備録的な。CTFやってます。

mediatombでDLNAサーバを構築

ubuntuサーバを立て出したのは、立ち読みしておもしろそうで、そのまま購入した日経Linuxのせいです。

日経Linux(リナックス) 2016年 10月号 [雑誌]

日経Linux(リナックス) 2016年 10月号 [雑誌]

一通りサーバの設定も終わったところで、 「07 MediaTombでDLNAサーバーを構築」をやってみました。DLNAサーバというのは家電、ゲーム機、スマフォで動画や音楽を共有するためのサーバらしいです。MediaTombがそのためのサーバーソフトです。本の説明では非常に簡潔に書かれているのですが、全く一筋縄にはいかず、最後の最後で諦めました。一応たくさんの資料を読んだのでまとめておいて、もし誰かの参考にでもなればと思います。


前提

流れ

  1. mediatombのインストール
  2. mediatombの設定
  3. mysqlの設定
  4. ブラウザで共有するファイルを選択
  5. DLNAクライアントで動画を確認

mediatombのインストール

$ sudo apt-get install mediatomb

mediatombの設定

設定ファイルは2つあります。

  • /etc/default/mediatomb
  • /etc/mediatomb/config.xml

手作業でも設定できますが、本ではコマンドですべて設定してしまっています。 私もそれに従いました。

# 共有設定用のweb画面(管理画面)にアクセス可能にする
$ sudo sed -i -e ’s/enabled=“no”/enabled=“yes”’ /etc/mediatomb/config.xml

# ネットワークデバイス名を確認
$ ip link
...
2: wlp3s0b1: <BROADCAST, ...

# 外部からアクセス可能にする (2つ目のINTERFACE=の部分は先程のデバイス名を入れる)
$ sudo sed -i -e ’s/INTERFACE=“lo”/INTERFACE=“wlp3s0b1”' /etc/default/mediatomb

# システム起動時の自動起動を設定 (本ではsystemctlを使用)
$ sudo sysv-rc-conf mediatomb on

# ユニバーサルプラグアンドプレイライブラリを更新
$ wget http://bugs.launchpad.net/ubuntu/+source/libupnp/+bug/1571199/+attachment/4638260/+files/libupnp6_1.6.19+git20160116-1_amd64.deb
$ sudo dpkg -i libupnp6_1.6.19+git20160116-1_amd64.deb

# 再起動
$ sudo reboot

本ではこれでhttp://localhost:50500/にアクセスすれば管理画面が開くとなっていますが、なりませんでした。

$ sudo cat /var/log/mediatomb | tail
…
ERROR: You enabled both, sqlite3 and mysql but only one database driver may be active at a time!

起動時に失敗しているらしくログを見てみると、sqlitemysqlが両方onになっているから片方にしろということでした。

$ sudo vi /etc/mediatomb/config.xml
…
-<sqlite3 enabled=“yes">
+<sqlite3 enabled=“no">
...

sqlite3だけnoにしてmysqlを有効にしました。 しかし再びエラー。

$ sudo cat /var/log/mediatomb | tail
…
ERROR: error in configuration, transcoding profile "oggflac2raw" could not find transcoding command ogg123 in $PATH

次はogg123というコマンドがないということなので、vorbis-toolsをinstallします。

$ sudo apt-get install vorbis-tools

三度目のエラー

ERROR: error in configuration, transcoding profile "vlcmpeg" could not find transcoding command vlc in $PATH

似た感じですが、結構悩まされました。結論から言えばvlcは例のVLCのことで、それをinstallするだけで済みます。

$ sudo apt-get install vlc

mysqlの設定

mediatombについて調べていると、mysqlの設定はしなくてもうまくいくっぽいのですが、私のところでは四度目となるエラーがログに記されてました。

ERROR: The connection to the MySQL database has failed: mysql_error (1045): "Access denied for user 'mediatomb'@'localhost' (using password: NO)"

仕方ないので、mysqlにmediatombというユーザを作ってmediatombというデータベースを割り当てます。

$ mysql -u root -p
mysql > create database mediatomb;
mysql > create user ‘mediatomb’@‘localhost' identified by ‘media tomb’;
mysql > grant all privileges on mediatomb.* to ‘mediatomb’@‘localhost’;
mysql > flush privileges;
mysql > exit;

# データベースの雛形作成
$ mysql -u mediatomb -p mediatomb < /usr/share/mediatomb/mysql.sql

デフォルトではmysqlのパスワードはないもので設定されているので、パスワードをconfig.xmlに追加しておきます。

$ sudo vi /etc/mediatomb/config.xml
...
<mysql enables=“yes”>
  <host>localhost</host>
  <username>mediatomb</username>
 +<password>mediatomb</password>
  <database>mediatomb</mediatomb>
</mysql>

ここまでやって、やっとエラーは出なくなります。

ブラウザで共有するファイルを選択

http://[server-ipaddr]:50500/にアクセスできます。

ログイン画面はconfig.xmlで指定したユーザー名とパスワードでログインできます (デフォルトはmediatomb:mediatomb)。

左上に [ Database | Filesystem] とあるので、Filesystemを選ぶとサーバの中身が木構造になって表示されます。音声ファイルや動画ファイルのところまで辿り、右の+ボタンを押すと共有されます。共有されたファイルやディレクトリはDatabaseで確認できます。私はなぜか画面を更新しないと確認できませんでしたが。

こちらのサイトで詳しく説明されていました。 How to Add Content to MediaTomb

以上でサーバ側の設定は完了です。

補足

config.xmlにmimetypeを追加

<extension-mimetype ignore-unknown="no”>
...
 +<map from="mp4" to="video/mp4"/>
</extension-mimetype>

config.xmlで日本語設定

<import hidden-files=“no”>
 +<filesystem-charset>UTF-8</filesystem-charset>
 +<metadata-charset>CP932</metadata-charset>
 +<playlist-charset>UTF-8</playlist-charset>

私はこの設定をしても文字化けが直りませんでした。

ubuntuにおけるvlcmpeg

公式サイトによると、vlcmpegはデフォルトだと動かないらしいです。参考にしていたどの日本語のサイトにもなってなかった話でよくわかりません。

<agent command=“vlc”...
-vcodec=mp2v
+vcodec=mp1v 

DLNAクライアントで動画を確認

macで見られるDLNAクライアントには、なんとVLCがありました。

と喜ぶのもつかの間、VLCのローカルネットワーク - ユニバーサルプラグ & プレイに共有ファイルが表示されるはずが、なにも表示されません。サーバのIPアドレスなどを設定しなくていいのかと疑問に思うも、VLC 2.* は、なにもしなくても表示されるようです。ただ、一部で表示されないような不具合もあるようで*1、もしかしたらこれにあたるのかもしれません。サーバ上のログは何もエラーを吐いていませんでした。


VLCは諦めてこちらも無料のKODIと呼ばれるソフトをダウンロードしました。かなり豪華なUIに驚きます。

さっそくDLNAサーバに繋いでみると、ちゃんと登録した共有ファイルの一覧が見れます。見たい動画をプレイリストに登録して、いざ視聴。が、残念ながらここで終わりです。視聴できませんでした。サーバ側はまったくエラーを吐いていません。 mac側のログを見てみると次のようになっていました。

$ cat ~/Library/Logs/kodi.log| tail -n 30
...
07:12:35 T:140735217373952  NOTICE: DVDPlayer: Opening: http://192.168.150.50:50500/content/media/object_id/3619/res_id/0/ext/file.mp4
07:12:35 T:140735217373952 WARNING: CDVDMessageQueue(player)::Put MSGQ_NOT_INITIALIZED
07:12:35 T:4704055296  NOTICE: Creating InputStream
07:12:35 T:4704055296   ERROR: CCurlFile::Stat - Failed: Couldn't connect to server(7) for http://192.168.150.50:50500/content/media/object_id/3619/res_id/0/ext/file.mp4
07:12:35 T:4704055296   ERROR: CCurlFile::FillBuffer - Failed: Couldn't connect to server(7)
07:12:35 T:4704055296   ERROR: CCurlFile::Open failed with code 0 for http://192.168.150.50:50500/content/media/object_id/3619/res_id/0/ext/file.mp4
07:12:35 T:4704055296   ERROR: Open - failed to open source <http://192.168.150.50:50500/content/media/object_id/3619/res_id/0/ext/file.mp4>
07:12:35 T:4704055296   ERROR: CDVDPlayer::OpenInputStream - error opening [http://192.168.150.50:50500/content/media/object_id/3619/res_id/0/ext/file.mp4]
07:12:35 T:4704055296  NOTICE: CDVDPlayer::OnExit()
07:12:35 T:140735217373952   ERROR: Playlist Player: skipping unplayable item: 0, path [upnp://e0c9f427-1f7a-42b5-9bcd-077b774c87fd/3619/]
07:12:35 T:140735217373952  NOTICE: CDVDPlayer::CloseFile()
07:12:35 T:140735217373952  NOTICE: DVDPlayer: waiting for threads to exit
07:12:35 T:140735217373952  NOTICE: DVDPlayer: finished waiting
07:12:35 T:140735217373952  NOTICE: CDVDPlayer::CloseFile()
07:12:35 T:140735217373952  NOTICE: DVDPlayer: waiting for threads to exit
07:12:35 T:140735217373952  NOTICE: DVDPlayer: finished waiting

Failed: Couldn't connect to server(7)
ここが一番の原因っぽいのですが、調べても私と状況が違うものばかりでてきて、結局力尽きました。(vcodec=mp1vの場合、mp2vとするとまた別のエラーが出ます)

余力があれば、いつか使えるようにしたいですね。

参考

mysql関連

vlc関連

kodi関連