PT3の設定(CentOS6)

・事前準備

# yum -y install kernel-devel-`uname -r`
# yum -y install yum-priorities git unzip 
# yum -y install gcc gcc-c++ kernel-devel make

・カードリーダ用パッケージをインストール

# yum -y install ccid pcsc-lite pcsc-lite-devel pcsc-lite-libs
# rpm --import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt

# cd /usr/local/src
# wget http://dag.wieers.com/rpm/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm 
# rpm -ivh rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm 
# sed -ie 's/enabled = [01]/enabled = 0/' /etc/yum.repos.d/rpmforge.repo

# yum install --enablerepo=rpmforge -y perl-Gtk2 
# wget ftp://ftp.kddlabs.co.jp/033/Linux/packages/fedora.archive/releases/13/Everything/x86_64/os/Packages/pcsc-perl-1.4.8-2.fc13.x86_64.rpm
# wget ftp://ftp.kddlabs.co.jp/033/Linux/packages/fedora.archive/releases/13/Everything/x86_64/os/Packages/pcsc-tools-1.4.16-1.fc13.x86_64.rpm

# rpm -ivh pcsc-perl-1.4.8-2.fc13.x86_64.rpm
# rpm -ivh pcsc-tools-1.4.16-1.fc13.x86_64.rpm

# /etc/init.d/pcscd start
# pcsc_scan

・arib25(放送波のデコード)のインストール

# yum install -y ld-linux.so.2

# wget http://hg.honeyplanet.jp/pt1/archive/c44e16dbb0e2.zip
# unzip c44e16dbb0e2.zip
# cd /usr/local/src/pt1-c44e16dbb0e2/arib25
# make
# make install

・recpt1(録画ソフト)のインストール

下記URLからrecpt1のパッチ済みのファイル群をダウンロード、/usr/local/src/ あたりに展開する
http://sourceforge.jp/projects/epgrec/downloads/53384/pt1-drv_20111001.tar.gz/

# cd /usr/local/src
# tar zvxf pt1-drv_20111001.tar.gz

# cd pt1-7662d0ecd74b/recpt1
# cp ../patch/bs.patch .
# patch -p0 < bs.patch

# vi pt1_dev.h
※「pt1video」を「pt3video」に書き換える

# ./configure --enable-b25
# make clean
# make
# make install

・PT3ドライバのインストール

# cd /usr/local/src
# echo "blacklist earth-pt1" >> /etc/modprobe.d/blacklist.conf
# git clone https://github.com/m-tsudo/pt3.git
# cd pt3/
# git log
# make
# make install

# reboot

バイスが存在することを確認

# ls /dev/ | grep pt3

録画テスト

# recpt1 --b25 --strip 22 10 /var/test.ts --device /dev/pt3video2
デバイス:/dev/pt3video1(video0/1:衛星放送、video2/3:地上デジタル)
チャネル:22ch
録画時間:10秒
保存先 :/var/test.ts

ライブラリがロードできないというエラーが出る場合は以下で調査・対処

# ldd /usr/local/bin/recpt1
 ※ not found となっているライブラリを確認

# echo "/usr/local/lib" >> /etc/ld.so.conf
# ldconfig

それでもダメな場合は下記
# echo /usr/local/lib > /etc/ld.so.conf.d/usr-local-lib.conf
# ldconfig

チャンネルリストは以下で確認。

# recpt1 --help

・epgdumpr2(EPG取得ソフト)のインストール
以下からソースコードを取得

http://sourceforge.jp/projects/epgrec/releases/?package_id=12517
# cd /usr/local/src
# tar zvxf epgdumpr2_20111001.tar.gz
# cd epgdumpr2
# touch * (そのままでは make できないのでおまじない)
# make clean
# make
# cp epgdump /usr/local/bin/.

# epgdump test /var/test.ts -
※番組名が出てくればOK

・epgrec(録画予約ソフト)インストールの前準備

# yum -y install httpd php php-cli php-sql php-mysql php-mbstring php-process mysql-server
# chkconfig httpd on

