recfriio server
バージョン 0.2
ライセンス GPL3 (c) 2009 recfriio server project
開発環境 ubuntu8.04 + apache2.28 + php5.2.4 / fedora7 + apache2.2.6 + php5.2.2
動作確認したwebブラウザ firefox3(ubuntu8.04) / firefox2(fedora7) / IE6(winXP) / IE6(win2000)
動作確認したデバイス HDUS、HDUSF
recfriio server は recfriio を webブラウザから制御するためのサーバでapache+PHP5の環境で動作します。
セキュリティの事とかはあまりきちんと考えていないので外には公開しない方が良いです。
また何があっても責任取りませんので使用は自己責任でお願いします。
なお、HDUSとHDUSFしか持っていないのでfriioとの混在環境ではうまく動作しないかもしれません。
[1] 使い方
web ブラウザで recfriio.php にアクセスする。あとはチャンネルとか録画時間をセットして視聴、又は録画ボタンを押すだけ。
視聴と録画の違いはファイルを保存するかどうかだけで、視聴のみならファイル名は指定しなくても良い。
上書きしないをチェックするとファイル名の後ろに日付を入れる。
なお、UDP送信機能は HDUS パッチを当てた recfriio でないと機能しないので注意。
recfriioを起動すると動作状況画面に状況が表示される。停止ボタンを押すと停止する。
なおvlc等で視聴した後に「停止」ボタンを押し忘れることが良くあるのでorz、時間は
10時間とか長めにセットしないで番組の長さ分だけにしておくと自動で停止するので安全。
[2] recfriio の設定
recfriio を apache が操作できるようにする。なお以下の説明は
ubuntu(debian)での設定方法でありRH系の場合は若干設定方法が違うので注意。
特に www-data というユーザ名は RH系のサーバの場合は apache に読み替えること。
(1) video グループに www-data( apache ) を登録
video グループが無ければ
$ sudo groupadd video
で作成し、
$ sudo gpasswd -a www-data video
でグループに追加。ついでに自分のアカウントも video グループに追加する
例えば自分が foo ならば
$ sudo gpasswd -a www-data foo
追加されたか確認
$ grep video /etc/group
video:x:44:foo,www-data
apache を再起動しないとグループファイルの変更が反映されないので注意 ! ( ハマった orz )
$ sudo /etc/init.d/apache2 restart
(2) recfriioが使うロックファイルのパーミッション設定
/var/lock/friiodetect
が無ければ
$ touch /var/lock/friiodetect
で作成してから
$ chmod 664 /var/lock/friiodetect
$ sudo chown
$ sudo chown www-data:video /var/lock/friiodetect
正しく設定されたか確認
$ ls -al /var/lock/friiodetect
-rw-rw-r-- 1 foo video 0 2009-01-10 14:25 /var/lock/friiodetect
(3) USBのパーミッション設定
/etc/udev/rules.d/40-permissions.rules に
# HDUS
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", \
ATTRS{idVendor}=="3275", ATTRS{idProduct}=="6051", \
MODE="0664", GROUP="video"
# friio
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", \
ATTRS{idVendor}=="7a69", ATTRS{idProduct}=="0001", \
MODE="0664", GROUP="video"
を追加する。その後HDUSかfriioを差しHDUSなら更に as11loader を実行したらパーミッションが正しく
設定されているか確認する。例えば
$ lsusb
Bus 003 Device 006: ID 3275:6051
と表示されたら /dev/bus/usb/003/006 のパーミッションを調べて
$ ls -al /dev/bus/usb/003/006
crw-rw-r-- 1 root video 189, 261 2009-01-10 12:59 /dev/bus/usb/003/006
と、グループが video となっていれば良い
(4) 動作確認
recfriio が video グループに属するユーザから動かせるか確認
うまく起動したら Ctrl+c ( kill -INT ) で正常に終了するか確認する
$ recfriio --hdus 25 10 /dev/null
Tuner type is HDUS.
Search friios from dir: /dev/bus/usb
1 friios found:
/dev/bus/usb/003/006: use this friio.
device: /dev/bus/usb/003/006
opening HDUS...done.
freq = 545
CNR: 25.704
Signal level: 49.2855
Output ts file.
sync 158 bytes
sync 128 bytes
done.
Rec time: 9.179645 sec.
CNR: 25.6313
Signal level: 49.1446
closing HDUS...done.
[3] recfriio server の設定
(1) 適切な場所(例えば /var/www)に展開してディレクトリのパーミッションを設定
モードはapacheの設定によって違うので適当に変えること
展開したら recfriio ディレクトリが出きるので
$ chmod 755 recfriio
$ cd recfriio
(2) 設定ファイルとチャンネル設定ファイルを編集する
設定ファイル( config.php ) の内、
HOME
SPOOL_DIRECTORY
RECFRIIO
は必ず設定する。
HOME には展開したディレクトリ(例えば /var/www/recfriio/ ) を入れる。
SPOOL_DIRECTORYに www-data( apache )に対する書き込み権限を与える。
その他の設定は環境や好みに合わせて変更する。HDUS ではなくて friio を
使っている場合は FRIIOOPT から --hdus を除いた方が良いかもしれない
(friio持ってないので何とも言えない)
チャンネル設定ファイル( config-channelmap.php ) の書式は "チャンネル" => "局名"
(3) 作業用ディレクトリを作成してパーミッション設定
config.php の HOME で指定したディレクトリの下に作る
名前は config.php の VARDIR で変更可能
デフォルトは var
$ mkdir var
$ chgrp video var
$ chmod 775 var
また、varの中身を web ブラウザから見られたく無い場合は
httpd.conf で AllowOverride Limit を指定してから
var ディレクトリの中に以下の内容で .htaccess を作成する
order deny,allow
deny from all
(4) wgetをインストールし、録画スクリプトを実行可能にする
録画スクリプト( do-record.sh ) の中でwgetを使用するのでインストールしておく。
またスクリプトを実行可能にする
$ chmod 755 do-record.sh
(5) web ブラウザで recfriio.php にアクセスして正常に動くか確認する
「ファイル(hogehoge)のオープンに失敗しました。」と表示される時は
var ディレクトリのパーミッションを調べて www-data ( apache ) からディレクトリに
ファイルを書き込めるか確認する
視聴、録画ボタンを押しても動作状況の表示が変わらないときは
$ ps aux | grep recfriio
で recfriio が動作しているか確認する。
もし動作をしているのに表示が変わっていない場合は
$ sudo kill -INT (PID)
でrecfriioを止めてから以下の項目を確認する
・ var ディレクトリのパーミッションを調べて www-data( apache ) がファイルを書き込めるか
・ wgetがインストールされているか
一方、recfriio が動作していない時は www-data( apache ) ユーザが recfriio を
起動できるか確認する。特に /var/lock/friiodetect のパーミッションが
間違っていないか確認すること
[4] 動作説明
録画ボタンを押すと do-record.sh というスクリプトファイルを起動する。
予約録画の場合は crontab が do-record.sh を起動する。
do-record.sh の中で recfriio を起動して PID を取得し、wget経由で do-record.php を
呼び出して recfriio server に PID を知らせる。
recfriio server は表示を更新する時に var ディレクトリの中を見て、ステータスファイル(status.csv)が
あれば内容を表示する。停止ボタンを押すと対応する PID をkill -INTする。
以上の様に動作原理は単純なので、do-record.shを少し変更するだけで PT1 などにも応用できるはず。
[6] FAQ
Q1. 今まで動いていたのに急に動かなくなった
A.
lsusb でチューナが認識されているか確認する。また、端末から手動で recfriio を動かすと
ロックファイル( /var/lock/recfriio ) が出来るので
www-data( apache ) がロックファイルを開けなくなる。その場合はロックファイルのパーミッションを変えるか消す。
Q2. 予約録画のログは何処?
A.
var/log.txt
Q3 HDUSを挿す度にいちいち as11loader を実行するのが面倒くさい
A.
HDUSのファームウェア( SKNET_AS11Loader.sys ) を接続時に自動読み込みするように設定するには、
まずローダ(as11loader)のソース(as11loader.c)を次の様に書き換えてコンパイルする
@@ -49,7 +49,7 @@
int16_t idx;
int sys;
- if ((sys = open("SKNET_AS11Loader.sys", O_RDONLY)) == -1){
+ if ((sys = open( argv[ 1 ], O_RDONLY)) == -1){
fprintf( stderr, "could not open SKNET_AS11Loader.sys\n");
goto ERROR;
}
出来たas11loaderを適当なディレクトリに移して、/etc/udev/rules.d/80-programs.rules に次の文を追加
(パス)の部分は自分の環境に合わせて変える
# load the firmware of HDUS
SUBSYSTEM=="usb", ACTION=="add", \
ATTRS{idVendor}=="1738", ATTRS{idProduct}=="5211", \
RUN+="(パス)/as11loader (パス)/SKNET_AS11Loader.sys"
HDUSを差して
$ lsusb
Bus 003 Device 006: ID 3275:6051
の様にIDが表示されればOK
更新履歴
・2009/1/17 ver.0.2
crontabによる録画予約機能追加
config-recfriio.phpを廃止してconfig.php一つに統一
設定ファイルや状態管理ファイル等は全て var 以下に作ることにした
操作画面の視聴、録画ボタンを押したときに全ての設定状態を保存するようにした
操作画面に設定保存ボタン追加
上書き防止の日付はdo-record.shの中で付けることにした
do-record.sh から do-record.php をwgetで呼び出して状態管理をするようにした
録画予約時のログ機能追加
動作状況の経過時間を「分:秒」表示にした
動作状況の表示更新リンクをボタンに変更
操作設定や状況をバーをクリックして折りたためるようにした
ヘルプへのリンクを追加
ヘルプをいろいろ更新
・2009/1/10 ver.0.1
公開