TV録画予約システム構築(vrs)

最終更新日: 2014.02.19

<<トップページ <<新着情報 <<サイト内検索 <<CentOSで自宅サーバー構築 <<Scientific Linuxで自宅サーバー構築

■概要

WebブラウザからTV録画予約ができるようにする。
ここでは、TV録画予約システムにvrs(本家)vrs(svn)を採用し、録画開始日時入力による手動録画予約及び、iEPGによる自動録画予約が行えるようにする。

TV録画機能Apache+phpSambaが導入済であること

【TV録画予約システム構成】


■vrsインストール

(1)vrsインストール準備
vrsインストールに必要なパッケージをインストールする。
[root@fedora ~]# yum -y --enablerepo=atrpms install mplayer ← mplayerインストール

[root@fedora ~]# ln -s `which mencoder` /usr/local/bin/mencoder ← mencoderへ/usr/local/bin/mencoderでパスを通す

(2)vrsインストール
[root@fedora ~]# svn checkout http://svn.woremacx.com/vrs/trunk/vrs-php5 ← vrsダウンロード

[root@fedora ~]# mv vrs-php5/ /var/www/vrs ← vrsを所定のディレクトリへリネーム移動

[root@fedora ~]# cp .ivtvrc /var/www/vrs/ ← ivtv設定ファイルをvrs格納ディレクトリへコピー

[root@fedora ~]# chown -R apache:apache /var/www/vrs/ ← vrs格納ディレクトリ所有者をApache実行ユーザへ変更

[root@fedora ~]# cd /var/www/vrs/ ← vrs格納ディレクトリへ移動

[root@fedora vrs]# /bin/cp misc/24fps /usr/local/bin/ ← 24fpsコマンドをパスの通ったディレクトリへ移動

[root@fedora vrs]# /bin/cp misc/30fps /usr/local/bin/ ← 30fpsコマンドをパスの通ったディレクトリへ移動

[root@fedora vrs]# su apache -s "/bin/bash" -c "/var/www/vrs/configure.sh" ← vrs初期セットアップ

[root@fedora vrs]# cd ← vrs格納ディレクトリを抜ける

■vrs設定

(1)ビデオデバイス設定
ビデオデバイスへApache実行ユーザで書き込めるように設定する
[root@fedora ~]# vi /etc/security/console.perms.d/video.perms ← ビデオデバイスパーミッション設定ファイル新規作成
<console>  0660 <sound>      0660 root.apache
<console>  0660 <v4l>        0660 root.apache

[root@fedora ~]# pam_console_apply ← ビデオデバイスパーミッション設定反映

(2)チャンネル設定
ここでは、例として神奈川のチャンネルを設定する
[root@fedora ~]# vi config-channelmap.php ← チャンネル設定ファイル新規作成
<?php
$CHANNEL = array(
        "1" => "NHK総合",
        "3" => "NHK教育",
        "4" => "日本テレビ",
        "6" => "TBSテレビ",
        "8" => "フジテレビ",
        "10" => "テレビ朝日",
        "12" => "テレビ東京",
        "42" => "tvk"
);
?>
※チャンネル番号とTV局名はTVガイドを参照

[root@fedora ~]# nkf -e config-channelmap.php > /var/www/vrs/config-channelmap.php
 ← チャンネル設定ファイルの文字コードをEUCに変換して所定のディレクトリへ格納する

[root@fedora ~]# rm -f config-channelmap.php ← 変換元のチャンネル設定ファイルを削除

(3)vrs設定
[root@fedora ~]# vi /var/www/vrs/config.php ← vrs設定ファイル編集
define( "HOME", "/home" );
↓
define( "HOME", "/var/www/vrs" ); ← HOME変更

define( "PREFID", "26" );
↓
define( "PREFID", "14" ); ← TV王国地域IDを自分の地域に変更(ここでは神奈川に変更)※

$CHANNEL_TABLE = $KYOTO;
↓
$CHANNEL_TABLE = $CHANNEL; ← チャンネル変更
※自分の地域のIDはhttp://www.so-net.ne.jp/tv/bangumi/cgi-bin/selectGWPrgm.cgiでアクセスすればわかる ⇒神奈川の場合URLがhttp://www.so-net.ne.jp/tv/bangumi/tvprgm/1_14_2.htmlとなるので、下線部をみて地域IDは14であることがわかる