# vi /etc/php.ini
date.timezone = Asia/Tokyo
※やらないとPHPのエラーログが出る

# /etc/init.d/httpd start

# /etc/init.d/mysqld start
# chkconfig mysqld on
# mysql -u username -p
mysql> grant all privileges on epgrec.* to username@localhost identified by 'password';
※適当なユーザ名とパスワードで全権限のあるユーザを作る
※データベース名は任意

epgrecで使用するDBを作成する

# mysql -u username -p
mysql> CREATE DATABASE epgrec;
※データベース名は任意

・epgrec のインストール

# usermod -s /bin/bash apache
# /etc/init.d/atd start
# chkconfig atd on

# cd /var/www/html
# git clone git://git.sourceforge.jp/gitroot/epgrec/epgrec.git
# cd epgrec
# cp config.php.sample config.php

# vi config.php
※受信地域に合わせて $GR_CHANNEL_MAP を修正する
※ http://www.maspro.co.jp/contact/bro/bro_ch.html
"識別文字列" => "チャンネル番号"

# cp do-record.sh.pt1 do-record.sh

# chown -R apache.apache /var/www/html/epgrec
# chmod 777 /var/www/html/epgrec/templates_c
# chmod 777 /var/www/html/epgrec/video
# chmod 777 /var/www/html/epgrec/thumbs
# chmod 777 /var/www/html/epgrec/settings
# chmod 777 /var/www/html/epgrec/cache
# chmod 755 /var/www/html/epgrec/do-record.sh

・初回設定

http://"サーバのIP"/epgrec/index.php

EPG取得をcronに設定

# vi /etc/cron.d/getepg
29 */2 * * *   apache   /var/www/html/epgrec/getepg.php

※ getepg の実行はチューナーリソースを使う
 録画ミスを防ぐため、できる限り録画する可能性が少ない時間帯を設定すること

初回起動時はうまく取得できない場合があるので、その場合は手動でEPGを取得する

# /var/www/html/epgrec/getepg.php

・録画先の設定
デフォルトでは /var/www/html/epgrec/video にファイルが保存されるため、
保存したい箇所へのシンボリックリンクを作成する。

# mkdir /mnt/video_ts
# chmod 0777 /mnt/video_ts
# rm -rf /var/www/html/epgrec/video
# ln -s /mnt/video_ts /var/www/html/epgrec/video

・ログ出力の設定
デフォルトでは録画の成功/失敗程度のログしか保存されないため、録画エラー時に原因の特定が困難。
recpt1 実行時のログを /var/www/html/epgrec/do-record.sh.log に出力するよう設定する。

# vi /var/www/html/epgrec/do-record.sh

#!/bin/sh
echo "CHANNEL : $CHANNEL"
echo "DURATION: $DURATION"
echo "OUTPUT  : $OUTPUT"
echo "TUNER : $TUNER"
echo "TYPE : $TYPE"
echo "MODE : $MODE"
echo "SID  : $SID"

RECORDER=/usr/local/bin/recpt1

# fail safe
case $CHANNEL in
    101|102|191|192|193)
	if [ $SID = 'hd' ]; then
	    SID=$CHANNEL
	fi ;;
esac
if [ -z $SID ]; then
    SID='hd'
fi


STARTTIME="`date +'%Y/%m/%d %H:%M:%S'`"

if [ ${MODE} = 0 ]; then
   # MODE=0では必ず無加工のTSを吐き出すこと
   VAR_TMP=$($RECORDER --b25 --strip $CHANNEL $DURATION ${OUTPUT} 2>&1)
elif [ ${MODE} = 1 ]; then
   # 目的のSIDのみ残す
   VAR_TMP=$($RECORDER --b25 --strip --sid $SID $CHANNEL $DURATION ${OUTPUT} 2>&1)
# mode 2 example is as follows
#elif [ ${MODE} = 2 ]; then
#   $RECORDER $CHANNEL $DURATION ${OUTPUT}.tmp.ts --b25 --strip
#   ffmpeg -i ${OUTPUT}.tmp.ts ... 適当なオプション ${OUTPUT}
fi

