Hatena::ブログ(Diary)

あっち行ったり、こっち来たり。

2009-12-07

CentOS5.4にPT2、foltia HDをインストールする

PT2を友人のtakaが入手してくれたのでそれを日程の隙を見切ってインストールした。

分配機が無いので、とりあえず片方のチューナーだけ接続してます(イミネー)

構成

PT2,B-CASリーダーのセットアップ

参考URL

とくに詰まることなく、宗子時空の手順通りで基本的にインストール出来た。記述にあるように、今回最新ドライバは試していません。

以下は宗子時空にある手順を64bitCentOSで動作させたときの手順です。ほとんど一緒。

foltiaユーザーの追加

# useradd foltia

# passwd foltia

スマートカードリーダードライバ関連インストール

# yum -y install ccid pcsc-tools

スマートカードサービス起動と自動起動設定

# service pcscd start

# chkconfig pcscd on

開発ツールインストール

# yum -y install kernel-devel kernel-headers gcc

# su - foltia foltiaユーザに切り替え

ここからPT2ドライバ

$ wget http://hg.honeyplanet.jp/pt1/archive/c44e16dbb0e2.tar.bz2 ←b25が使えるちょっと古いバージョンをダウンロード

$ tar xvjf c44e16dbb0e2.tar.bz2

$ cd pt1-c44e16dbb0e2/driver

$ make -C /usr/src/kernels/2.6.18-164.6.1.el5-x86_64 M=`pwd` V=1 ←CentOS5.4ではシンボリックリンクはずれでこうでないと動かなかった、またKernel96ではコンパイルが通らず。164.6.1にてコンパイル確認

$ exit rootに切替

# cp /home/foltia/pt1-c44e16dbb0e2/driver/pt1_drv.ko /lib/modules/`uname -r`/kernel/drivers/video/pt1_drv.ko コンパイルしたドライバをコピー

# depmod -a ←認識させるための作業

# modprobe pt1_drv ←認識させるための作業

# cp /home/foltia/pt1-c44e16dbb0e2/driver/etc/99-pt1.rules /etc/udev/rules.d/ ←これもコピー

ここからPT2ツール編。

# su - foltia foltiaユーザに切替

$ cd /home/foltia/pt1-c44e16dbb0e2/arib25/src

$ make

$ exit rootに切替

# cd /home/foltia/pt1-c44e16dbb0e2/arib25/src

# make install

# su - foltia foltiaユーザに切替

$ cd /home/foltia/pt1-c44e16dbb0e2/recpt1/

$ make

$ exit rootに切替

# echo “/usr/local/lib” > /etc/ld.so.conf.d/recpt1.conf ライブラリ検索パス追加

# ldconfig ライブラリ依存関係再設定

録画テスト

# su - foltia

$ cd /home/foltia/pt1-c44e16dbb0e2/recpt1/

$ ./recpt1 --b25 --strip --device /dev/pt1video0 1 20 ./1-1.ts

正常に動作していれば、1-1.tsファイルが作成されている。Windowsマシンにコピーして録画確認を行った。

設定オプション

b25:B-CAS

strip:未確認

device:PT1のチューナーを指定

1:チャンネル

20:録画時間(秒数)

./1-1.ts:保存ファイル名

PT1のデバイス番号の対応

/dev/pt1video0

/dev/pt1video1

  1. 地デジチューナー

/dev/pt1video2

/dev/pt1video3

ImageMagickインストール

# yum -y install ImageMagick

mplayerインストール

サムネイル作成の為ライブラリインストール

jpeglib

lib64へ入らないのでシンボリックリンクで済ませてます。

# cd /tmp/install

# wget http://www.ijg.org/files/jpegsrc.v7.tar.gz

# tar xvfz jpegsrc.v7.tar.gz

# cd jpegsrc.v7

# ./configure

# make

# make install

# ln -s /usr/local/lib/libjpeg.so.7 /usr/lib64/libjpeg.so.7

# cd /tmp/install

mplayerインストール

# svn co svn://svn.mplayerhq.hu/mplayer/trunk mplayer

# cd mplayer

# ./configure --prefix=/usr --enable-jpeg

# make

# make install

foltiaインストール

参考URL

PostgreSQL周りでしょぼいカレンダーからデータを取得するスクリプト文字コードが異なるエラーが出力されるが、とりあえずfoltiaデフォルトEUC-JPで動作しているので特に変更せずにそのまま動作させています。スクリプトを含めてすべてUTF-8で動作させるようにすれば解消する問題かもしれませんがまだ試してません。

ちなみに環境はUTF-8を利用しています。

