2011/03/06
CentOS5.5+PT2にminiDLNAを入れて、.TSファイルをBRAVIAで見られる様にする。
録画サーバーを構築した当初、TVのDLNA機能を使って録画した.TSファイルを再生しようと思い、Linux用のDLNAサーバー"mediatomb"を試してみました。しかし、SONYのBRAVIA KDL-32EX700では再生できませんでした。どうやらSONYのテレビはDLNAの規格に厳格な仕様になっているため、"mediatomb"では対応できない様です。そのときも"miniDLNA"を入れればBRAVIAから.TSファイルの再生ができそうだという情報を見つけていましたが、インストールが難しそうなので導入を見送っていました。
今回、録画した.TSファイルの中にサーバーの"SMPlayer"ではうまく再生できない(音が出ない)ものがあったため、改めて"miniDLNA"の導入に取り組んでみることにしました。結果、再生することができましたのでその方法を紹介します。
尚、できることとできないこと、今回行っていないことは以下の通りです。
△サムネイル表示は使っていません。サムネイル画像を生成すれば可能なようですが、録画のためのHDD容量確保を優先しています。
○再生のクオリティはVT放送と同じです。画面の乱れや音声の不具合などは一切ありません。
○"miniDLNA"は"epgrec"とは関係なく単独で動作します。ファイルリストは"miniDLNA"が"inotify"で更新してくれます。
×タイムシフト再生はできません。録画が完了するまでファイルがリストに追加されません。
×テレビ朝日の番組で、DLNA機器にファイルが表示されないため、再生できないものが録画されるときがあります。
   このファイルを、PCのメディアプレイヤで再生すると、デフォルトでワンセグデータが再生されます。
   ファイルがワンセグデータに見えるため、BRAVIAが再生できないファイルだと判断していると思われます。
   現象は、同一番組で毎回起こる訳ではなく、テレビ朝日のどの番組でも起こる可能性があります。

   テレビ朝日の地デジの送信方法とrecpt1に問題があるらしいのですが、BUFFALOのLinkTheaterのDLNAでは再生できました。
   うまくいかない原因は何なのでしょう?
   BRAVIAに手を入れることはできませんので、recpt1かminiDLNAで対策方法を検討する必要がありますね。
×日立Wooo L37-H07 では、再生できませんでした。miniDLNAは、DTCP-IPに対応していません。
 
"miniDLNA"のインストール方法についてはいろいろなHPで紹介されています。多くのHPはソースファイルをコンパイル(make)してインストールする方法を説明していますが、コンパイル(make)するのはなかなかハードルが高そうです。
参考にしたサイトです。
http://d.hatena.ne.jp/ka_maru/20090918/1253273660
http://mypace75.blog92.fc2.com/blog-entry-725.html
http://oshiete.goo.ne.jp/qa/6428185.html
http://kazhat.at.webry.info/201006/article_13.html

結果として、私の環境では、、sourceforge.netからダウンロードしたバイナリファイルが動作したので、そのまま使っています。
このときの環境は、kernel 2.6.18-194.32.1.el5.centos.plus.x86_64 です。
バイナリファイルのインストール方法は以下の通りです。
"miniDLNA"のダウンロードサイトは↓です。
http://en.sourceforge.jp/projects/sfnet_minidlna/
ここから、バイナリファイル"minidlna_1.0.18_static.tar.gz"をダウンロードします。
$ wget http://sourceforge.net/projects/minidlna/files/minidlna/1.0.18/minidlna_1.0.18_static.tar.gz/download
--2011-03-05 22:15:05-- http://sourceforge.net/projects/minidlna/files/minidlna/1.0.18/minidlna_1.0.18_static.tar.gz/download
sourceforge.net をDNSに問いあわせています... 216.34.181.60
sourceforge.net|216.34.181.60|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 302 Found
場所: http://downloads.sourceforge.net/project/minidlna/minidlna/1.0.18/minidlna_1.0.18_static.tar.gz?r=&ts=1299330906&use_mirror=jaist [続く]
--2011-03-05 22:15:06-- http://downloads.sourceforge.net/project/minidlna/minidlna/1.0.18/minidlna_1.0.18_static.tar.gz?r=&ts=1299330906&use_mirror=jaist
downloads.sourceforge.net をDNSに問いあわせています... 216.34.181.59
downloads.sourceforge.net|216.34.181.59|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 302 Found
場所: http://jaist.dl.sourceforge.net/project/minidlna/minidlna/1.0.18/minidlna_1.0.18_static.tar.gz [続く]
--2011-03-05 22:15:07-- http://jaist.dl.sourceforge.net/project/minidlna/minidlna/1.0.18/minidlna_1.0.18_static.tar.gz
jaist.dl.sourceforge.net をDNSに問いあわせています... 150.65.7.130
jaist.dl.sourceforge.net|150.65.7.130|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 1155494 (1.1M) [application/x-gzip]
`minidlna_1.0.18_static.tar.gz.1' に保存中

100%[==============================================================================>] 1,155,494 866K/s 時間 1.3s

2011-03-05 22:15:08 (866 KB/s) - `minidlna_1.0.18_static.tar.gz.1' へ保存完了 [1155494/1155494]
ダウンロードした"minidlna_1.0.18_static.tar.gz.1"を解凍します。
$ su
パスワード:
# tar -zxvf minidlna_1.0.18_static.tar.gz
etc/minidlna.conf
usr/share/locale/de/LC_MESSAGES/minidlna.mo
usr/sbin/minidlna
設定ファイルを編集します。
# vi etc/minidlna.conf
# port for HTTP (descriptions, SOAP, media transfer) traffic
port=8200

