mimikakimemo

自分用メモ。

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 Express5800/S70 タイプPJ NP8100-9021PS04

翌27日(今日)、さっそく到着。早い。

OSを買うのもなんなので、今回は Ubuntu 11.10 Desktop 64bit を入れて使ってみることにした。Linux はそれほど触ったことがないので勉強にもなるだろう。まず、UNetbootin を利用して2GBのUSBメモリでライブUSBを作成しておく。64bit版の日本語 Remix は用意されていないようなので、普通のバージョンを利用。これについては後でパッケージを追加する。

BIOSの設定で USB HDD を優先にして再起動すると UNetbootin が立ち上がるので、Defalut を選んで Ubuntu を起動、インストール。最初は「ターゲットシステムを設定しています」のところで止まってしまったが、ネットに繫げて改めてインストールしなおしたらうまくいった。

最後に、下のページを参考にして日本語 Remix と同じ追加パッケージをインストール。