(4)録画コマンド設定※ivtvドライババージョンが0.8系以降の場合のみ
ivtv-0.8系以降ではチャンネル番号(例:8)ではなく、チャンネル周波数(例:181.250)を設定する必要があるため、ivtv-tuneコマンドを使用するが、ivtv-tuneコマンドはroot権限でないと正常に動作しないため、root権限で動作するようにivtv-tuneコマンドを設定する。
[root@fedora ~]# chmod 4755 /usr/local/bin/ivtv-tune ← ivtv-tuneをroot権限で実行するように設定する

[root@fedora ~]# sed -i 's/\/opt\/httpd\/htdocs\/vrs/\/var\/www\/vrs/g' /var/www/vrs/do-record.sh ← vrs不具合?対応
※vrsインストール先ディレクトリが/opt/httpd/htdocs/vrs固定になっているため、/var/www/vrsに変更する

(5)番組名文字化け対処※システムの文字コードがUTF-8(Fedoraデフォルト)の場合のみ
予約一覧画面、録画済一覧画面で表示される番組名等の文字化け対処
[root@fedora ~]# vi /var/www/vrs/lib/ReservationSerializer.php
    static function deserialize(
        $data        //!< [in] デシリアライズするデータ
        )
    {
        if( count( $data ) < 10 ) {
            echo "<p class=\"error\">ERROR: データのフィールド数が不正なため、スキップします。:";
            print_r( $data );
            echo "</p>";
            return NULL;
        }
        $data[6] = urlencode(mb_convert_encoding(urldecode($data[6]), "EUC-JP", "auto")); ← 追加
        $data[7] = urlencode(mb_convert_encoding(urldecode($data[7]), "EUC-JP", "auto")); ← 追加
        $reservation = new Reservation();
        $reservation->startTime_    = $data[0];
        $reservation->endTime_        = $data[1];
        $reservation->channel_        = $data[2];
        $reservation->bitrate_        = $data[3];
        $reservation->id_            = $data[4];
        $reservation->captureDevice_= $data[5];
        $reservation->title_        = $data[6];
        $reservation->description_    = $data[7];
        $reservation->resolution_    = $data[8];
        $reservation->audioMode_     = $data[9];

        return $reservation;
    }

予約完了画面の番組名文字化け対処
[root@fedora ~]# vi /var/www/vrs/lib/AppendCommandParser.php
        $this->parameter_['title'] = mb_convert_encoding($this->parameter_['title'], "EUC-JP", "auto"); ← 追加
        $reservation->title_        = urlencode( $this->parameter_['title'] );

(6)番組表を毎回生成するようにする
番組表が更新されていたり、「前の時間帯へ」リンク、「次の時間帯へ」リンクのリンク先がずれるため、番組表を毎回生成するようにする。
[root@fedora ~]# vi /var/www/vrs/lib/ProgramCache.php
    public function getFileName(
        $url    //!< [in] キャッシュ対象のURL
        )
    {
        $this->clearCache( $url ); ← 追加
        $fileName = $this->getFileNameFromUrl( $url );
        if( ! $this->isCacheExist( $url ) ) {
            $result = $this->downlaodToCache( $url );
            if( ! $result ) {
                echo "<p class=\"error\">ERROR: 番組表のダウンロードに失敗。</p>";
                return NULL;
            }
            $this->formatFile( $fileName );
        }
        return $fileName;
    }

(7)サムネイル画像作成不可対処
[root@fedora ~]# vi /var/www/vrs/lib/ReservationController.php
                exec( "HOME=".HOME." ".COMMAND_MPLAYER.
                        " -vo jpeg:outdir=".HOME."/".SPOOL_DIRECTORY.
                        " -vop scale=150:100".
                        ↓
                        " -vf scale=150:100". ← 変更
                        " -ao null -ss 4 -frames 4 {$movieName}" );

■Apache設定

(1)Apache設定
外部からはユーザ名/パスワードによるアクセス制限をかける。
内部からは認証なしにアクセスできるようにする。
[root@fedora ~]# usermod -s /bin/bash apache ← Apache実行ユーザにシェルを与える

