CentOS6.4とPX-W3PEで作る録画サーバ

PLEXから発売されている、地上波*2+BS/CS*2のチューナーを内蔵したテレビチューナーPX-W3PEとLinuxを使ってテレビ録画サーバを構築します。
これまでPX-W3PEはLinuxドライバが公開されておらずWindowsで使うほかありませんでしたが、2012年9月にはLinuxドライバが公開されており容易に利用出来るようになりました。
ところが割と最近の公開であるせいか、Linuxで動作させている実例が少ないため、ここで記録しようと思います。

PLEX PX-W3PE

先述の通り、地上波*2+BS/CS*2のチューナーを内蔵したテレビチューナーです。
内部で分配+増幅をしているため、アンテナの接続は2本だけですみます。
PCI-Express x1 接続で、ロープロファイルに対応しますので、小さな筐体に収められます。
また、同様の目的で利用されるPT2やPT3を利用する場合は、B-CASカードを読み取るために別途eTaxで利用するカードリーダが必要ですが、本製品では内蔵されております。
※ただし、LinuxではICカードリーダのドライバが用意されていないため(2013年11月現在)、別途ICカードリーダが必要となります。

構築手順

サーバの作成

今回はこの目的のために新しくサーバを構築しました。
使用したパーツは以下の通りです。

種類 型番 ドスパラ価格
ケース IN WIN IW-BMR651 7,760
CPU/APU AMD A10 6700(Socket FM2 4Cores 3.9GHz 4MB 65W) 15,580
M/B ASRock FM2A88X-ITX+ 10,480
MEM CFD W3U1600HQ-8G
(8GB*2 セット DDR3 PC3-12800)
16,500
SSD ADATA ASX900S3-256GM-C
(256GB)
16,980
Tuner PLEX PX-W3PE (Amazon)
10,500
ICカードリーダ NTT-ME SCR3310-NTTCom (Amazon)
2,090

ドライブはUSB外付けを使います。
ケースの電源は160WがMAXですから、あまりTDPの大きなCPUは載せられませんし、ハードディスクも多く載せられません。
今回は、CPUにAMDの65Wモデル、ディスクにSSDを載せることで消費電力を抑えた構成としています。
大きなデータは、別のNASに保存する予定でいます。

OS等を入れたあと、アイドル状態で消費電力を測ると40W程度でした。
BIOS(UEFI)画面での消費電力は120W程度でした。

Linuxの導入

  1. 普通にCentOS 6.4を導入します。
  2. SELinuxを無効にします。
    # vim /etc/selinux/config
    ※再起動後反映
    
  3. yum updateをします。
    # yum update
    
  4. yumのリポジトリを導入します。
    # rpm -Uvh http://elrepo.org/elrepo-release-6-4.el6.elrepo.noarch.rpm
    # rpm -Uvh http://ftp.iij.ad.jp/pub/linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
    # rpm -Uvh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
    
  5. ntpdの設定をします。
    # vim /etc/ntp.conf
    
  6. iptables, ip6tablesを無効にします。
    セキュリティレベルが低下しますので、ルータ配下にいる事が前提です。
    必要であれば無効にするのでは無くて、適宜設定をして下さい。

    # service iptables stop
    # service ip6tables stop
    # chkconfig iptables off
    # chkconfig ip6tables off
    
  7. その他必要に応じて設定を行います。

ドライバの導入

  1. PLEXのダウンロードページより、Linux向けのドライバをwget等でダウンロードします。
  2. ダウンロードしたzipファイルを解凍します。
    アーキテクチャに合わせて、解凍したzipの中の64bit.tar.gz or 32bit.tar.gzも展開します。

    # unzip PX-W3PE_LinuxDriver_ver.1.0.0.zip
    # cd PX-W3PE_LinuxDriver_ver.1.0.0/Driver
    # tar xvzf 64bit.tar.gz
    
  3. 中に入っているカーネルモジュールを読み込ませます。
    # insmod 64bit/asv5220_dtv.ko
    
  4. モジュールがロードされたか確認します。
    # lsmod | grep asv5220
    asv5220_dtv           187813  0
    # ls /dev/asv*
    /dev/asv52200  /dev/asv52201  /dev/asv52202  /dev/asv52203
    
  5. モジュールを起動時にロードするようにします。
    # cp 64bit/asv5220_dtv.ko /usr/lib64/asv5220_dtv.ko
    # vim /etc/sysconfig/modules/asv5220_dtv.modules
    

    (asv5220_dtv.modulesを以下の内容で作成)

    #!/bin/sh
    /sbin/insmod /usr/lib64/asv5220_dtv.ko
    

    実行権限を与えます。

    # chmod 755 /etc/sysconfig/modules/asv5220_dtv.modules
    
  6. OSを再起動してモジュールがロードされるかを確認します。
    # lsmod | grep asv5220
    

