LAN内の他のPCから epgrec を使う
ローカルIPを固定にしておいて、epgrec の システム設定 > インストールURL の値を http://録画機のローカルIP/epgrec にした。これでこのURLにアクセスすれば録画予約・視聴ができる。
Ubuntu 11.10 へ録画予約システム epgrec を導入
KTV-FSUSB2 と recfsusb2n の導入により地デジの録画ができるようになったが、これだけでは実用性に乏しい。そこで、録画予約システムである epgrec を導入する。
LAMP環境の構築
LAMP環境が必要なので、構築する。
$ sudo apt-get install apache2 php5 libapache2-mod-php5 php5-cli mysql-server php5-mysql
Apache を再起動。
$ sudo /etc/init.d/apache2 restart
/etc/mysql/my.cnf を編集して MySQL の文字コードを UTF-8 にする。
[mysqld] default-character-set = utf8 # 追加 [mysql] default-character-set = utf8 # 追加
MySQL で epgrec 用DBを作り、ユーザー epgrec(ユーザー名は何でもよい)が使えるようにする。
$ mysql -u root -p Enter password: mysql> create database epgrec; mysql> grant all privileges on *.* to epgrec@localhost identified by 'ユーザー epgrec のパスワード'; mysql> exit
インストール前の準備
epgdumpr2 のインストール
まず epgdump が必要らしいので、これをインストールする。これでTSファイルから番組表を抽出するらしい。ソースはDTV関係ツールのアップローダで配布されているが、見たところパッチがいろいろあっていまいちよくわからない。幸いにして、foltia のリポジトリにパッチ適用済みのソースがまとめられているようなので、これを使うことにした。
foltia の trunk の中にある epgdumpr2 を利用する。これを make すると、
$ make gcc -std=c99 -O2 -Wall -g -Werror -Wno-return-type -c epgdump.c gcc -std=c99 -O2 -Wall -g -Werror -Wno-return-type -c aribstr.c gcc -std=c99 -O2 -Wall -g -Werror -Wno-return-type -c eit.c eit.c: 関数 ‘conv_title_subtitle’ 内: eit.c:295:31: エラー: 配列の添字が配列の境界を上回っています [-Werror=array-bounds] cc1: すべての警告はエラーとして取り扱われます make: *** [eit.o] エラー 1
とエラーが出て止まってしまうので、ここを参考に eit.c を修正。
--- eit.c_orig 2009-11-18 12:23:01.000000000 +0900 +++ eit.c 2011-08-27 15:50:35.000000000 +0900 @@ -292,13 +292,15 @@ char *ptr2 ; char *newsubtitle ; - for(lp = 0 ; subtitle_cnv_str[lp] != NULL ; lp++){ + while( subtitle_cnv_str[lp] != NULL ){ ptr = strstr(eitptr->title, subtitle_cnv_str[lp]); if(ptr == NULL){ + lp++; continue ; } // タイトルがなくならないように if(ptr == eitptr->title){ + lp++; continue ; } ptr2 = ptr ;
これだけだともう一つエラーが出るので、
$ make gcc -std=c99 -O2 -Wall -g -Werror -Wno-return-type -c eit.c gcc -std=c99 -O2 -Wall -g -Werror -Wno-return-type -c ts.c gcc -std=c99 -O2 -Wall -g -Werror -Wno-return-type -c util.c util.c: 関数 ‘parseOTHERdesc’ 内: util.c:78:6: エラー: 変数 ‘descriptor_tag’ が設定されましたが使用されていません [-Werror=unused-but-set-variable] cc1: すべての警告はエラーとして取り扱われます make: *** [util.o] エラー 1
--- util.c_orig 2009-11-18 12:23:01.000000000 +0900 +++ util.c 2011-08-28 17:06:52.000000000 +0900 @@ -75,10 +75,10 @@ int parseOTHERdesc(unsigned char *data) { int boff = 0; - int descriptor_tag; + //int descriptor_tag; int descriptor_length; - descriptor_tag = getBit(data, &boff, 8); + (void)getBit(data, &boff, 8); descriptor_length = getBit(data, &boff, 8); /* printf("other desc_tag:0x%x\n", descriptor_tag); */
util.c も修正する。これで改めて make するとうまくいく。できた epgdump を /usr/local/bin にコピー。
$ sudo cp epgdump /usr/local/bin
at の確認と設定
Ubuntu 11.10 desktop 版にはデフォルトで at がインストールされていた。/etc/at.deny を開き、www-data を削除。
/etc/passwd の確認
Ubuntu 11.10 desktop 版ではそのままでOK。
epgrec のインストールと設定
インストール
下のページから最新のアーカイブをダウンロードする。現在、epgrec_20111001.tar.gz が最新。
ダウンロードしたアーカイブを httpd のドキュメントルートに展開。
$ sudo tar xvzpf epgrec_20111001.tar.gz -C /var/www/
config.php.sample を config.php にリネームして編集。
$ sudo mv /var/www/epgrec/config.php.sample /var/www/epgrec/config.php $ sudo gedit /var/www/epgrec/config.php
16行目の MX TV のコメントアウトを外し、19行目のテレ玉をコメントアウト。
チューナーは KTV-FSUSB2 を利用するので、do-record.sh は以下のようにした。
#!/bin/sh echo "CHANNEL : $CHANNEL" echo "DURATION: $DURATION" echo "OUTPUT : $OUTPUT" echo "TUNER : $TUNER" echo "TYPE : $TYPE" echo "MODE : $MODE" RECORDER=/usr/local/bin/recfsusb2n #B25=/usr/local/bin/b25_bcas $RECORDER --b25 $CHANNEL $DURATION ${OUTPUT} >/dev/null
最後に、
$ OUTPUT=test.ts CHANNEL=27 DURATION=30 TUNER=0 MODE=0 TYPE=GR /var/www/epgrec/do-record.sh
などとしてカレントディレクトリにちゃんと録画されるかテスト。
初期設定
ブラウザで http://localhost/epgrec/ にアクセスすると初期設定画面が出るので指示に従う。最初のパーミッションのチェックで /var/www/epgrec/ 内の templates_c, video, thumbs, settings, cache を777にしろと言われた。
次のページの MySQL 接続ユーザー名・MySQL 接続パスワード・使用データベース名は MySQL で設定した値を入れる。その他はとりあえずデフォルトにした。そのまた次のページもそのまま。
「初期設定が完了しました…」と出るので、「このリンクをクリックするとEPGの初回受信が始まります」をクリックして初回受信をする。20~50分程度かかるらしい。
これで http://localhost/epgrec/ にアクセスすると番組表が表示されるはずだが、このときはなぜだか番組表が空になっていた。ログ(左上の 環境設定 > 動作ログを見る)を見てみると、
getepg:: 正常な/tmp/__temp.xml_gr26が作成されなかった模様(放送間帯でないなら問題ありません)
のような警告がチャンネルの数だけ表示されている。原因はよくわからなかったが、手動で
$ /var/www/epgrec/getepg.php
として再生成したらちゃんと表示された。最後に、
$ sudo cp /var/www/epgrec/cron.d/getepg /etc/cron.d/
として番組表の更新を cron に登録。デフォルトでは2時間おきになっている。
録画
これであとは予約すれば録画してくれる……と思ったら、録画に失敗していた。/var/www/epgrec/ が root のものになっていたのがいけなかったようだ。というわけで、
$ sudo chown -R www-data:www-data /var/www/epgrec/
で www-data に変更。……でもダメで、recfsusb2n を動かす video グループにユーザー www-data を追加していないのが原因だった。
$ sudo gpasswd -a www-data video
recfsusb2n と VLC で地デジをリアルタイム視聴する
Ubuntu 11.10 へ recfsusb2n for linux を導入 のつづき。
リアルタイム視聴のために簡単なシェルスクリプトを作った。KEY がリモコンのキーなんかに書いてあるチャンネル、CH が物理チャンネル。この対応については 地上デジタル放送 チャンネル一覧表 を参照。
#!/bin/bash KEY=$1 while [ "$CH" = "" ]; do case $KEY in 1) CH=27;; # NHK総合 2) CH=26;; # NHK教育 4) CH=25;; # 日本テレビ 5) CH=24;; # テレビ朝日 6) CH=22;; # TBS 7) CH=23;; # テレビ東京 8) CH=21;; # フジテレビ 9) CH=20;; # 東京MX 12) CH=28;; # 放送大学 *) cat <<-_EOT_ チャンネルを入力してください 1) NHK総合 2) NHK教育 4) 日本テレビ 5) テレビ朝日 6) TBS 7) テレビ東京 8) フジテレビ 9) 東京MX 12) 放送大学 _EOT_ read KEY ;; esac done recfsusb2n --b25 $CH - - | vlc --quiet --width 1000 - pkill recfsusb2n pkill vlc exit 0
はてなブログのシンタックスハイライトってまだ実装されてないのか(´・ω・`)
鼻毛鯖へ Ubuntu 11.10 Desktop 64bit をインストール
26日、鼻毛鯖こと NEC Express5800/S70 タイプPJ が売りに出ていたので、旬を過ぎた感もあるが購入してみた。16,800円-クーポン4,000円=12,800円。
NEC Express5800/S70 タイプPJ NP8100-9021PS04
- 出版社/メーカー: NEC
- メディア: エレクトロニクス
- クリック: 2回
- この商品を含むブログを見る
- NEC Express5800/S70 タイプPJ NP8100-9021PS04 - NTT-X Store
- 特長:S70 タイプPJ | NEC
- NEC Express5800/S70 タイプRB - wiki@nothing
翌27日(今日)、さっそく到着。早い。
OSを買うのもなんなので、今回は Ubuntu 11.10 Desktop 64bit を入れて使ってみることにした。Linux はそれほど触ったことがないので勉強にもなるだろう。まず、UNetbootin を利用して2GBのUSBメモリでライブUSBを作成しておく。64bit版の日本語 Remix は用意されていないようなので、普通のバージョンを利用。これについては後でパッケージを追加する。
BIOSの設定で USB HDD を優先にして再起動すると UNetbootin が立ち上がるので、Defalut を選んで Ubuntu を起動、インストール。最初は「ターゲットシステムを設定しています」のところで止まってしまったが、ネットに繫げて改めてインストールしなおしたらうまくいった。
最後に、下のページを参考にして日本語 Remix と同じ追加パッケージをインストール。