[root@fedora ~]# vi /etc/httpd/conf.d/vrs.conf ← vrs用Apache設定ファイル作成
Alias /vrs /var/www/vrs
<Directory /var/www/vrs>
    AllowOverride AuthConfig Limit
</Directory>

[root@fedora ~]# vi /var/www/vrs/.htaccess ← .htaccess作成
AuthType Basic
AuthName "vrs"
AuthUserFile /etc/httpd/conf/.htpasswd
AuthGroupFile /dev/null
Require valid-user
Allow from 192.168.1
Deny from All
Satisfy Any

[root@fedora ~]# /etc/rc.d/init.d/httpd reload ← Apache設定反映
httpd を再読み込み中:                                      [  OK  ]

(2)アクセス制限
Webページパスワード制限(htpasswd)を参考にして、/etc/httpd/conf/.htpasswdへユーザ名/パスワードを登録する

■vrs確認

https://Webサーバー名/vrs/へアクセスして、手動録画予約、iEPG録画予約、予約一覧、録画済一覧の各機能を確認

■録画済ファイルのストリーミング再生

録画した番組は録画済一覧から再生できるが、全てダウンロードし終わるまで再生が始まらないため、長時間番組だと再生が始まるまでに非常に時間がかかる。
そこで、録画済ファイル格納ディレクトリをSambaで共有し、Windowsクライアントから直接録画済ファイルをWindows Media Player等で開けるようにすることにより、即再生開始(ストリーミング再生)できるようにする。
[root@fedora ~]# vi /etc/samba/smb.conf ← Samba設定ファイル編集
以下を最終行へ追加
[vrs]
   comment = Video
   path = /var/www/vrs/spool
   writable = yes
   force user = apache
   veto files = /.svn/.wakeup/*.jpg/

[root@fedora ~]# /etc/rc.d/init.d/smb restart ← Samba再起動
SMB サービスを停止中:                                      [  OK  ]
NMB サービスを停止中:                                      [  OK  ]
SMB サービスを起動中:                                      [  OK  ]
NMB サービスを起動中:                                      [  OK  ]

Windowsから\\サーバーIPアドレス\vrsへアクセスして録画済ファイルをWindows Media Player等で再生してみる

■Tripwireによる録画ファイルのチェックスキップ設定

録画ファイルはサイズが大きすぎてTripwireでチェックエラーを検出してしまうので、録画ファイル格納ディレクトリをTripwireによるチェック対象外にする。
Tripwireを導入している場合のみ
[root@fedora ~]# twadmin -m p -c /etc/tripwire/tw.cfg -p /etc/tripwire/tw.pol -S /etc/tripwire/site.key > /etc/tripwire/twpol.txt
 ← ポリシーファイル(テキスト版)復元

[root@fedora ~]# vi /etc/tripwire/twpol.txt ← ポリシーファイル(テキスト版)編集
  ################################################
 #                                              ##
################################################ #
#                                              # #
#  Monitor Filesystems                         # #
#                                              ##
################################################
(
  rulename = "Monitor Filesystems",
)
{
  /                             -> $(ReadOnly) ;
  /home                         -> $(ReadOnly) ;  # Modify as needed
  /usr                          -> $(ReadOnly) ;
  /var                          -> $(ReadOnly) ;
  !/var/www/vrs/spool; ← 追加(/var/www/vrs/spoolをチェック対象外にする)
}

[root@fedora ~]# twadmin -m P -c /etc/tripwire/tw.cfg -p /etc/tripwire/tw.pol -S /etc/tripwire/site.key /etc/tripwire/twpol.txt
 ← ポリシーファイル(暗号署名版)作成
Please enter your site passphrase: ← サイトパスフレーズ応答
Wrote policy file: /etc/tripwire/tw.pol

[root@fedora ~]# rm -f /etc/tripwire/twpol.txt ← ポリシーファイル(テキスト版)削除

[root@fedora ~]# tripwire -m i -s -c /etc/tripwire/tw.cfg ← データベース初期化
Please enter your local passphrase: ← ローカルパスフレーズ応答




▲このページのトップへ戻る

LPIロゴ Copyright© 2012 fallenangels, All rights reserved.
ご自由にリンクしてください(連絡は不要です)
本ページへのご意見・ご要望、誤字・脱字・リンク切れ等のご連絡はこちらからお願いします