PS3 Media Server on Ubuntu 8.04
我が家のDLNAサーバー「MediaTomb」は順調に稼働していて、自鯖機上のMP3ファイルや、画像、若干の映像ファイルを問題なく再生してくれる。しかーし、通常のMediaTombでは再生できないISOファイルを直接再生できるというDLNAサーバ、その名も「PS3 Media Server」というモノが世の中に存在するという事で、入れてみた。
ちょっと手間取ったところもあったが、ISOファイルをネットワーク経由してPS3で再生できるようになった。
インストール
PS3 Media Server本体(zipファイル「pms-linux-1.10.5.tgz」)をサイトからダウンロードしてくる。 任意のディレクトリに展開。
$ cd /tmp
$ wget http://ps3mediaserver.googlecode.com/files/pms-linux-1.10.5.tgz
$ tar txvf pms-linux-1.10.5.tgz
$ mv pms-linux-1.10.5/ /opt/ps3mediaserver
$ cd /opt/ps3mediaserver
$ chmod +x PMS.sh
$ wget http://ps3mediaserver.googlecode.com/files/pms-linux-1.10.5.tgz
$ tar txvf pms-linux-1.10.5.tgz
$ mv pms-linux-1.10.5/ /opt/ps3mediaserver
$ cd /opt/ps3mediaserver
$ chmod +x PMS.sh
その他、PS3 Media Serverを動かす為の、必要なソフトを下記の手順でインストール。
$ sudo apt-get install mplayer mencoder sun-java6-jre
PSM.conf
設定ファイル /opt/ps3mediaserver/PSM.conf は、いろいろいぢったり、ネットを参照したりした結果、下記のようになった。
folders=/share/video # 動画ファイル格納フォルダ
hostname=192.168.xx.xx # server自体 のIPアドレス
network_interface=eth0 # サーバーのNIC
mencoder_subcp = cp932
mencoder_fontconfig = true
mencoder_ass_defaultstyle = true
# 下記は、ISOファイルをそのままPS3に送る設定、らしい
codec_spec_script = vcodec == mpeg2 :: -ovc copy -nosync\ncontainer == iso :: -ovc copy -nosync\nco
ntainer == iso :: -oac copy -nosync\n
hostname=192.168.xx.xx # server自体 のIPアドレス
network_interface=eth0 # サーバーのNIC
mencoder_subcp = cp932
mencoder_fontconfig = true
mencoder_ass_defaultstyle = true
# 下記は、ISOファイルをそのままPS3に送る設定、らしい
codec_spec_script = vcodec == mpeg2 :: -ovc copy -nosync\ncontainer == iso :: -ovc copy -nosync\nco
ntainer == iso :: -oac copy -nosync\n
その後、PMS.sh を起動
$ sudo PMS.sh
これで、PS3から、PS3 Media Server認識され、ビデオのメニュー一覧に「PS3 Media Server」が表示されるようになる。
起動設定
自鯖機が起動したら、自動的に起動するようにスクリプトを設置。
debian/ubuntu用のinitスクリプトを、こちらから拝借。
スクリプトをダウンロードし、自環境に合うように設定変更する。
ちなみに、私の環境で変更したのは、$PMS_HOME のみ。(下記下線部)
$ cat /etc/init.d/psmd
#! /bin/sh
### BEGIN INIT INFO
# Provides: pms
# Required-Start: $network $local_fs $remote_fs
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: PS3 UPnP Media Server
### END INIT INFO
##
## Version 2.1 By RyLoS 06-nov-2009 (email: rylos78@gmail.com)
##
# Source init-functions:
#source /lib/lsb/init-functions
. /lib/lsb/init-functions
# Script variables:
MONTH=`date +%Y-%m`
PMS_HOME="/opt/ps3mediaserver"
PMS_LOG="/var/log/pms/pms-$MONTH.log"
DESC="PS3 UPnP Media Server"
NAME="PMS.sh"
# Path to executable:
DAEMON="$PMS_HOME/$NAME"
# Run as user/group [UPDATE THESE TO MAKE VALID]:
PMSUSER=pms
PMSGROUP=pms
# update PATH:
PATH="$PMS_HOME:${PATH:+$PATH:}/usr/sbin:/sbin"
# export env-vars
export PATH PMS_HOME PMS_LOG
# Exit if the package is not installed
if [ ! -x "$DAEMON" ]; then {
echo "Couldn't find $DAEMON or not executable"
exit 99
}
fi
#
# Function that starts the daemon/service
#
do_start() {
# Return
# 0 if daemon has been started
# 1 if daemon was already running
start-stop-daemon --start --quiet --chdir $PMS_HOME --chuid $PMSUSER:$PMSGROUP --exec $DAEMON --test > /dev/null || return 1
start-stop-daemon --start --quiet --chdir $PMS_HOME --chuid $PMSUSER:$PMSGROUP --exec $DAEMON > $PMS_LOG 2>&1 &
}
#
# Function that starts the daemon/service
#
do_start() {
# Return
# 0 if daemon has been started
# 1 if daemon was already running
start-stop-daemon --start --quiet --chdir $PMS_HOME --chuid $PMSUSER:$PMSGROUP --exec $DAEMON -
-test > /dev/null || return 1
start-stop-daemon --start --quiet --chdir $PMS_HOME --chuid $PMSUSER:$PMSGROUP --exec $DAEMON >
$PMS_LOG 2>&1 &
}
#
# Function that stops the daemon/service
#
do_stop() {
# Return
# 0 if daemon has been stopped
# 1 if daemon was already stopped
# 2 if daemon could not be stopped
# other if a failure occurred
start-stop-daemon --stop --signal 2 --retry 5 --quiet --name java
RETVAL="$?"
[ "$RETVAL" = 2 ] && return 2
return "$RETVAL"
}
case "$1" in
start)
log_daemon_msg "Starting $DESC" "$NAME"
do_start
case "$?" in
0|1) log_end_msg 0 ;;
2) log_end_msg 1 ;;
esac
;;
stop)
log_daemon_msg "Stopping $DESC" "$NAME"
do_stop
case "$?" in
0|1) log_end_msg 0 ;;
2) log_end_msg 1 ;; esac
;;
*)
echo "Usage: $SCRIPTNAME {start|stop}" >&2
exit 3
;;
esac
exit 0
#! /bin/sh
### BEGIN INIT INFO
# Provides: pms
# Required-Start: $network $local_fs $remote_fs
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: PS3 UPnP Media Server
### END INIT INFO
##
## Version 2.1 By RyLoS 06-nov-2009 (email: rylos78@gmail.com)
##
# Source init-functions:
#source /lib/lsb/init-functions
. /lib/lsb/init-functions
# Script variables:
MONTH=`date +%Y-%m`
PMS_HOME="/opt/ps3mediaserver"
PMS_LOG="/var/log/pms/pms-$MONTH.log"
DESC="PS3 UPnP Media Server"
NAME="PMS.sh"
# Path to executable:
DAEMON="$PMS_HOME/$NAME"
# Run as user/group [UPDATE THESE TO MAKE VALID]:
PMSUSER=pms
PMSGROUP=pms
# update PATH:
PATH="$PMS_HOME:${PATH:+$PATH:}/usr/sbin:/sbin"
# export env-vars
export PATH PMS_HOME PMS_LOG
# Exit if the package is not installed
if [ ! -x "$DAEMON" ]; then {
echo "Couldn't find $DAEMON or not executable"
exit 99
}
fi
#
# Function that starts the daemon/service
#
do_start() {
# Return
# 0 if daemon has been started
# 1 if daemon was already running
start-stop-daemon --start --quiet --chdir $PMS_HOME --chuid $PMSUSER:$PMSGROUP --exec $DAEMON --test > /dev/null || return 1
start-stop-daemon --start --quiet --chdir $PMS_HOME --chuid $PMSUSER:$PMSGROUP --exec $DAEMON > $PMS_LOG 2>&1 &
}
#
# Function that starts the daemon/service
#
do_start() {
# Return
# 0 if daemon has been started
# 1 if daemon was already running
start-stop-daemon --start --quiet --chdir $PMS_HOME --chuid $PMSUSER:$PMSGROUP --exec $DAEMON -
-test > /dev/null || return 1
start-stop-daemon --start --quiet --chdir $PMS_HOME --chuid $PMSUSER:$PMSGROUP --exec $DAEMON >
$PMS_LOG 2>&1 &
}
#
# Function that stops the daemon/service
#
do_stop() {
# Return
# 0 if daemon has been stopped
# 1 if daemon was already stopped
# 2 if daemon could not be stopped
# other if a failure occurred
start-stop-daemon --stop --signal 2 --retry 5 --quiet --name java
RETVAL="$?"
[ "$RETVAL" = 2 ] && return 2
return "$RETVAL"
}
case "$1" in
start)
log_daemon_msg "Starting $DESC" "$NAME"
do_start
case "$?" in
0|1) log_end_msg 0 ;;
2) log_end_msg 1 ;;
esac
;;
stop)
log_daemon_msg "Stopping $DESC" "$NAME"
do_stop
case "$?" in
0|1) log_end_msg 0 ;;
2) log_end_msg 1 ;; esac
;;
*)
echo "Usage: $SCRIPTNAME {start|stop}" >&2
exit 3
;;
esac
exit 0
PS3 Media Server起動用のユーザ「pms」を作成。
$ sudo mkuser pms
ランレベル 2, 3, 4, 5 で「on」、0, 1, 6で「off」にsysv-rc-confを使って設定。
$ sudo sysv-rc-conf --level 2 pmsd on
$ sudo sysv-rc-conf --level 3 pmsd on
$ sudo sysv-rc-conf --level 4 pmsd on
$ sudo sysv-rc-conf --level 5 pmsd on
$ sudo sysv-rc-conf --level 0 pmsd off
$ sudo sysv-rc-conf --level 1 pmsd off
$ sudo sysv-rc-conf --level 6 pmsd off
$ sudo sysv-rc-conf --level 3 pmsd on
$ sudo sysv-rc-conf --level 4 pmsd on
$ sudo sysv-rc-conf --level 5 pmsd on
$ sudo sysv-rc-conf --level 0 pmsd off
$ sudo sysv-rc-conf --level 1 pmsd off
$ sudo sysv-rc-conf --level 6 pmsd off
ランレベルの設定確認
$ sudo sysv-rc-conf -list pmsd
pmsd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
pmsd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
これで、PS3 Media Server を使ってISOファイルの再生が可能となった。
念のため、MediaTombの動作確認もしたが、問題なく動作した。 懸念された互いの干渉もないようだ。
動かした感じ
サーバ上に1個のISOファイルを置いて、PS3から再生している際のCPU負荷を見てみた。
最初の5,6分は負荷が100%近い(IO waitも結構な負荷になる。)が、それを過ぎると、大体10%以下で負荷が推移するようだ。 AthlonXP+ の1GHz駆動なCPUから考えると上出来か。(メモリは512MB)
但し、早送りは苦手。 というかほぼ出来ない。 これはサーバのパワー不足かもしれないが。 その他、DVDのメニューは使えないし、いろいろ制限があることはある。
◆関連ログ:sysv-rc-conf / 「MediaTomb」ネタ


![トロン:レガシー [Blu-ray]](http://ecx.images-amazon.com/images/I/51stKBdzK%2BL._SL160_.jpg)
![ミッション:インポッシブル/ゴースト・プロトコル ブルーレイ+DVDセット(デジタル・コピー付) [Blu-ray]](http://ecx.images-amazon.com/images/I/51foiQ98iuL._SL160_.jpg)


![ハリー・ポッターと死の秘宝 PART 2 [Blu-ray]](http://ecx.images-amazon.com/images/I/61TQHHRDBAL._SL160_.jpg)
COMMENTS
※本記事に関係ないと判断した COMMENTS はお断りしております。