FreeBSDでPT1/PT2を使用して録画環境を立ち上げるためのメモ。
ハードウェア関連の準備
必要ハードウェア
- FreeBSD機
- i386もしくはamd64で、バージョンは8.0-RELEASE以降必須。
- 実働機の例→PTserver
- 現時点の実動機のdmesg抜粋
- i386もしくはamd64で、バージョンは8.0-RELEASE以降必須。
FreeBSD 8.2-STABLE #7: Wed Mar 30 15:08:51 JST 2011 tosy@wig.nu:/usr/obj/usr/src/sys/YUA amd64 CPU: AMD Athlon(tm) II Neo N36L Dual-Core Processor (1297.84-MHz K8-class CPU) real memory = 4294967296 (4096 MB) avail memory = 3981905920 (3797 MB) ad1: 38166MB <INTEL SSDSA2M040G2GC 2CV102HD> at ata0-slave UDMA133 SATA ad4: 1907729MB <WDC WD20EARS-00MVWB0 51.0AB51> at ata2-master UDMA100 SATA 3Gb/s ad6: 1907729MB <WDC WD20EARS-00MVWB0 51.0AB51> at ata3-master UDMA100 SATA 3Gb/s ad8: 1907729MB <WDC WD20EARS-00MVWB0 51.0AB51> at ata4-master UDMA100 SATA 3Gb/s ad10: 1907729MB <WDC WD20EARS-00MVWB0 51.0AB51> at ata5-master UDMA100 SATA 3Gb/s
- PT1もしくはPT2
- 主賓:)
- スマートカードリーダ
- LinuxやFreeBSDではSCR3310-NTTcomが実績が多くて安心。日立のHX520UJ.*系は不可。
PTxドライバ
- 配布元
- 導入手順
- アップローダの都合で拡張子が変更されているので、それぞれ上記の拡張子にリネームしてから展開。
- 手順の通りに"make && make install"すればOK。
- 設定
- /boot/loader.confに以下の行を追記
ptx_load="YES"
- コメント
- 2011/07/04頃、portsに取り込まれました(multimedia/ptx-kmod)
- 注意事項
- ptx-20110326より古いバージョンには、複数枚挿し時に致命的な不具合(page faultに至る)があります。
- 複数ストリーム並行動作時やシステム負荷が重いとき、micropacket errorが発生してdropすることがあります(環境依存?)。
カードドライバ
- 導入するports
- devel/libccid (動作確認: ccid-1.4.4_1)
- devel/pcsc-lite (動作確認: pcsc-lite-1.7.2,2)
- 設定
- /etc/rc.confに以下の行を追記
pcscd_enable="YES"
- コメント
- ccidやpcsc-liteのバージョンによってはB-CASカードを認識しないようです。
- 認識OK: ccid-1.3.13, pcsc-lite-1.6.0_1,2
- 認識NG: ccid-1.4.0, pcsc-lite-1.6.4_1,2
- 認識OK: ccid-1.4.4_1, pcsc-lite-1.7.4,2
- 時期的に、8.1-RELEASEの時点ではOK、その後にNG、2011年の春先?以降はOKです。
- pcsc-lite-1.7.2,2は、動作しますがメモリリークの不具合があります。
- ccidやpcsc-liteのバージョンによってはB-CASカードを認識しないようです。
動作例
- 認識しているところのdmesg抜粋
ptx0: <EARTHSOFT PT2> mem 0xfe8ff000-0xfe8fffff at device 4.0 on pci3 ptx1: <EARTHSOFT PT2> mem 0xfe8fe000-0xfe8fefff at device 5.0 on pci3 ugen2.2: <NTT Communications Corp.> at usbus2
参考リンク
- だえもんだもんさん
ソフトウェア関連の準備
ARIB STD-B25仕様確認テストプログラム
- 導入手順
- PTxドライバ(ptx-20110326)に同梱のパッチを当てること。
- 上記パッチ適用後、標準出力対応パッチ(b25_stdio.patch)を当てること。
- 普通にmakeすると実行形式"b25"が作成されます。
TSストリーム分離
- 配布元
- tsstrip.c (拙作)
- 色々と処理がアレなので、自己責任で…。
- tsstrip.c (拙作)
- 導入手順
- 普通にコンパイル。
- 動作
- 必要最低限のストリームだけを残して、他のストリームは捨てます。
- ECMなども捨ててしまうので、必ずb25を先に通す必要があります。
- 地デジのHD放送は、通常は自動判別で大丈夫です。衛星放送などはSID指定が必要な場合もあります。
- 録画開始から約20秒以内にPMTが更新された場合、更新以前の内容を捨てます(いわゆる「わかさトラップ」対策)。
- このため、番組直前の余白は最大でも15秒程度に留める必要があります(長さはソース内定義で調整可能)。
- ファイルI/Oだけでなく、パイプ(標準入出力)でも動作可能です。
- 必要最低限のストリームだけを残して、他のストリームは捨てます。
録画wrapper
- 配布元
- recptx.pl … PTxドライバ(ptx-20110326)同梱のスクリプト
- recpt1.patch (拙作)
- 使用例
- ./recpt1 --b25 --strip --sid 103 103 1520 371-59-20100913-1800.m2t
- NHK-BShiで25分20秒間録画(B25解除あり・ストリーム選択あり)。
- 引数は、Linux界隈でデファクトスダンダードなrecpt1コマンドと互換性があります。
- ./recpt1 --b25 --strip --sid 103 103 1520 371-59-20100913-1800.m2t
- 注意
- チューナー数は内部で決め打ちしています。そのままだと2枚挿し前提です。
- 変更する場合は、冒頭の下記の行を修正してください。
- チューナー数は内部で決め打ちしています。そのままだと2枚挿し前提です。
@isdb_s_tuners = ("0.s0", "0.s1", "1.s0", "1.s1"); @isdb_t_tuners = ("0.t0", "0.t1", "1.t0", "1.t1");
参考リンク
foltiaの導入
以下の手順はメモ書き程度なので、参考までに。
用意するもの
- foltia本体
- パッケージ版は古いようなので、svnで取り出し。今回使用したのはrevision 135。
% svn co http://svn.dcc-jpl.com/foltia/trunk foltia
- portsから導入
- www/apache22 (apache-2.2.17_1)
- databases/sqlite3 (sqlite3-3.7.5)
- lang/php5 (php5-5.3.5) APACHE=YES MULTIBYTE=YES
- databases/php5-sqlite (php5-sqlite-5.3.5) UTF8=YES
- lang/php5-extensions (php5-extensions-1.4) MBSTRING=YES
- databases/p5-DBD-DQLite (p5-DBD-SQLite-1.31)
- japanese/p5-Jcode (ja-p5-Jcode-2.07)
- www/p5-libwww (p5-libwww-5.837)
- sysutils/p5-Schedule-At (p5-Schedule-At-1.11)
作業・修正など
- システム設定
- foltiaユーザーの作成(UID/GID=88/88)。groupsにはwww(80)追加。
- /usr/local/etc/apache22/httpd.confの以下の行を修正。
User foltia
- /usr/local/etc/apache22/Includes/foltia.confの作成
## Foltia AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps Alias /foltia/ "/home/foltia/php/" <Directory "/home/foltia/php/"> Order allow,deny Allow from all AddDefaultCharset off DirectoryIndex index.php </Directory>
- /etc/crontabで、atrunを5分おき実行(*/5)から毎分実行(*)に修正
- foltiaユーザにatコマンド実行権限を付与(空ファイル/etc/at/at.denyを作成)
- foltia設定・修正
- 以下は/home/foltia/ディレクトリで、folitaユーザで実行。
- サイトから取得したfoltia本体のfoltia/install/phpおよびfoltia/install/perlディレクトリを、/home/foltia/直下にコピー。
- 必要に応じて~/.forwardを設定。
- perl/foltia_conf1.plを設定。
- $recfolderpathと$haveirdaunitのあたりを修正。
cp perl/foltia_conf1.pl.template perl/foltia_conf1.pl vi perl/foltia_conf1.pl
- php/foltia_config2.phpを設定
cp php/foltia_config2.php.template php/foltia_config2.php vi php/foltia_config2.php
- $recfolderpath,$httpmediamappath,$useenvironmentpolicyのあたりを修正し、以下の行を追加。
date_default_timezone_set("Asia/Tokyo");
- PostgreSQL関連の記述を削除
- use DBD::Pg;の行をコメントアウト
% vi `grep -l DBD::Pg perl/*`
- データベースの作成と動作確認
- 初期データベース作成
% sqlite3 -batch -init mktable.sqlite.txt foltia.sqlite
- no such tableのエラーが数個出るけど無視
- crontabの設定(実行時刻や間隔は適宜調整)
% crontab -e 7 * * * * /home/foltia/perl/schedulecheck.pl > /dev/null 2>&1
- しょぼかるから番組表を取得
% perl/getxml2db.pl long
- ブラウザで表示して動作確認(http://サーバ名/foltia/)
カスタマイズ
- 自分勝手な修正
- デジタル専用なのでlistreserve.phpで"録画レート"などの表示部を削除
- ipodtranscodeを使わないのでrecwrap.plの該当部を削除
- しょぼかるにログインするためgetxml2db.plを改変してIDを通すように
- 重複チェックはrecpt1内で行うためrecwrap.plのcontinuousrecordingcheck()削除