Linux活用レシピ > 家電 > 地デジ録画サーバ
Ubuntu 9.10デスクトップ版での作り方

5. Linux地デジ予約録画システムの構築

    epgrec」というソフトで録画システムを構築します。
    作者のサイトに利用方法や注意点などありますので一読ください。
    ただ、詳しい構築手順は省略されていたりしますので、以下の手順で構成して頂ければ確実です。

    なお、このソフトは「Linux + Apache + PHP5 + MySQL」のいわゆる(LAMP)の環境で動作しますので、まずはそのベースを構築します。

  • 作業はapt-getコマンドで実施しますので、ブロードバンドルータなどでインターネットに接続できる環境で実施してください。

5-1. LAMP 環境構築


  1. Apacheをインストールします。
  2. # apt-get install apache2
    

  3. PHPとPHPのApacheモジュールを追加します。
  4. # apt-get install php5 libapache2-mod-php5
    
    ※Apacheのconfigは自動的に変えられます。

  5. Apache2再起動し、変更を反映させます。
  6. # /etc/init.d/apache2 restart
    

  7. Apache+PHPテストを行います。
  8. まず、テスト用Webページを作成します。
    # vi /var/www/testphp.php
    
    <?php phpinfo(); ?>
    
    他のクライアントからブラウザで(http://TVSERVERのIPアドレス/testphp.php)に接続してPHPのテストページが表示されることを確認します。
    確認が終われば削除します。
    # rm -i /var/www/testphp.php
    

  9. MySQLのインストールを行います。
  10. # apt-get install mysql-server
    
    New password for the MySQL "root" user: 
    というメッセージが出るのでパスワードをセット。わかりやすく
    Ubuntuインストール時に作成したユーザのパスワードと統一し入力して、
    [TAB]キーで[<了解>]ボタンを選択し、「ENTER」キーを押下してください。
    
    Repeat password for the MySQL "root" user: 
    というメッセージが出るので、もう一度確認のためパスワードをセット。
    

  11. データベースを作成します。
  12. # mysql -u root -p
    Enter password:   <--ここでMySQLで設定したパスワードを入力してください。
    
    mysql>     <--MySQLのコンソールになり、SQLが入力できます。
    
    続いて以下の通り入力しデータベース「tvdb」を作成し、MySQLのコンソールから抜けます。
    mysql> create database tvdb;    <-入力
    Query OK, 1 row affected (0.05 sec)
    
    mysql> exit
    Bye
    

  13. データベースが出来ているか確認します。
  14. # mysql -u root -p
    Enter password: 設定したパスワード
    
    mysql>     <--MySQLのコンソールになり、SQLが入力できます。
    
    続いて以下の通り入力しデータベース「tvdb」があるか確認し、MySQLのコンソールから抜けます。
    mysql> show databases;
    +----------+
    | Database |
    +----------+
    | mysql    |
    | test     |
    | tvdb     |
    +----------+
    3 rows in set (0.00 sec)
    
    mysql> exit
    Bye
    

  15. データベースの一般ユーザの作成を行います。
  16. # mysql -u root -p
    Enter password: 設定したパスワード
    
    mysql>     <--MySQLのコンソールになり、SQLが入力できます。
    
    続いて以下の通り入力し一般ユーザを作成します。Ubuntuインストール時のユーザ名とパスワードで統一しておくと分かりやすいです。
    mysql> grant all privileges on *.* to ユーザ名@localhost 
           identified by 'パスワード';
    mysql> flush privileges;
    mysql> exit
    Bye
    

5-2. PHP CLI版のインストール

  1. PHP CLI版のインストールを行います。
    # apt-get install php5-cli
    
  2. 確認します。
    # php -v
    PHP 5.2.10-2ubuntu6.3 with Suhosin-Patch 0.9.7 (cli) (built: Nov ・・)
    Copyright (c) 1997-2009 The PHP Group
    Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies
    
    バージョンが出ればOK

5-3. PHP5-mysqlのインストール

    # apt-get install php5-mysql
    
    # /etc/init.d/mysql restart
    # /etc/init.d/apache2 restart
    

5-4. ffmpegのインストール

    # apt-get install ffmpeg
    

5-5. Linux地デジ予約録画システムのインストール

    ここまででLinux地デジ予約録画システムのインストールの下準備ができましたので、いよいよインストールします。

  1. まずは「epgdumpr2-utf8.tar.gz」をダウンロードします。「http://www.mda.or.jp/epgrec/」にありますので、ダウンロードし「/usr/local/src/」に保管してください。 または以下のコマンドで当サイトから保存します。
    # cd /usr/local/src
    # wget http://linux-memo.net/kaden/src/epgdumpr2-utf8.tar.gz
    

  2. epgdumpをインストールします。
  3. # tar xvzf epgdumpr2-utf8.tar.gz
    # cd epgdumpr2
    # make
    
    # cp -ip epgdump /usr/local/bin
    

  4. at設定を行います。
  5. # apt-get -y install at
    
    Apacheユーザの「www-data」を使用禁止リストから削除します。
    # cp -ip /etc/at.deny /etc/at.deny.org
    # vi /etc/at.deny
    
    www-data <--削除
    

  6. passwrdファイル確認
  7. Apacheユーザ「www-data」にシェルが与えられているか確認します。
    # cat /etc/passwd | grep www-data
    www-data:x:33:33:www-data:/var/www:/bin/sh
                                       ^^^^^^^このようになっていればOK
    

  8. 次に、epgrec本体「epgrec-090814.tar.gz」をダウンロードします。「http://www.mda.or.jp/epgrec/」にありますので、ダウンロードし「/usr/local/src/」に保管してください。 または以下のコマンドで当サイトから保存します。
    # cd /usr/local/src
    # wget http://linux-memo.net/kaden/src/epgrec-090814.tar.gz
    

  9. epgrec本体をWebサイトトップに展開します。
  10. # tar xvzpf epgrec-090814.tar.gz -C /var/www/
    

  11. パーミッションを確認します。
  12. # ls -ald /var/www/epgrec/*
    -rwxr-xr-x 1 tvuser tvuser 4792 2009-07-28 23:20 /var/www/epgrec/DBRecord.class.php
    -rwxr-xr-x 1 tvuser tvuser 3324 2009-07-28 23:20 /var/www/epgrec/Keyword.class.php
    -rwxr-xr-x 1 tvuser tvuser 7637 2009-07-28 23:20 /var/www/epgrec/LICENSE.txt
    -rwxr-xr-x 1 tvuser tvuser 12273 2009-07-28 23:32 /var/www/epgrec/Reservation.class.php
    -rwxr-xr-x 1 tvuser tvuser 3595 2009-07-28 23:21 /var/www/epgrec/Settings.class.php
    drwxr-xr-x 4 tvuser tvuser 4096 2009-07-28 23:20 /var/www/epgrec/Smarty
    drwxrwxrwx 2 tvuser tvuser 4096 2009-07-28 23:20 /var/www/epgrec/cache
    -rwxr-xr-x 1 tvuser tvuser 1265 2009-07-28 23:20 /var/www/epgrec/cancelReservation.php
    -rwxr-xr-x 1 tvuser tvuser 1606 2009-07-28 23:20 /var/www/epgrec/changeReservation.php
    -rwxr-xr-x 1 tvuser tvuser 6197 2009-07-28 23:20 /var/www/epgrec/config.php.sample
    drwxr-xr-x 2 tvuser tvuser 4096 2009-07-28 23:20 /var/www/epgrec/cron.d
    -rwxr-xr-x 1 tvuser tvuser 1884 2009-07-28 23:20 /var/www/epgrec/customReservation.php
    -rwxr-xr-x 1 tvuser tvuser 499 2009-07-28 23:20 /var/www/epgrec/deleteKeyword.php
    -rwxr-xr-x 1 tvuser tvuser 277 2009-07-28 23:20 /var/www/epgrec/do-record.sh.friio
    -rwxr-xr-x 1 tvuser tvuser 275 2009-07-28 23:20 /var/www/epgrec/do-record.sh.pt1
    -rwxr-xr-x 1 tvuser tvuser 677 2009-07-28 23:20 /var/www/epgrec/do-record.sh.sample
    -rwxr-xr-x 1 tvuser tvuser 297 2009-07-28 23:20 /var/www/epgrec/do-record.sh.test
    -rwxr-xr-x 1 tvuser tvuser 578 2009-07-28 23:20 /var/www/epgrec/envSetting.php
    -rwxr-xr-x 1 tvuser tvuser 818 2009-07-28 23:20 /var/www/epgrec/epgrec_upgrade.php
    -rwxr-xr-x 1 tvuser tvuser 245 2009-07-28 23:20 /var/www/epgrec/gen-thumbnail.sh
    -rwxr-xr-x 1 tvuser tvuser 6625 2009-08-14 13:20 /var/www/epgrec/getepg.php
    drwxr-xr-x 2 tvuser tvuser 4096 2009-07-28 23:20 /var/www/epgrec/imgs
    -rwxr-xr-x 1 tvuser tvuser 7971 2009-07-29 22:37 /var/www/epgrec/index.php
    drwxr-xr-x 3 tvuser tvuser 4096 2009-07-28 23:34 /var/www/epgrec/install
    drwxr-xr-x 2 tvuser tvuser 4096 2009-07-28 23:20 /var/www/epgrec/js
    -rwxr-xr-x 1 tvuser tvuser 1753 2009-07-28 23:20 /var/www/epgrec/keywordTable.php
    -rwxr-xr-x 1 tvuser tvuser 1086 2009-07-28 23:20 /var/www/epgrec/mediatomb.php
    -rwxr-xr-x 1 tvuser tvuser 259 2009-07-28 23:20 /var/www/epgrec/postsettings.php
    -rwxr-xr-x 1 tvuser tvuser 4479 2009-07-29 22:37 /var/www/epgrec/programTable.php
    -rwxr-xr-x 1 tvuser tvuser 574 2009-07-28 23:20 /var/www/epgrec/reclib.php
    -rwxr-xr-x 1 tvuser tvuser 1310 2009-07-28 23:20 /var/www/epgrec/recomplete.php
    -rwxr-xr-x 1 tvuser tvuser 3302 2009-08-02 12:17 /var/www/epgrec/recordedTable.php
    -rwxr-xr-x 1 tvuser tvuser 987 2009-07-28 23:20 /var/www/epgrec/reservationTable.php
    -rwxr-xr-x 1 tvuser tvuser 1792 2009-07-28 23:20 /var/www/epgrec/reservationform.php
    -rwxr-xr-x 1 tvuser tvuser 1420 2009-08-01 20:45 /var/www/epgrec/sendstream.php
    drwxrwxrwx 2 tvuser tvuser 4096 2009-07-28 23:20 /var/www/epgrec/settings
    -rwxr-xr-x 1 tvuser tvuser 429 2009-07-28 23:20 /var/www/epgrec/simpleReservation.php
    drwxr-xr-x 3 tvuser tvuser 4096 2009-07-28 23:20 /var/www/epgrec/start
    -rwxr-xr-x 1 tvuser tvuser 527 2009-07-28 23:20 /var/www/epgrec/systemSetting.php
    drwxr-xr-x 2 tvuser tvuser 4096 2009-08-14 13:05 /var/www/epgrec/templates
    drwxrwxrwx 2 tvuser tvuser 4096 2009-07-28 23:20 /var/www/epgrec/templates_c
    drwxrwxrwx 2 tvuser tvuser 4096 2009-07-28 23:20 /var/www/epgrec/thumbs
    drwxrwxrwx 2 tvuser tvuser 4096 2009-07-28 23:20 /var/www/epgrec/video
    -rwxr-xr-x 1 tvuser tvuser 1864 2009-08-01 18:34 /var/www/epgrec/viewer.php
    各行の最初の「drwxrwxrwx」といった部分が違いないか確認ください。「tvuser tvuser」はUbuntuインストール時に作成したユーザですので、環境によって変わりますので重要ではないです。

  13. config.php.sampleをリネームします。
  14. # cp -ip /var/www/epgrec/config.php.sample \
     /var/www/epgrec/config.php 
    

  15. config.php設定ファイルの編集
  16. # vi /var/www/epgrec/config.php 
    

  17. 地上デジタルチャンネルマップ$GR_CHANNEL_MAPの設定
  18. まず、config.phpの中の地上デジタルチャンネルマップをご利用いただく地域の情報にあわせて編集頂く必要があります。
    地上デジタルチャンネルマップ$GR_CHANNEL_MAPの設定は、以下のような構成で記述します。
    $GR_CHANNEL_MAP = array(
        "識別文字列" => "チャンネル番号",
        "識別文字列" => "チャンネル番号",
        .....局数分入れる
    );
    
    最初は以下の通り、首都圏東部(千葉方面)用のチャンネルマップが初期設定されています。首都圏地方局のうち、TVK、テレビ埼玉、MXTVはコメントアウト(行頭の//)されており、千葉テレビはコメントアウトされていません。首都圏にお住まいの方は、地方局のコメントの位置を自分が受信できる局に変更するだけで利用できます。
    // 首都圏用地上デジタルチャンネルマップ
    // 識別子 => チャンネル番号
    $GR_CHANNEL_MAP = array(
            "GR27" => "27",         // NHK
            "GR26" => "26",         // 教育
            "GR25" => "25",         // 日テレ
            "GR22" => "22",         // 東京
            "GR21" => "21",         // フジ
            "GR24" => "24",         // テレ朝
            "GR23" => "23",         // テレ東
    //      "GR20" => "20",         // MX TV
    //      "GR18" => "18",         // テレ神
            "GR30" => "30",         // 千葉
    //      "GR32" => "32",         // テレ玉
            "GR28" => "28",         // 大学
    );
    
    /*
    // 大阪地区デジタルチャンネルマップ(参考)
    $GR_CHANNEL_MAP = array(
            "GR24" => "24",         // NHK
            "GR13" => "13",         // 教育
            "GR16" => "16",         // 毎日
            "GR15" => "15",         // 朝日
            "GR17" => "17",         // 関西
            "GR14" => "14",         // 読売
            "GR18" => "18",         // テレビ大阪
    );
    */
    
    首都圏以外の場合は丸ごと変更が必要ですので、住んでいる地域で受信できる局の物理チャネル番号を「マスプロ電工の相談窓口」などで調べて変更します。
    例えば、兵庫県の神戸市では上記の部分をすべて削除し、以下のように変更します。
    
    $GR_CHANNEL_MAP = array(
    	"GR22" => "22",		// NHK 
    	"GR13" => "13",		// 教育
    	"GR26" => "26",		// サンテレビ
    	"GR16" => "16",		// 毎日放送
    	"GR15" => "15",		// 朝日放送
    	"GR17" => "17",		// 関西テレビ
    	"GR14" => "14",		// 読売テレビ
    );
    

  19. $RECORD_MODEの設定(option)
  20. 以降の「録画シェルスクリプトdo-record.sh」で録画時に様々な動きをさせる設定ですが、このレシピでは地デジを録画するのが第一目標ですので、変更は行いません。

    以上でconfig.php の変更は終わりですので、保存して終了します。

  21. do-record.shの設定
  22. 録画に使うスクリプトを配置します。ここではPT1用を使用しPT2の録画が可能ですのでそれをコピーします。なお、中身はさまざまな設定が可能で地デジやBSの4チャンネル同時とかもできそうですが、このレシピでは地デジを録画するのが第一目標ですので、変更は行いません。
    # cp --archive /var/www/epgrec/do-record.sh.pt1 /var/www/epgrec/do-record.sh
    

  23. do-record.shの確認
  24. 以下のようにしてdo-record.shを実行し録画の確認を行います。
    # cd /tmp
    # OUTPUT=test.ts CHANNEL=17 DURATION=30 TUNER=0 MODE=0 TYPE=GR \
      /var/www/epgrec/do-record.sh
    CHANNEL : 17
    DURATION: 30
    OUTPUT  : test.ts
    TUNER : 0
    TYPE : GR
    MODE : 0
    using B25...
    enable B25 strip
    Signal=30.299475dB
    Recording...
    
    ※上記例では物理チャネル17を30秒間test.tsに録画しています。地域にあわせテストする物理チャネル番号は変更してください。

    作成できた「test.ts」をVLCで閲覧し、きれいに表示されることを確認してください。


5-6. Linux地デジ予約録画システム初期設定

    予約システムの初期設定を行います。

  1. まずここまでの各サーバの連携を反映させるため必ず、以下のコマンドでapacheの再起動を行ってください。
    # /etc/init.d/apache2 restart
    
    ※再起動を行っていないと、以降の初期設定画面の「/epgrec/install/step3.php」画面が表示されない場合があります。

  2. ブラウザで初期設定を行います。
  3. http://TVSERVERのIPアドレス/epgrec/に接続します。

    初回アクセス時には、インストールスクリプトが起動します。
    まずはチェックが走ります。
    何かエラーが表示されたら表示の指示を参考にファイルやディレクトリのパーミッション、物理チャンネル等を変更してください。
    問題がなければ最下行の「以上を確認し次の設定に進む」リンクをクリックします。

    次のステップで設定を入力します。
    基本的に説明通り入力すればよいのですが、データベースやデータベースのユーザなど既に存在しているものを入力しないといけませんので、注意してください。
    ここまでのレシピ通りであれば、以下のように入力してください。


    MySQLホスト名
    localhost


    MySQL接続ユーザー名
    このレシピの「データベースの一般ユーザの作成」で作成したユーザ名


    MySQL接続パスワード
    このレシピの「データベースの一般ユーザの作成」で作成したユーザのパスワード


    使用データベース名
    tvdb


    テーブル接頭辞
    そのまま


    インストールURL
    http://TVSERVERのIPアドレス/epgrec/


    録画保存ディレクトリ
    そのまま


    サムネールの使用
    「使用する」に変更


    ffmpegのパス
    /usr/bin/ffmpeg


    サムネール保存ディレクトリ
    /thumbs


    EPG取得用テンポラリファイルの設定
    そのまま


    使用コマンドのパス設定
    そのまま


    以上で「設定を保存する」ボタンを押下して、次のステップに進んでください。


    続く環境設定(step3.php)では地デジチューナーの台数のみ入力すればよいようですが、このレシピでは設定は変更しません、そのほかの項目は運用しながら変更できます。


    地デジチューナーの台数
    1 そのまま


    BSチューナーの台数
    0 そのまま


    以上で「設定を保存する」ボタンを押下して、次のステップに進んでください。
    ※この「/epgrec/install/step3.php」画面が表示されない場合は、この手順の最初にあるapacheの再起動を試してください。

    最後にepgの初回受信のメッセージになりますので、最下行のリンクをクリックしてブラウザを閉じ、20〜50分程度待ってからepgrecのトップページ「http://TVSERVERのIPアドレス/epgrec/」を開くと、設定が正しく行われていれば番組表が表示され録画できます。

5-7. EGPの取得スケジュール設定

    EGP情報を定期的にインターネットから取得するスケジュールを以下で設定します。
    # cp -ip /var/www/epgrec/cron.d/getepg /etc/cron.d/
    # chown root:root /etc/cron.d/getepg
    

5-8. Linux地デジ予約録画システムを利用するクライアント設定

  • Linux地デジ予約録画システムを家庭内の別のパソコンから接続して録画予約するときは「http://TVSERVERのIPアドレス/epgrec/」に接続すれば利用できますが、既に録画したものを閲覧する場合はブラウザはFireFox、動画閲覧ソフトはVLCという組み合わせが相性がよいようですのでそれぞれインストールします。


  • ASFの対応
  • 次に、FireFoxを簡易動画ストリーミングASF(Advanced Streaming Format)を用いた録画番組の再生に対応させます。

    Firefoxの場合、「ツール」メニュー「オプション」「プログラム」設定パネルのアプリケーションを開き、Content Type欄からASF(video/x-ms-asf)を探し(検索欄に「ASF」を入力)、その取り扱い方法として「VLC Multimedia Pluginを使用」を選択してください。
    なお、この設定パネルにASFが無い場合、そのブラウザではASFとプラグインが関連づけられていませんので、設定する必要はありません。ASFを再生するアプリケーションの問い合わせがあった場合にVLCを指定してください。

      うまく行かない場合以下の点を確認してみてください。
      内容対応方法
      録画したファイルをvlcで閲覧すると、映像は表示されるが音声が聞こえない。またCMだけ音声が出る。 動画の最初がCMだった場合などに起こるようです。本編はステレオで、本編開始前のCMがステレオでない場合、最初に認識した音声種別で固定再生してしまうため起こっている可能性があるようです。
      その場合はvlcで動画再生後、「オーディオ」メニューの「オーディオトラック」の中を「トラック1」から「無効」に変更し、再度「無効」から「トラック1」に変更すると音声が再生され始めます。
      録画済みのファイルを選択しても、真っ黒な画面に「Waiting for video」としか表示されない場合、またはどうしてもMediaPlayerが起動してしまう場合
      1. Firefoxを起動し、「ツール」メニュー「オプション」の中の「プログラム」を選択し、「Windows Media オーディオ/ビデオ再生リスト(video/x-ms-asf)」を探します。
        ※見つからない場合はWindowsMediaPlayerをバージョンアップしてみてください。
      2. 「Windows Media オーディオ/ビデオ再生リスト(video/x-ms-asf)」の右側の「取り扱い方法」欄を「vlc.exeを使用」に変更します。そのようになっていない場合は、プルダウンメニューから「他のプログラムを選択」を選んで「プログラムの選択」画面を表示し、「参照」ボタンを押下し、「\Program Files\VideoLAN\VLC\vlc.exe」を選択します。これで「OK」ボタンを押下し設定を反映します。
      3. これで、FireFoxから録画済みのファイルを選択すると、vlcが起動し録画したものが閲覧できます。


以上で基本的な予約録画システムの構築は完了です。予約録画や閲覧を楽しんでください。


ハードは安価に入手しよう!