YANO's digital garage

Copyright ©YANO All rights reserved. https://www.bravotouring.com/~yano/

Last-modified: 2024-04-17 (水)


[一語一絵/IT系]

DLNA奮闘中 / 2012-10-23 (火)

18日に導入したDLNAサービス。

REGZA 37Z3500からは再生以前にサーバとして見えていない、というところで止まっていたのだが、調べてみるとどうやら<protocolInfo extend="yes"/>の設定を行って「DMS-1.50対応」を機能させる必要があるそうだ。

ただ、Ubuntuを10.10以降に上げるか、mediatombを0.12.1に上げないと、その設定も効かないらしい。

ということで、何はともあれmediatombを0.12.1に上げる事にして、必要そうなパッケージを一式インストール。

yano@GT110b:~$ sudo apt-get install libdlna-dev libexpat-dev libmpeg4ip-dev libmp4v2-dev libtag1-dev libavcodec-dev libavformat-dev libffmpegthumbnailer-dev libexif-dev libcurl4-dev libmagic-dev libdvdnav-dev

素直にmediatomb-0.12.1.tar.gzをbuildしてみたのだが、

yano@GT110b:~$ cd ~/software/dlna/
yano@GT110b:~/software/dlna$ wget http://downloads.sourceforge.net/mediatomb/mediatomb-0.12.1.tar.gz
yano@GT110b:~/software/dlna$ tar xvf mediatomb-0.12.1.tar.gz
yano@GT110b:~/software/dlna$ cd ~/software/dlna/mediatomb-0.12.1
yano@GT110b:~/software/dlna/mediatomb-0.12.1$ autoreconf -i
yano@GT110b:~/software/dlna/mediatomb-0.12.1$ make
~~~~
../src/metadata/ffmpeg_handler.cc:181: error: ‘CODEC_TYPE_VIDEO’ was not declared in this scope
../src/metadata/ffmpeg_handler.cc:212: error: ‘CODEC_TYPE_AUDIO’ was not declared in this scope
というエラーに見舞われる。

どうやら14日git://source.ffmpeg.org/ffmpeg.gitから導入したffmpeg…ていうか、libavが改版されているために、2010年8月リリースのmediatomb-0.12.1が追従できていない模様。

ffmpegをubuntu提供版に入れ直すのは薮さかではないのだが、公式リポジトリのffmpegはlibfaacが有効になっていない問題があるので、[External]Ubuntu11.10でffmpegのlibfaacを使う Unknown encoder ‘libfaac’を参考にMedibuntuからffmpeglibavcodec-extraを差し替えて、もう一度mediatomb-0.12.1のbuild。

yano@GT110b:~/software/dlna/mediatomb-0.12.1$ sudo wget http://www.medibuntu.org/sources.list.d/`lsb_release -cs`.list --output-document=/etc/apt/sources.list.d/medibuntu.list
yano@GT110b:~/software/dlna/mediatomb-0.12.1$ sudo apt-get -q update
yano@GT110b:~/software/dlna/mediatomb-0.12.1$ sudo apt-get --yes -q --allow-unauthenticated install medibuntu-keyring
yano@GT110b:~/software/dlna/mediatomb-0.12.1$ sudo apt-get -q update
yano@GT110b:~/software/dlna/mediatomb-0.12.1$ sudo apt-get --reinstall install ffmpeg libavcodec-extra-52
yano@GT110b:~/software/dlna/mediatomb-0.12.1$ make && sudo make install

…だが、結局ubuntu提供版のffmpegではトランスコードが荒くて使い物にならない印象だったので、14日git://source.ffmpeg.org/ffmpeg.gitから導入したffmpegに戻し、mediatomb/usr/local/includeではなく/usr/include配下にあるubuntu提供版のヘッダファイルしか見えないように細工してbuild。

yano@GT110b:~$ sudo mv /usr/local/include /usr/local/.include
yano@GT110b:~$ cd ~/software/dlna/mediatomb-0.12.1
yano@GT110b:~/software/dlna/mediatomb-0.12.1$ autoreconf -i
yano@GT110b:~/software/dlna/mediatomb-0.12.1$ make

設定ファイル/etc/mediatomb/config.xmlはこんな感じ。「protocolInfo extend」と「mp4」関係の追加がポイントかな。