後でまとめます。

チャンネル設定

foltiaのチャンネル設定はdatabaseに直接反映させます。

詳しくは

http://svn.dcc-jpl.com/foltia/trunk/doc/index.html

インストールマニュアルのfoltia_stationの項目を読んでもらえばいいのですが、こちらでもいくつか補足しておきます。

stationid:ユニークなID値です。

stationname:しょぼいカレンダーと共通の放送局名です。

stationrecch:周波数チャンネルです。外部入力の場合はS映像入力の場合に0、コンポジット入力の場合に-1を指定します。受信出来ない局には-10を指定します。新規に自動追加されると-10になります。

stationcallsignue:放送局略称を記入します。空白でも構いません。

stationuri:放送局公式URIを記入します。空白でも構いません。

tunertype:外部チューナコントロールコマンドを書き入れます。「Tira2準備」の項で詳しく述べます。空白でも構いません。

tunerch:外部チューナコントロールコマンドを書き入れます。「Tira2準備」の項で詳しく述べます。空白でも構いません。

device:放送局によって録画デバイスを固定するときに用います。たとえば、BS-2専用チューナを常に/dev/video2につないでいるような場合「/dev/video2」と指定します。通常は空白です。

ontvcode:XMLTVで用いる放送局識別コードを記入します。EPG番組表に表示される局は

1. XMLTV初期設定で情報を取得していて

2. foltia_epgにデータがインポートされていて

3.foltia_stationテーブルのontvcodeフィールドにfoltia_epgテーブルのontvchannelフィールドと同じ放送局識別名が記入されている

局になります。デフォルトで関東キー局とBSBSデジタル局、CS局が設定されています。

digitalch:地デジの物理チャンネルを入れます。BSデジタルは日本全国共通なので変更の必要はありません。

digitalstationband:地デジなら0、BSデジタルなら1、CSデジタルなら2を入れます。(現在未使用)

ということですが、mktable.txtの中の設定は

INSERT INTO foltia_station VALUES (406, 'MBS毎日放送', 16, '', '', NULL, NULL, NULL, NULL,16,0);

こんな具合に設定します。

digitalstationbandの項目ですが、未使用と成っていますが、PT2を利用している環境では設定しないと録画できませんでした。

チャンネル情報は

マスプロのチャンネル情報をみれば一撃でした。(宗子さんありがとう)

自分の地域のチャンネルを設定したら、データベースへ反映させます。

$ psql -f mktable.txt foltia

$ perl/getxml2db.pl long

データベースに反映させると、一度DBがすべてテーブル削除されます。よってgetxml2db.plでfoltia_subtitle情報を取得しておきます。

何もしていないと手動録画時を行うときエラーが出ます。

トランスコード

トランスコードを動かすため試行錯誤中

エラーログ

トランスコードが正常に動作していない原因を調べるため、foltiaの動作ログがdebuglog.txtとして出力されているので読んでみると

2009/12/12_00:00:02 recwrap DEBUG UPDATEDB UPDATE foltia_subtitle SET m2pfilename = '407-14-20091211-2330.m2t' WHERE pid = '153577'

2009/12/12_00:00:03 recwrap DEBUG UPDATEDB insert into foltia_m2pfiles values ('407-14-20091211-2330.m2t')

2009/12/12_00:00:03 recwrap Call captureimagemaker 407-14-20091211-2330.m2t

2009/12/12_00:00:05 mklocalizeddir 407 Éñ-HiME

2009/12/12_00:00:05 captureimagemaker mkdir /home/foltia/php/tv/407.localized/

2009/12/12_00:00:05 captureimagemaker mkdir /home/foltia/php/tv/407.localized/img

2009/12/12_00:00:05 captureimagemaker mkdir /home/foltia/php/tv/407.localized/img/407-14-20091211-2330

2009/12/12_00:00:05 captureimagemaker DEBUG mplayer -ss 00:00:10 -vo jpeg:outdir=/home/foltia/php/tv/407.localized/img/407-14-20091211-2330/ -vf scale=192:108 -ao null -sstep 9 -v 3 /home/foltia/php/tv/407-14-20091211-2330.m2t

2009/12/12_00:01:17 recwrap Launch ipodtranscode.pl

2009/12/12_00:01:18 ipodtranscode starting up.

2009/12/12_00:01:48 ipodtranscode DEBUG SELECT foltia_subtitle.pid,foltia_subtitle.tid,foltia_subtitle.m2pfilename,filestatus,foltia_program.aspect ,foltia_subtitle.countno FROM foltia_subtitle, foltia_program, foltia_m2pfiles WHERE filestatus >= 50 AND filestatus < 150 AND foltia_program.tid = foltia_subtitle.TID AND foltia_program.PSP = 1 AND foltia_m2pfiles.m2pfilename = foltia_subtitle.m2pfilename ORDER BY enddatetime ASC LIMIT 1