受像用・録画用アプリケーションの導入

映像を受信するためにはrecpt1を使用します。録画にはepgrecを使用します。
また、ICカードリータを利用するための準備を行います。

  • recpt1(ただし、ここで公開されているファイルは使用しません。後述)
  • epgrec

ICカードリーダ

  1. ICカードリーダ用のパッケージを導入します。
    # yum install pcsc-lite pcsc-lite-devel pcsc-lite-libs ccid
    
  2. CentOSでは必要なパッケージが不足しているので、Fedora用のパッケージを追加で導入します。
    # rpm -ivh http://ftp.kddlabs.co.jp/033/Linux/packages/fedora.archive/releases/13/Everything/i386/os/Packages/pcsc-perl-1.4.8-2.fc13.i686.rpm
    # rpm -ivh http://ftp.kddlabs.co.jp/033/Linux/packages/fedora.archive/releases/13/Everything/i386/os/Packages/pcsc-tools-1.4.16-1.fc13.i686.rpm
    
  3. ついでに必要なパッケージも入れておきます。
    もしパッケージがインストール出来ないものがあれば、yumコマンドのパラメータに”–enablerepo=rpmforge”を追加してください。

    # yum install gcc-c++
    # yum install perl-Gtk2
    # yum install kernel-devel
    # yum install autoconf automake
    
  4. 動作確認をします。
    B-CASカードを裏向き(ICチップが上向き)に挿入して、以下のコマンドを実行します。

    # service pcscd start
    # chkconfig pcscd on
    # pcsc_scan
    PC/SC device scanner
    V 1.4.15 (c) 2001-2009, Ludovic Rousseau <ludovic.rousseau@free.fr>
    Compiled with PC/SC lite version: 1.5.2
    Scanning present readers...
    0: SCM SCR 3310 NTTCom 00 00
    
    Sat Dec  7 23:54:08 2013
    Reader 0: SCM SCR 3310 NTTCom 00 00
    Card state: Card inserted,
    ATR: 3B F0 12 00 FF 91 81 B1 7C 45 1F 03 99
    

    このような感じで Card inserted と表示されていれば成功です。
    ICカードリーダは、点滅している必要があります。

recpt1

recpt1は公式サイトに用意されているものだと、PLEX PX-W3PEに対応していません。
そのため、foltia ANIME LOCKERというアニメ自動録画システムに同梱されているrecpt1を使用します。

foltia自体は有料となっていますが、必要なのはPX-W3PEに対応したrecpt1だけですので、評価版を導入してrecpt1のバイナリだけを使用します。

  1. VMWareなどの仮想OSソフトウェアを使用して、ゲストマシンを用意します。
    その際ハードディスクは20GB以上で作成しないと、foltiaの導入が出来ません。
  2. foltiaのLiveCDをダウンロードします。
  3. ゲストマシンのCDドライブに、ダウンロードしたLiveCDのisoファイルを読み込ませ起動させます。
    CD起動により以下の様な画面が出た後、CentOSが起動します。
    foltia-2013-12-07-13-08-10
  4. ログイン画面が出てきます。
    が、これはそのままにしておき、ホストマシンのブラウザから画面に表示されているURLにアクセスします。
    この画面の場合:http://192.168.74.128
    foltia-2013-12-07-13-11-02
  5. ブラウザでアクセスすると以下の様な画面が表示されます。
    [同意して次へ進む]を選択します。
    foltia-01
  6. インストールをする画面が出てきますので、[続行(ドライブ選択)]を選択します。
    foltia-02
  7. インストールの最終確認が表示されます。
    起動ディスクのラジオボタンを選択します。(これをしないと再起動時に起動できません。)
    ゲストマシンに7桁の数字が表示されていますから、それをブラウザの下部の入力欄に入力し、[ハードディスク消去とインストール]を選択します。
    foltia-03
    foltia-2013-12-07-13-23-39
  8. インストール中です。
    foltia-04
  9. インストール完了後、ゲストマシンがシャットダウンしますので、起動し直します。
    起動時にハードディスクから起動できるようにしておきます。
  10. 起動後、再度ブラウザで接続し直します。
    セットアップ画面が表示されるので、[同意して次へ進む]を選択します。
    foltia-05
  11. チューナードライバ導入画面が表示されます。
    foltia-06
    中程のURLを開きます。
    開いたページの左側のメニューに、[bz2]と書かれたメニューがあるのでクリックし、ファイルをダウンロードします。
    foltia-07
    最後にダウンロードしたファイルを、アップロードします。
  12. アップロードすると自動的にゲストマシンが再起動します。
    再起動が完了したら、この先はブラウザ不要です。
  13. ゲストマシンで以下のユーザ/パスワードでログインします。
    root/foltiaroot
    foltia-2013-12-07-22-53-54
  14. ログインすると次のようにコマンドを打ちます。
    # which recpt1/
    /usr/local/bin/recpt1
    # which recpt1ctl
    /usr/local/bin/recpt1ctl
    # which checksignal
    /usr/local/bin/checksignal
    

    foltia-2013-12-07-23-19-52

  15. この場所に必要なコマンドがありますので、それを一般ユーザのディレクトリへコピーします。
    # cp /usr/local/bin/{recpt1,recpt1ctl,checksignal} ~foltia/
    

    foltia-2013-12-07-23-39-17

  16. WinSCP等のソフトウェアを用いて、今コピーしたrecpt1, recpt1ctl, checksignalの3つのファイルを、録画サーバへ転送します。
  17. 後は、ゲストマシンをシャットダウンして、仮想マシンごと削除して構いません(もう使いません)。
    # poweroff
    

