録画予約システム http://www.mda.or.jp/epgrec/
recpt1(chardev版)と連携して番組を録画するwebアプリケーション
構築は3ステップあるようで、EPGdumpの作成、mysqlの準備、websiteの構築。
まずはyumで導入可能なもの(mysqlサーバ、php環境、atデーモンら)を事前にインストール
[root@c8 ~]# yum install at httpd mysql mysql-server php php-mysql php-mbstring php-process crontabsrecpt1で作ったTSファイルに仕込まれたEPG番組表を抜き出すツール。
抜き出したデータをmysqlに登録するわけである。
まずEPGdumpを取得。複数種あるみたい。
[root@c8 ~]# git clone git://github.com/stz2012/epgdump
[root@c8 ~]# cd epgdump
[root@c8 epgdump]#
[root@c8 epgdump]# make; make installっで、このepgdumpの動作テストをしてみる。TSファイルの作成には recpt1 のオプション sid を指定せずに作成する
[root@c8 ~]# recpt1 --b25 --strip --device /dev/pt1video2 27 120 /opt/share/1ch.ts
[root@c8 ~]# epgdump GR27 /opt/share/1ch.ts - | less
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE tv SYSTEM "xmltv.dtd">
<tv generator-info-name="tsEPG2xml" generator-info-url="http://localhost/">
<channel id="GR_1024" tp="GR27">
<display-name lang="ja_JP">xxxxxxxxxxxxxxx</display-name>
<transport_stream_id>32736</transport_stream_id>
<original_network_id>32736</original_network_id>
<service_id>1024</service_id>
</channel>
<channel id="GR_1025" tp="GR27">
<display-name lang="ja_JP">xxxxxxxxxxxxxxx</display-name>
<transport_stream_id>32736</transport_stream_id>
<original_network_id>32736</original_network_id>
<service_id>1025</service_id>
</channel>
(中略)
[root@c8 ~]#とTSファイルからEPG情報が引き出せた。
次に番組表を収めるデータベースを調整します。/etc/my.cnfを下記のように調整して、
[root@c8 ~]# vi /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
symbolic-links=0
character-set-server=utf8
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[mysql]
default-character-set=utf8
[root@c8 ~]#mysqlを起動させます。
[root@c8 ~]# /etc/init.d/mysqld start
[root@c8 ~]# /sbin/chkconfig mysqld on次にEpgRec向けのmysqlデータベース[rec]とユーザ[rec]を作成します。
[root@c8 ~]# mysql
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| test |
+--------------------+
mysql> create database rec;
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| rec |
| test |
+--------------------+
mysql> grant all privileges on rec.* to rec@localhost identified by 'rec';
mysql> grant all privileges on rec.* to rec@'c8.chaperone.jp' identified by 'rec';
mysql> grant all privileges on rec.* to rec@'%' identified by 'rec';
mysql> quit
[root@c8 ~]#今度は作成したアカウント[rec]でデータベースにアクセスしてみる
[root@c8 ~]# mysql -u rec -p rec
Enter password: *ここでパスワードを入力
mysql>
mysql> CREATE TABLE sample (id int);
mysql>
mysql> show tables;
+---------------+
| Tables_in_rec |
+---------------+
| sample |
+---------------+
1 row in set (0.00 sec)
mysql> drop table sample;
mysql> quit
[root@c8 ~]#これで番組表を収めるデータベースの調整は完了。
次に、EpgRecサイトの構築。
[root@c8 ~]# cd /var/www
[root@c8 www]# git clone git://github.com/stz2012/epgrec
[root@c8 www]# chown -R apache:apache ./epgrec
[root@c8 www]# mv ./epgrec ./rec
[root@c8 www]# cd ./rec
[root@c8 rec]# cp -a config.php.sample config.php
[root@c8 rec]# cp do-record.sh.pt1 do-record.sh
[root@c8 rec]# chmod 755 do-record.shあんまり良くはないのだが、httpd稼働ユーザであるapacheにシェルを持たせる。本来ならsuexecで一般ユーザが望ましいような気がしますけど...
[root@c8 ~]# chsh apache *httpdの稼働ユーザでプログラムを動かすので
apache のシェルを変更します。
新しいシェル [/sbin/nologin]: /bin/sh
シェルを変更しました。
[root@c8 ~]#webの設定を施します。どうやら/var/www/recとしたら、URLも/recと同じ名称にする必要があるみたい。
[root@c8 ~]# vi /etc/httpd/conf.d/epgrec.conf
Alias /rec /var/www/rec
<Directory "/var/www/rec">
Order Allow,deny
allow from all
</Directory>
[root@c8 ~]#ここでいったんhttpdとatサービスを開始します。
[root@c8 ~]# /etc/init.d/atd start
[root@c8 ~]# /etc/init.d/httpd startそしてブラウザでアクセスしてみる。
http://c8/recweb画面には、どこどこのパーミッションを変更してくださいと表示される。

こんな感じで。っで、その都度調整する。具体的には
[root@c8 ~]# cd /var/www/rec cache templates_c video thumbs settings
[root@c8 rec]# chmod 777 templates_c video thumbs settings cache
[root@c8 rec]#として再読み込みを行います。web画面に
![]()
と表示されたら、この「以上を確認し次の設定に進む」リンクをクリックする。
次の画面ではシステムの環境設定を行います。
1.MySQLホスト名 c8.chaperone.jp
2.MySQL接続ユーザー名 rec *grant文で作ったユーザ
3.MySQL接続パスワード rec *grant文で作ったユーザのパスワード
4.使用データベース名 rec *create databaseでの名前
5.テーブル接頭辞 Recorder *そのまま
6.インストールURL http://c8.chaperone.jp/rec
7.録画保存ディレクトリ /video */var/www/rec/videoに保存される
8.サムネールの使用 使用しない
9.ffmpegのパス
10.サムネール保存ディレクトリ
11.EPG取得用テンポラリファイルの設定 *そのまま
12.使用コマンドのパス設定 *正しいのでそのまま
[設定を保存する]ボタンをクリックして、次の質問へ
13.地デジチューナーの台数 2
14.BSチューナーの台数 0
15.CS録画の有無 行わない
16.録画開始の余裕時間(秒) 20
17.録画時間を長めにする 0
18.連続した番組の予約 行わない
19.録画コマンドの切り替え時間
20.優先する録画モード Full TS
21.mediatomb連係機能 行わない
22.録画ファイル名の形式 %TYPE%%CH%_%ST%_%ET%
23.ページに表示する番組表の長さ(時間) 8
24.1局あたりの幅 150
25.1時間あたりの高さ 120
[設定を保存する]ボタンをクリックこれで番組を取得してmysqlに収めてくれるのだが、情報の更新は必要。なので、cronによる定期実行を行わせます。
データ更新をするのはapacheユーザなので、rootで設定する際は注意が必要。
*注意:使用するcronは下記に変更。稼働ユーザが異なるので。
[root@c8 ~]# crontab -u apache -eとしてviで下記のように編集
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
15 */2 * * * /var/www/rec/getepg.phpこれで二時間ごとにEPG番組取得が行われます。
番組情報の登録の形態は、
このような流れなのだが、gitで手に入れたepgrecの出力xmlフォーマットが重要で当初手こずった。
具体的にはxmlのchannnel値がepgrecの想定と異なり、channnelデータが入らなかった。
当初入手したepgrecが想定しているのは GR25 とかなのだが、epgdumpは GR4_1040 とsidが含まれたような形であった。