2009/12/12_00:01:48 ipodtranscode DEBUG 153577,407,407-14-20091211-2330.m2t,70,3,14

2009/12/12_00:01:48 ipodtranscode DEBUG mp4filenamestring -407-14-20091211-2330

2009/12/12_00:01:48 ipodtranscode DEBUG thmfilename MAQ-407-14-20091211-2330.THM

2009/12/12_00:05:25 ipodtranscode DEBUG mplayer -ss 00:01:20 -vo jpeg:outdir=/home/foltia/php/tv/407.localized/mp4/ -ao null -sstep 1 -frames 3 -v 3 /home/foltia/php/tv/407-14-20091211-2330.m2t

2009/12/12_00:05:25 ipodtranscode DEBUG convert -crop 160x120+1+3 -resize 165x126! /home/foltia/php/tv/407.localized/mp4//00000002.jpg /home/foltia/php/tv/407.localized/mp4//MAQ-407-14-20091211-2330.THM

2009/12/12_00:05:26 ipodtranscode DEBUG rm -rf /home/foltia/php/tv/407.localized/mp4//0000000*.jpg

2009/12/12_00:05:26 ipodtranscode ffmpeg /home/foltia/php/tv/407-14-20091211-2330.264

2009/12/12_00:05:27 ipodtranscode TsSplitter /home/foltia/php/tv/407-14-20091211-2330.m2t

2009/12/12_00:05:27 ipodtranscode ERR NOT Exist /home/foltia/php/tv/407-14-20091211-2330_HD.m2t

2009/12/12_00:05:27 ipodtranscode ffmpeg retry /home/foltia/php/tv/407-14-20091211-2330.264

2009/12/12_00:05:27 ipodtranscode ffmpeg retry no crop /home/foltia/php/tv/407-14-20091211-2330.264

2009/12/12_00:05:27 ipodtranscode mplayer /home/foltia/php/tv/407-14-20091211-2330.wav

2009/12/12_00:05:28 ipodtranscode faac /home/foltia/php/tv/407-14-20091211-2330.wav

2009/12/12_00:05:28 ipodtranscode MP4Box /home/foltia/php/tv/407-14-20091211-2330

2009/12/12_00:05:28 ipodtranscode ERR File not exist./home/foltia/php/tv/407-14-20091211-2330.base.mp4

2009/12/12_00:05:28 ipodtranscode ATOM /home/foltia/php/tv/407-14-20091211-2330

2009/12/12_00:05:28 ipodtranscode DEBUG MP4Box -ipod:127:0:0

2009/12/12_00:05:28 ipodtranscode mv /home/foltia/php/tv/407-14-20091211-2330.base.mp4 /home/foltia/php/tv/407.localized/mp4/MAQ-407-14-20091211-2330.MP4

2009/12/12_00:05:28 ipodtranscode ERR MP4 NOT EXIST 153577/MAQ-407-14-20091211-2330.MP4

2009/12/12_00:05:28 ipodtranscode ALL COMPLETE

とりあえずエラーを出力している前後を観るとTsSplitterが無くHD.m2tが作られていない。TsSplitterを導入してないのだから当然だし。

トランスコードの方法

現在のfoltiaのバージョンはTsSplitter.exeを用いてTSの分割を行っており、そこからさらにffmpegでのエンコードMP4boxを用いてmp4コンテナを作成している。

foltiaのts分割はtss.pyとTsSplitter.exeのwine経由での実装となっている。両方を試した結果tss.pyの方が圧倒的に手軽だった。

とりあえず両方書いておきます。

