PT3の設定(Ubuntu12.04)

・事前準備

# apt-get update
# apt-get install git unzip pkg-config linux-headers-3.2.0-23-generic automake build-essential
# vi /etc/apt/sources.list
下記をファイルの末尾に追加
deb http://ftp.jaist.ac.jp/pub/Linux/ubuntu maverick main universe
deb-src http://ftp.jaist.ac.jp/pub/Linux/ubuntu maverick main universe
deb http://security.ubuntu.com/ubuntu maverick-security main universe
deb-src http://security.ubuntu.com/ubuntu maverick-security main universe

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

# apt-get update
# apt-get install pcscd libpcsclite-dev libccid pcsc-tools

# pcsc_scan
Japanese Chijou Digital B-CAS Card (pay TV)
※上記が表示されること

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

# cd /usr/local/src
# 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/
# make
# make install

# reboot

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

# ls /dev/ | grep pt

録画テスト

# recpt1 --b25 --strip 22 10 /var/test.ts --device /dev/pt3video2
デバイス:/dev/pt3video2(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(録画予約ソフト)インストールの事前準備

# apt-get install apache2 php5 libapache2-mod-php5 php5-cli mysql-server php5-mysql

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

# update-rc.d apache2 defaults
# /etc/init.d/apache2 restart
※ ドキュメントルートは /var/www
# update-rc.d mysql defaults
# status mysql
# mysql -u root -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 www-data
# start atd
# update-rc.d atd defaults 
# cd /var/www
# 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 www-data.www-data /var/www/epgrec
# chmod 777 /var/www/epgrec/templates_c
# chmod 777 /var/www/epgrec/video
# chmod 777 /var/www/epgrec/thumbs
# chmod 777 /var/www/epgrec/settings
# chmod 777 /var/www/epgrec/cache
# chmod 755 /var/www/epgrec/do-record.sh

初回設定

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

EPG取得をcronに設定

# cp /var/www/epgrec/cron.d/getepg /etc/cron.d/

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

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

# /var/www/epgrec/getepg.php

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

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

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

# vi /var/www/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

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

if expr ${OUTPUT} : "/tmp/__temp*" > /dev/null; then
   echo -e "\ngetepg: `date +'%Y/%m/%d %H:%M:%S'` : $OUTPUT" >> ${TMPNAME}
#   $RECORDER --b25 --strip $CHANNEL $DURATION ${OUTPUT} 2>> ${TMPNAME}
   $RECORDER --b25 --strip $CHANNEL $DURATION ${OUTPUT} > /dev/null 
else
   echo -e "\nSTARTTIME :`date +'%Y/%m/%d %H:%M:%S'`" >> ${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}
   $RECORDER --b25 --strip $CHANNEL $DURATION ${OUTPUT} 2>> ${TMPNAME}
   echo "ENDTIME   :`date +'%Y/%m/%d %H:%M:%S'`" >> ${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秒」にする
・録画時間を30秒短くする
# vi /var/www/epgrec/recorder.php
【変更前】
"DURATION" => $endtime - $starttime,

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

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

・tsファイル名の2バイト記号の削除
ファイル名に2バイト記号が含まれているとOSがファイル名を正しく取得できない場合があるため、録画時に「_」に置換しておく。

# vi /var/www/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) );