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) );