ENDTIME="`date +'%Y/%m/%d %H:%M:%S'`"

# ログ出力
TMPNAME=/var/www/html/epgrec/do-record.sh.$$
LOGNAME=/var/www/html/epgrec/do-record.sh.log

VAR=${VAR_TMP}

if expr ${OUTPUT} : "/tmp/__temp*" > /dev/null; then
   echo -e "\ngetepg : $STARTTIME : $OUTPUT" >> ${TMPNAME}
   echo ${VAR} >> ${TMPNAME}
else
   echo -e "\nSTARTTIME : $STARTTIME" >> ${TMPNAME}
   echo "ENDTIME   : $ENDTIME" >> ${TMPNAME}
   echo "CHANNEL   : $CHANNEL" >> ${TMPNAME}
   echo "DURATION  : $DURATION" >> ${TMPNAME}
   echo "OUTPUT    : $OUTPUT" >> ${TMPNAME}
   echo "TUNER     : $TUNER" >> ${TMPNAME}
   echo "TYPE      : $TYPE" >> ${TMPNAME}
   echo "MODE      : $MODE" >> ${TMPNAME}
   echo "COMMAND   : $RECORDER --b25 --strip $CHANNEL $DURATION $OUTPUT" >> ${TMPNAME}
   echo ${VAR} >> ${TMPNAME}
fi

flock ${LOGNAME} cat ${TMPNAME} >> ${LOGNAME}
rm -f ${TMPNAME}

・録画時間の変更
epgrecは重複番組の検出が完璧ではないため、複数チューナー環境において、特定の録画条件ではチューナーリソースが余っている状態にも関わらず重複予約があるため録画ができないと判定する場合がある。

【例】
・チューナーが2つ
・「連続した番組の予約」を「行う」に設定
・8ch の 12:00〜13:00, 13:00〜14:00 の番組を予約
この条件でさらに6chの 12:00〜14:00 の番組を予約しようとした場合、
チューナーリソースは余っているが「重複予約のため予約できない」と判定されてしまう。

これを防ぐため、以下の設定を行う。

【重複判定しないようにする】
・環境設定の「チューナー数」を「100」にする

【連続番組をチューナー1つで録画できるようにする】
・環境設定の「連続した番組の予約」の設定を「行わない」にする
(チューナー数を増やしているため、どちらに設定しても変わらないはずだが、一応)
・環境設定の「録画開始の余裕時間」を「10秒」にする

# vi /var/www/html/epgrec/recorder.php
【変更前】
"DURATION" => $endtime - $starttime,

【変更後】
"DURATION" => $endtime - $starttime - 30,

※デフォルトの設定では連続した番組を録画する場合、録画時間が一部重複してしまいチューナーリソースを2つ使ってしまう。
 録画時間を一律30秒減らすことにより、連続した番組の録画でも録画時間が重複しないようにして1つのチューナーリソースしか使わないようにする。
 上記設定では連続した番組の前後の余裕時間は20秒になるが、環境によって調整すること。

・tsファイル名の厄介な文字の削除
OSによっては正しく扱えない文字を「_」に置換する。

# vi /var/www/html/epgrec/Reservation.class.php 

※250行目あたりに追加
mb_regex_encoding ('UTF-8');
$filename = mb_ereg_replace("[ \./\*:<>\?\\|()\'\"&]","_", trim($filename) );
$filename = mb_ereg_replace(" ","_", $filename );
$filename = mb_ereg_replace(" +","_", $filename );
$filename = mb_ereg_replace("[−×〜]","_", trim($filename) );  
// 波ダッシュと全角チルダを置換
$filename = mb_ereg_replace("[\x{301c}\x{ff5e}","_", trim($filename) );
// ハイフンと、ハイフンに似ている記号を置換
$filename = mb_ereg_replace("[\x{002D}\x{2010}\x{2011}\x{2013}\x{2014}\x{2015}\x{2212}\x{ff70}]", "_", trim($filename) );