# network interface to bind to (this is the only interface that will serve files)
#network_interface=eth0

# set this to the directory you want scanned.
# * if have multiple directories, you can have multiple media_dir= lines
# * if you want to restrict a media_dir to a specific content type, you
# can prepend the type, followed by a comma, to the directory:
# + "A" for audio (eg. media_dir=A,/home/jmaggard/Music)
# + "V" for video (eg. media_dir=V,/home/jmaggard/Videos)
# + "P" for images (eg. media_dir=P,/home/jmaggard/Pictures)
media_dir=V,/var/www/epgrec/video  ←DLNAで公開するフォルダを設定する(複数設定可能)

# set this if you want to customize the name that shows up on your clients
#friendly_name=My DLNA Server

# this should be a list of file names to check for when searching for album art
# note: names should be delimited with a forward slash ("/")
album_art_names=Cover.jpg/cover.jpg/AlbumArtSmall.jpg/albumartsmall.jpg/AlbumArt.jpg/albumart.jpg/Album.jpg/album.jpg/Folder.jpg/folder.jpg
/Thumb.jpg/thumb.jpg  
←この行は前の行の続きで1行です。

# set this to no to disable inotify monitoring to automatically discover new files
# note: the default is yes
inotify=yes

# set this to yes to enable support for streaming .jpg and .mp3 files to a TiVo supporting HMO
enable_tivo=no

# default presentation url is http address on port 80
#presentation_url=http://www.mylan/index.php

# notify interval in seconds. default is 895 seconds.
notify_interval=900

# serial and model number the daemon will report to clients
# in its XML description
serial=12345678
model_number=1
ファイルのパーミッションを確認、設定します。
# chmod 644 etc/minidlna.conf
# chmod 644 usr/share/locale/de/LC_MESSAGES/minidlna.mo
# chmod 755 usr/sbin/minidlna
ファイルを移動します。
# mv etc/minidlna.conf /etc
# mv usr/share/locale/de/LC_MESSAGES/minidlna.mo /usr/share/locale/de/LC_MESSAGES
# mv usr/sbin/minidlna /usr/sbin
動作確認を行います。
# usr/sbin/minidlna
# ps -A | grep minidlna
xxxx ? 00:00:00 minidlna
うまく動いていればTVからファイルにアクセスできるはずです。
うまくいかない場合は必要なライブラリが不足しているかもしれません。コンパイル時に必要なライブラリの情報はたくさんありますが、動作時に必要なライブラリは分かっていません。下記のコンパイル時に必要なライブラリの情報を参考にして、不足していると思われるライブラリを追加してみてください。但し、動作時に"-devel"ライブラリは必要ありません。
# yum --enablerepo=rpmforge install ffmpeg-devel
# yum install sqlite-devel
# yum install flac-devel
# yum install libvorbis-devel
# yum install libexif-devel
# yum install libjpeg-devel
# yum --enablerepo=rpmforge install libid3tag-devel
うまく動作していることが確認できたら、一旦停止して、自動起動の設定を行います。
# ps -A | grep minidlna
xxxx ? 00:00:00 minidlna
# kill xxxx
自動起動用のスクリプトファイルを作ります。
下記を参考に新規にファイルを作成してください。参考ファイルをここに置きます。
# vi /etc/rc.d/init.d/minidlna
#!/bin/sh

# chkconfig: 345 99 10
# description: MiniDLNA is server software with the aim of being fully compliant with DLNA/UPnP-AV clients.

MINIDLNA=/usr/sbin/minidlna
ARGS='-f /etc/minidlna.conf'
PIDFILE=/var/run/minidlna.pid
LOCKFILE=/var/lock/subsys/minidlna

test -f $MINIDLNA || exit 0

. /etc/rc.d/init.d/functions