epgrec

番組表や予約録画をするためのウェブアプリケーションepegrecを導入します。
動作させるために、apacheとphpを導入する必要があります。

あと、mysqlサーバを利用しますが、今回は既存のmysqlサーバを流用しますのでインストールはしません。
必要な設定は適宜検索等で導入して下さい。

  1. httpd, php, php-mbstringをインストールします。
    apacheの設定は適宜実施しておきます。

    # yum install httpd php php-mbstring
    
  2. 上記リンクを辿ってepgrec_20111001.tar.gzをダウンロードします。
    # wget "http://sourceforge.jp/frs/redir.php?m=iij&f=%2Fepgrec%2F53387%2Fepgrec_20111001.tar.gz"
    
  3. 展開して、wwwドキュメントルートへ配置します。
    # tar xvzf epgrec-20100322.tar.gz -C /var/www/html
    # chmod 777 /var/www/epgrec/
    # chown -R apache: /var/www/epgrec/
    
  4. 設定ファイルを編集して、epgrecで使用するチャンネルを変更します。
    # vim epgrec/config.php
    
    $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", // 大学
    );
    
  5. LAN内のクライアントからブラウザでサーバへ接続します。
    接続先は http://your-server-name/epgrec/ とかになります。
  6. 接続したら画面の指示に従って、epgrecの初期設定を進めます。
    step1:パーミッションチェックが走りますが、okではない項目があればパーミッションをチェックして下さい。
    ※以降のキャプチャではパスがこれまでの設定値とは異なりますので、適宜読み替えて下さい。
    epgrec-01
  7. step2:あらかじめ用意したmysqlデータベースの設定をします。
    epgrec-02
  8. step3:チューナーの設定をします。
    ※値は変更しているものもあります。
    epgrec-03
  9. step4:初期設定が完了します。
    初回はEPG番組表が取得されていないため、手動で取得をします。
    リンクをクリックするか、記載のコマンドを実行することで取得を始めます。
    ※時間が掛かります。
    epgrec-04
  10. EPG番組表を自動的に取得するためのcronを準備します。
    debian向けのファイルになっているので、CentOS向けに実行ユーザをapacheに変更します。

    # cp /var/www/epgrec/cron.d/getepg /etc/cron.d/
    # vim /etc/cron.d/epgrec
    
    29 */2 * * *   apache /var/www/epgrec/getepg.php
    

終わり

長くなりましたがこれで一通り完了です!


CentOS6.4とPX-W3PEで作る録画サーバへの1件のコメント

  1. アバター ぴなれろ
    ぴなれろ コメント投稿者

    質問させてください。
    linuxをまったく知らない人がここに書いてある通りに進めれば録画サーバが出来るものですか?

    • アバター tukapiyo
      tukapiyo コメント投稿者

      難しいと思います。
      Linuxが出来る人でも、この記事を読んでうまく行く保証は出来ません。試行錯誤が必須です。
      その試行錯誤をするにあたり、Linuxの知識は必要です。