該当部分のコードipodtranscode.pl

	#もしエラーになったらTsSplitする
	if (! -e "$filenamebody.264"){
		&changefilestatus($pid,$FILESTATUSTRANSCODETSSPLITTING);
		unlink("${filenamebody}_tss.m2t");
		unlink("${filenamebody}_HD.m2t");
		if (-e "$toolpath/perl/tool/tss.py"){
		&writelog("ipodtranscode tss $inputmpeg2");
		system("$toolpath/perl/tool/tss.py $inputmpeg2");
		
		}else{
		# TsSplit
		&writelog("ipodtranscode TsSplitter $inputmpeg2");
		system("wine $toolpath/perl/tool/TsSplitter.exe  -EIT -ECM  -EMM -SD -1SEG -WAIT2 $inputmpeg2");
		}
		if(-e "${filenamebody}_tss.m2t"){
		$trcnmpegfile = "${filenamebody}_tss.m2t";
		}elsif (-e "${filenamebody}_HD.m2t"){
		$trcnmpegfile = "${filenamebody}_HD.m2t";
		}else{
		&writelog("ipodtranscode ERR NOT Exist ${filenamebody}_HD.m2t");
		$trcnmpegfile = inputmpeg2 ;
		}
		#再ffmpeg
		&changefilestatus($pid,$FILESTATUSTRANSCODEFFMPEG);
		&writelog("ipodtranscode ffmpeg retry $filenamebody.264");
		system ("ffmpeg -y -i $trcnmpegfile $cropopt $ffmpegencopt");
	}
tss.pyを使う方法

Allegro Moderatoな日常さんが公開されてるtss.pyを利用する。

http://allegro.dtiblog.com/blog-category-2.html

$ cd ~/perl/tool

$ wget http://10.dtiblog.com/a/allegro/file/tss.py.txt

$ mv tss.py.txt tss.py

試しに動かしてみる

$ tss.py test.ts

test_tss.tsファイルが出来る。

うまくいかないことなどがある場合は所有者権限を見直したらいいと思う。

$ chmod 775 tss.py

にしてやると問題無いかと。TsSplitter.exeも似たような問題がありそう。

TsSplitterを使う方法

TsSplitterはwindows向けバイナリバイナリなのでwineで動作させる

wineインストール

参考:http://wingse.blog57.fc2.com/blog-entry-172.html

CentOS 5.4でも手順は同一で大丈夫。

x86バイナリならばyum経由でインストールすることも可能らしい。x86_64も早くyum経由でインストールできるようになって欲しいなー。

$ mkdir foltia_tools

$ cd foltia_tools

$ wget http://ibiblio.org/pub/linux/system/emulators/wine/wine-1.1.34.tar.bz2

$ tar xvjf wine-1.1.34.tar.bz2

$ cd wine-1.1.34

$ ./tools/wineinstall

$ winecfg

インストール時に足りなかった物

# yum install freetype*

wineinstallの実行中にrootになる必要があるが,root権限を与えるユーザーを限定している場合うまくいかない可能性があるので、rootになれるユーザディレクトリに移動して作業する必要がある。

su -コマンドが通るユーザならば良いので、一時的に/etc/groupのwheelにfoltiaを追加しても良い。が、セキュリティリスクがあがる。終わったらちゃんと削除すること。

TsSplitterのインストール

DTV関係ファイル置き場:http://2sen.dip.jp/cgi-bin/dtvup/upload.cgi?page=0&lm=10000

上記サイトにあるTsSplitterを使用。

$ cd ~/foltia_tool

$ wget http://2sen.dip.jp/cgi-bin/dtvup/source/up0140.zip

$ unzip up0140.zip

$ cp TsSplitter.exe ~/perl/tool/

ffmpegオプションの修正

今入手出来る最新のffmpegを入れるとfoltiaの現在のオプションでは.264ファイルを生成する段階でエラーが出たので修正する。

次のオプションを削除

  • loop 1
  • partp4x4 1

次のオプションを追加

  • vpre default

ipodtranscode.plは次のようにした