yano@GT110b:/etc/mediatomb$ diff -bc /etc/mediatomb/config.xml.orig /etc/mediatomb/config.xml
2c2
< <config version="1" xmlns="http://mediatomb.cc/config/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://mediatomb.cc/config/1 http://mediatomb.cc/config/1.xsd">
---
> <config version="2" xmlns="http://mediatomb.cc/config/2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://mediatomb.cc/config/2 http://mediatomb.cc/config/2.xsd">
9,10c9,10
<       <accounts enabled="no" session-timeout="30">
<         <account user="mediatomb" password="mediatomb"/>
---
>       <accounts enabled="yes" session-timeout="30">
>         <account user="admin" password="XXXXXXXX"/>
13c13
<     <name>MediaTomb</name>
---
>     <name>MediaServer</name>
16,18c16,18
<     <webroot>/usr/share/mediatomb/web</webroot>
<     <storage>
<       <sqlite3 enabled="yes">
---
>     <webroot>/usr/local/share/mediatomb/web</webroot>
>     <storage caching="yes">
>       <sqlite3 enabled="no">
21c21
<       <mysql enabled="no">
---
>       <mysql enabled="yes">
23a24
>         <password>mediatomb</password>
27c28,29
<     <protocolInfo extend="no"/><!-- For PS3 support change to "yes" -->
---
>     <protocolInfo extend="yes"/>
>     <!-- For PS3 support change to "yes" -->
45c47
<       <ffmpegthumbnailer enabled="no">
---
>       <ffmpegthumbnailer enabled="yes">
56a59,60
>     <filesystem-charset>UTF-8</filesystem-charset>
>     <metadata-charset>UTF-8</metadata-charset>
58,59c62,63
<       <common-script>/usr/share/mediatomb/js/common.js</common-script>
<       <playlist-script>/usr/share/mediatomb/js/playlists.js</playlist-script>
---
>       <common-script>/usr/local/share/mediatomb/js/common.js</common-script>
>       <playlist-script>/usr/local/share/mediatomb/js/playlists.js</playlist-script>
61,62c65,66
<         <import-script>/usr/share/mediatomb/js/import.js</import-script>
<         <dvd-script>/usr/share/mediatomb/js/import-dvd.js</dvd-script>
---
>         <import-script>/usr/local/share/mediatomb/js/import.js</import-script>
>         <dvd-script>/usr/local/share/mediatomb/js/import-dvd.js</dvd-script>
81a86,93
>         <map from="mpg" to="video/mpeg"/>
>         <map from="MPG" to="video/mpeg"/>
>         <map from="mpeg" to="video/mpeg"/>
>         <map from="mp4" to="video/mp4"/>
>         <map from="m4v" to="video/mp4"/>
>         <map from="ts" to="video/vnd.dlna.mpeg-tts"/>
>         <map from="iso" to="video/dvd"/>
>         <map from="ISO" to="video/dvd"/>
131c143
<   <transcoding enabled="no">
---
>   <transcoding enabled="yes">
136a149,151
>       <transcode mimetype="video/mp4" using="ffmpeg-video"/>
>       <transcode mimetype="video/mpeg" using="ffmpeg-video"/>
>       <transcode mimetype="video/x-ms-wmv" using="ffmpeg-video"/>
147,148c162,163
<       <profile name="vlcmpeg" enabled="no" type="external">
<         <mimetype>video/mpeg</mimetype>
---
>       <profile name="vlcmpeg" enabled="yes" type="external">
>         <mimetype>video/mpeg:DLNA.ORG_PN=MPEG_PS_NTSC</mimetype>
154a170,177
>       <profile name="ffmpeg-video" enabled="yes" type="external">
>         <mimetype>video/mpeg:DLNA.ORG_PN=MPEG_PS_NTSC</mimetype>
> <!--
>         <mimetype>video/mpeg:DLNA.ORG_PN=MPEG_PS_NTSC;DLNA.ORG_OP=10;DLNA.ORG_CI=0</mimetype>
> -->
>         <agent command="/usr/local/bin/mediatomb-ffmpeg-video.sh" arguments="%in %out"/>
>         <buffer size="14400000" chunk-size="512000" fill-size="120000"/>
>       </profile>
/usr/local/bin/mediatomb-ffmpeg-video.sh
#!/bin/bash

FFMPEG_PATH="/usr/local/bin/ffmpeg"
INPUT="$1"
OUTPUT="$2"
OPT_VCODEC="-vcodec mpeg2video"
OPT_VBRATE="-b 5M"
#OPT_VFRATE="-r 25"
OPT_ACODEC="-acodec mp2"
OPT_ABRATE="-ab 128k"
OPT_AFRATE="-ar 44100"
OPT_ACHS="-ac 2"

OPT_ASPECT="-aspect 4:3"
#OPT_ASPECT="-aspect 16:9"
#OPT_THREADS="-threads 0"
#FORMAT="dvd"
FORMAT="mpegts"

exec "${FFMPEG_PATH}" -i "${INPUT}" -f ${FORMAT} \
      ${OPT_VCODEC} ${OPT_VBRATE} ${OPT_VFRATE} \
      ${OPT_ACODEC} ${OPT_ABRATE} ${OPT_AFRATE} ${OPT_ACHS} \
      ${OPT_ASPECT} ${OPT_THREADS} - > "${OUTPUT}"

【参照】
●デジ備忘 http://www.degi.saloon.jp/
DLNAサーバーを試す[MediaTomb][ubuntu]編 – REGZAへ認識させる 2010年11月6日
DLNAサーバーを試す[MediaTomb]編 – トランスコードしてREGZAから視聴 2010年12月1日
●ORBIT SPACE http://www.orsx.net/blog/
Ubuntu11.10でffmpegのlibfaacを使う Unknown encoder ‘libfaac’
●Ubuntu Japanese Wiki https://wiki.ubuntulinux.jp/
UbuntuTips/Server/DLNAserver
●MediaTomb - Free UPnP MediaServer http://mediatomb.cc/
MediaTomb - Browse Files at SourceForge.net
●FFmpeg http://ffmpeg.org/