start(){
    echo -n "Starting minidlna : "
    daemon --pidfile $PIDFILE $MINIDLNA $ARGS
    RETVAL=$?
    [ $RETVAL -ne 0 ] && failure
    [ $RETVAL -eq 0 ] && touch $LOCKFILE && success
    echo
    return $RETVAL
}
stop(){
    echo -n "Stopping minidlna : "
    killproc -p $PIDFILE $MINIDLNA
    RETVAL=$?
    [ $RETVAL -ne 0 ] && failure
    [ $RETVAL -eq 0 ] && rm -f $LOCKFILE && success
    echo
    return $RETVAL
}

case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart|reload)
        stop
        start
        ;;
    status)
        status $MINIDLNA
        ;;
    *)
        echo "Usage: $0 {start|stop|restart|reload|status}"
        exit 1
esac
exit 0
ファイルのパーミッションを設定します。
# chmod 755 /etc/rc.d/init.d/minidlna
"minidlna"をデーモンに登録します。
# chkconfig --add minidlna
    /etc/rc.d/init.d/minidlna内に下記2行の記述がないとエラーになります。
        # chkconfig:
        # description:
    # chkconfig: で指定している3つの数字の意味は次の通りです。
        345 :自動的に起動するランレベルを指定しています。ランレベル3,4,5を指定しています。
         99 : 起動時の順位を指定しています。最後の方で起動するようにしています。
         10 : 終了時の順位を指定しています。最初の方で終了するようにしています。
chkconfigに登録できたか確認します。
# chkconfig --list minidlna
minidlna 0:off 1:off 2:on 3:on 4:on 5:on 6:off
"minidlna"を起動します。
# /sbin/service minidlna start
Starting minidlna :               [ OK ]

BRAVIA KDL-32EX700 からminiDLNAにアクセスできました!

miniDLNAサーバーが、Linuxペンギンのアイコンで表示されます。
もちろん、中のファイル名表示も、再生も問題ありません。クオリティはTVと同じです。
録画が終了しないとファイルが見えないので、追っかけ再生はできません。


 
ちなみに、"minidlna"のソースファイルをコンパイルする方法は以下の通りです。
"miniDLNA"のコンパイル(make)に必要なライブラリをインストールします。
※makeやgccが入っていなければmakeやgccもインストールしてください。
# yum install make
# yum install gcc

# yum install sqlite-devel
# yum install flac-devel
# yum install libvorbis-devel
# yum install libjpeg-devel
# yum install libexif-devel
# yum --enablerepo=rpmforge install ffmpeg-devel
# yum --enablerepo=rpmforge install libid3tag-devel
"miniDLNA"のソースファイルをダウンロードするには"cvs"を使うので、"cvs"が入っていなければインストールします。
# yum install cvs
"cvs"を使って"miniDLNA"のソースファイルをダウンロードします。
$ cvs -d:pserver:anonymous@minidlna.cvs.sourceforge.net:/cvsroot/minidlna login
Logging in to :pserver:anonymous@minidlna.cvs.sourceforge.net:2401/cvsroot/minidlna
CVS password:
パスワードなしで[enter]
$ cvs -z3 -d:pserver:anonymous@minidlna.cvs.sourceforge.net:/cvsroot/minidlna co -P minidlna
   minidlnaフォルダ配下にファイルがダウンロードされます。