$ffmpegencopt = " -s 360x202 -deinterlace -r 24.00 -vcodec libx264 -vpre default -g 300 -b 330000 -level 13  -sc_threshold 60 -rc_eq 'blurCplx^(1-qComp)' -refs 3 -maxrate 700000 -async 50 -f h264 $filenamebody.264";
}elsif($trconqty == 2){
$ffmpegencopt = " -s 480x272 -deinterlace -r 29.97 -vcodec libx264 -vpre default -g 300 -b 400000 -level 13  -sc_threshold 60 -rc_eq 'blurCplx^(1-qComp)' -refs 3 -maxrate 700000 -async 50 -f h264 $filenamebody.264";
}elsif($trconqty == 3){#640x352
$ffmpegencopt = " -s 640x352 -deinterlace -r 29.97 -vcodec libx264 -vpre default -g 100 -b 600000 -level 13  -sc_threshold 60 -rc_eq 'blurCplx^(1-qComp)' -refs 3 -maxrate 700000 -async 50 -f h264 $filenamebody.264";
MP4Boxのエラー

MP4Boxを直接実行してみるとlibgpacが見つかりませんとエラーがでる。

MP4Box: error while loading shared libraries: libgpac.so: cannot open shared object file: No such file or directory

対処方法(64bit)

# vi /etc/ld.so.conf.d/local.conf

/usr/local/lib64

# ldconfig

参考:http://web2memo.blog120.fc2.com/blog-entry-61.html


なかなか気付かなかったが、MP4Boxを/usr/local/bin/MP4Boxにインストールしている場合、MP4Boxのpathが見つからずipodtranscodeがエラーとなる。よってipodtranscode.pl内部のMP4Boxを/usr/local/bin/MP4Boxにすべて変更した。

pathはおのおのの環境に合わせて変更するべき。

faacでaacを作成できてないみたい

なエラーだったので、neroAacEncを使うことにした。

http://www.nero8.com/jpn/nero-aac-codec.html

DLしてくる

$ unzip NeroDigitalAudio.zip

$ mv linux/neroAacEnc /home/foltia/perl/tool

$ chmod 775 /home/foltia/perl/tool/neroAacEnc

EPG対応(とりあえず地デジのみ)

  • epgdump
  • tv_grap.pl

の二つを利用する。

  1. mktableの地デジチャンネル設定でontvjapanのパラメータを設定する。
  2. databaseの更新
  3. toolの設定
  4. tv_grap.plでEPGの取得テスト
EPGDUMP

http://www.mda.or.jp/epgrec/index.php/%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E5%89%8D%E3%81%AE%E6%BA%96%E5%82%99

EPGrecのサイトからepgdumpr2をダウンロードする.wgetで取得できないのでFTPなんかでアップしてコピーして使う。

$ tar xvfz epgdumpr2-utf8.tar.gz

$ cd epgdumpr2

$ make

$ cp epgdumpr2/epgdump /home/foltia/perl/tool/

$ vi /home/foltia/perl/tool/tv_grap.pl

http://d.hatena.ne.jp/bsdaemon/20090328(今さらですけどリンク間違ってたみたいなので修正しました。)

http://d.hatena.ne.jp/bsdaemon/20090505

ココの内容をコピーして編集する。

$ /home/foltia/perl/tool/tv_grap.pl //動作テスト

うまく動いたら,cron_foltia_dayly.shに書き込み、cronに登録する。

$ vi /home/foltia/perl/cron_foltia_dayly.sh

#/usr/bin/perl /usr/bin/tv_grab_jp | /home/foltia/perl/xmltv2foltia.pl

/usr/bin/perl /home/foltia/perl/tool/tv_grap.pl

$ crontab -e

1 0 * * * /home/foltia/perl/cron_foltia_dayly.sh >/dev/null 2>&1

epgdumpのBSオプションを使うとなぜかセグメンテーション違反になる。

サムネイル問題への対処

現行foltiaではそのままじゃサムネイルを作成できなかった

対策としてはmplayerを手動でインストールすること、先に挙げたmplayerインストール方法でmplayerのvideo outputのdriverにjpegが追加されるので、これにより、foltiaの内部コードがそのまま動くようになる。今回は次の様にipodtranscode.plを書き換えた

system ("mplayer -nosound -ss 00:01:20 -vo jpeg:outdir=$pspdirname -frames 3 -v 3 $outputfilename");

まず-ao nullを-nosoundにした。faadまわりのエラーが消えたのかな。

  • sstepを削除した方が処理が早いTHMファイル用には二枚目しか利用しないので3枚あれば十分と考えた。

出来ていること

出来なかったこと

  • XMLTVによるEPG取得

XMLTVでEPGを取得できなくなったようで、代替手段を用意する必要がある。

出来ていないこと

  • 文字コード関係エラーの解決
  • EPG予約(BS/CS)
  • サムネイル
  • BS1/BS2の分割(セットアップ済み、動作未確認)
  • BS2が正常に録画できていない(要確認)

更新履歴

文字の量が増えてきたので、タイミングを見てblogじゃないどこかにまとめ直したいかもしれないなー。今後の自分のためにも。

recpt1のバージョンもちょっと気に掛かってる。

Linuxの他のディストリビューションでもインストール手順はほとんど変化なさそうだったし、あんま気にする事じゃなかったのかも。

hkatouhkatou 2011/01/20 14:21 http://d.hatena.ne.jp/bsdaemon/20090328 って、
http://d.hatena.ne.jp/bsdaemon/20090505 ではないでしょうか。

shiworkshiwork 2011/01/25 03:46 hkatouさんご指摘ありがとうございます。
たしかにリンクが間違っていました。修正させていただきました。

hkatouhkatou 2011/02/10 22:08 ご対応くださって、ありがとうございます。
とても有益な内容なので、これで他の方の手間が減ればいいなと思います。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

Connection: close