コンパイル(make)します。
$ cd minidlna
$ make
./genconfig.sh
Compiling minidlna.c           ※sqliteのバージョンが「3.5.1」より古いと下記のエラーが出てコンパイルできません。
minidlna.c:96:3: 警告: #warning "Your SQLite3 library appears to be too old! Please use 3.5.1 or newer."
Compiling upnphttp.c
Compiling upnpdescgen.c
Compiling upnpsoap.c
upnpsoap.c: In function ‘BrowseContentDirectory’:
upnpsoap.c:994: 警告: implicit declaration of function ‘sqlite3_malloc’
upnpsoap.c:994: 警告: assignment makes pointer from integer without a cast
upnpsoap.c:1001: 警告: assignment makes pointer from integer without a cast
upnpsoap.c: In function ‘SearchContentDirectory’:
upnpsoap.c:1178: 警告: assignment makes pointer from integer without a cast
Compiling upnpreplyparse.c
Compiling minixml.c
Compiling getifaddr.c
Compiling daemonize.c
Compiling upnpglobalvars.c
Compiling options.c
Compiling minissdp.c
Compiling uuid.c
Compiling upnpevents.c
Compiling sql.c
sql.c: In function ‘sql_get_int_field’:
sql.c:82: 警告: implicit declaration of function ‘sqlite3_prepare_v2’
sql.c: In function ‘sql_get_text_field’:
sql.c:183: 警告: implicit declaration of function ‘sqlite3_malloc’
sql.c:183: 警告: assignment makes pointer from integer without a cast
Compiling utils.c
Compiling metadata.c
Compiling scanner.c
Compiling inotify.c
Compiling tivo_utils.c
Compiling tivo_beacon.c
Compiling tivo_commands.c
Compiling tagutils/textutils.c
Compiling tagutils/misc.c
Compiling tagutils/tagutils.c
In file included from tagutils/tagutils.c:146:
tagutils/tagutils-asf.c: In function ‘_asf_load_string’:
tagutils/tagutils-asf.c:248: 警告: unused variable ‘wd64’
Compiling playlist.c
Compiling image_utils.c
Compiling albumart.c
Compiling log.c
Linking minidlna
upnpsoap.o: In function `SearchContentDirectory':
/home/inst_PT2+epgrec/miniDLNA/minidlna/upnpsoap.c:1178: undefined reference to `sqlite3_malloc'
upnpsoap.o: In function `BrowseContentDirectory':
/home/inst_PT2+epgrec/miniDLNA/minidlna/upnpsoap.c:1001: undefined reference to `sqlite3_malloc'
sql.o: In function `sql_get_text_field':
/home/inst_PT2+epgrec/miniDLNA/minidlna/sql.c:147: undefined reference to `sqlite3_prepare_v2'
/home/inst_PT2+epgrec/miniDLNA/minidlna/sql.c:183: undefined reference to `sqlite3_malloc'
sql.o: In function `sql_get_int_field':
/home/inst_PT2+epgrec/miniDLNA/minidlna/sql.c:82: undefined reference to `sqlite3_prepare_v2'
collect2: ld はステータス 1 で終了しました
make: *** [minidlna] エラー 1

このときのyum+rpmforgeのsqliteの最終バージョンは「3.3.6-5」でした。
# cd ..
"sqlite"の「3.5.1」以降のバージョンを探したところ、ATrpms-Testingリポジトリに「sqlite-3.6.20-1」を見つけました。
sqlite-3.6.20-1.el5.x86_64.rpm - CentOS 5 (RHEL 5)
sqlite-devel-3.6.20-1.el5.x86_64.rpm - CentOS 5 (RHEL 5)
これらのパッケージをインストールするには、yumにATrpms-Testingリポジトリをインポートする必要があります。
まず、ATrpmsリポジトリの設定ファイルを作ります。
# vi /etc/yum.repos.d/atrpms.repo
※viエディタ等で下記の様なファイルを作ってください。
[atrpms]
name=Redhat Enterprise Linux $releasever - $basearch - ATrpms
baseurl=http://dl.atrpms.net/el$releasever-$basearch/atrpms/stable
enabled=0
gpgcheck=1
gpgkey=http://ATrpms.net/RPM-GPG-KEY.atrpms

[atrpms-testing]
name=RHEL $releasever - $basearch - ATrpms-testing
baseurl=http://dl.atrpms.net/el$releasever-$basearch/atrpms/testing
enabled=0
gpgcheck=1
gpgkey=http://atrpms.net/RPM-GPG-KEY.atrpms
ATrpmsのGPGキーをインポートします。
# wget http://ATrpms.net/RPM-GPG-KEY.atrpms
# rpm --import RPM-GPG-KEY.atrpms
# rm RPM-GPG-KEY.atrpms
これで、yumで、ATrpmsとATrpms-Testingリポジトリが使えるようになります。
ATrpm-Testingリポジトリからsqlite-develをインストールします。
# yum --enablerepo=atrpms-testing install sqlite-devel
minidlnaをコンパイル(make)します。
# cd minidlna
# make
./genconfig.sh
Compiling minidlna.c
Compiling upnphttp.c
Compiling upnpdescgen.c
Compiling upnpsoap.c
Compiling upnpreplyparse.c
Compiling minixml.c
Compiling getifaddr.c
Compiling daemonize.c
Compiling upnpglobalvars.c
Compiling options.c
Compiling minissdp.c
Compiling uuid.c
Compiling upnpevents.c
Compiling sql.c
Compiling utils.c
Compiling metadata.c
Compiling scanner.c
Compiling inotify.c
Compiling tivo_utils.c
Compiling tivo_beacon.c
Compiling tivo_commands.c
Compiling tagutils/textutils.c
Compiling tagutils/misc.c
Compiling tagutils/tagutils.c
Compiling playlist.c
Compiling image_utils.c
Compiling albumart.c
Compiling log.c
Linking minidlna
Compiling testupnpdescgen.c
Linking testupnpdescgen

コンパイル(make)に成功したら、インストール(make install)します。
# make install
install -d /usr/sbin
install minidlna /usr/sbin
install -d /etc
install --mode=0644 minidlna.conf /etc
インストールが完了すれば、コンパイルするためにインストールした「-devel」パッケージはリムーブしても大丈夫です。
動作確認の方法や、デーモンによる自動起動の設定方法は上記のバイナリファイルをインストールする方法を参照してください。

ホームへ戻る