[ mbrtv ]

7.ivtvパッケージ for GV-MVP/RX

11/07/04:update
03/14/04:from

最新 のTVキャプチャカードであるIOデータ の「 GV-MVP/RX 」がLinuxで動作するようになりました。

実際に使ってみると、(1)ハードウエアエンコードのためCPU負荷がほとんどゼロ、(2)画質と音質は昨今の家電なみに良い、ということがわかり ます。

ここでは、そのドライバのインストールからツールの簡単な使用方法までを紹介します。

* Fedora Core 2用RPMパッケージ追加 (10/30/04)
  1. キャプチャ画像
  2. ダウンロード
  3. 環境作りとインストール
  4. セットアップとテスト
  5. 設定ファイルに追加
  6. テレビをみる
  7. Vine Linux 2.6へのインストール
  8. ivtvパッケージのリビルド
  9. 複数のTVカードで裏番組をチェック
  10. 関連リンク
  11. 販売店(楽天)




TVチューナー コンポジット経由



capture Image
「ペプシ・コーラのCM」より
(04/24/04)
ほ乳類・大自然の物語」より
NHK BS1 (04/24/04)


環境作りとインストール(アンインストール)

必要なPerlモジュールをインストールします。

Video関係のPerlモジュール ダウンロード先
  • perl-Tk
  • perl-Config-IniFiles
  • perl-Video-Frequencies
  • perl-Video-ivtv
  • Fedora Core 1


  • # rpm -Uvh perl-Tk-804.027-100.fc1.i386.rpm
    # rpm -Uvh perl-Config-IniFiles-2.38-100.fc1.noarch.rpm
    # rpm -Uvh perl-Video-Frequencies-0.03-100.fc1.noarch.rpm
    # rpm -Uvh perl-Video-ivtv-0.12-100.fc1.i386.rpm
    ivtvパッケージをダウンロードしてインストールし ま す。

    # rpm -Uvh ivtv-GV-MVPRX-0.1.9_GPIO_040306-9.rhfc1.i686.rpm



    [ 補足-1 ] カーネルのアップデート

    「  kernel-module version mismatch 」というエラーが出たり、カーネルをアップデートするときは、ivtvパッケージをリビルド(再構築)し て下さい。



    [ 補足-2 ] アンインストール

    ivtvドライバをアンインストールする時は、rpmコマンドを実行する前に「UNINSTALL」スクリプトを実行して下さい。

    # cd /usr/local/ivtv-GV-MVPRX
    # ./UNINSTALL
    # rpm -e ivtv-GV-MVPRX



    (3) セットアップとテスト

    必要なドライバをロードします。

    # cd /usr/local/ivtv-GV-MVPRX/GV-MVPRX
    # ./load_module.sh

    試しに、例えば「 8 」チャンネルを「 30秒 」、「 test.mpg 」という名前で録画してみます。

    $ record-v4l2.pl -c 8 -t 30 -i 6 -f ntsc-bcast-jp --output-settings 0 \
    > --directory-format "" -o test.mpg
    $ gmplayer test.mpg

    設定ファイルに追加

    設定ファイルに以下を追加することによってドライバが起動時に自動的にロードされます。

    /etc/modules.conf -- kernel-2.4 (Fedora Core 1, Vine 2.6, etc.)
    # for GV-MVP/RX
    alias char-major-81 videodev
    alias char-major-81-0 ivtv
    options tuner type=44
    options upd64031a card=4
    options upd64083 card=4
    add below ivtv xwm8739 gvmvprx1 gvmvprx2 upd64031a upd64083 saa7115gv tuner


    /etc/modprobe.conf -- kernel-2.6 (Fedora Core 2, etc.)
    # for GV-MVP/RX
    alias char-major-81 videodev
    alias char-major-81-0 ivtv
    options ivtv tuner=44
    install videodev /sbin/modprobe --ignore-install videodev; \
        /sbin/modprobe i2c-core; /sbin/modprobe i2c-algo-bit; \
        /sbin/modprobe tuner_ivtv; /sbin/modprobe saa7115gv;
    install ivtv /sbin/modprobe --ignore-install ivtv;  \
        /sbin/modprobe gvmvprx1; /sbin/modprobe gvmvprx2; \
        /sbin/modprobe upd64031a  card=4; /sbin/modprobe upd64083  card=4; \
        /sbin/modprobe xwm8739
    
                



    bt8x8を搭載したTVカードが別にもう1枚あって、tuner のtypeが同じであれば以下を追加することによって両方とも使えるようになります(たぶん・・・)?

    alias char-major-81-1 bttv
    options bttv card=<カード番号> radio=0

    ivtv系のTVカードは/dev/video0、bttv系のTVカードは/dev/video1に割り当てられます。
    したがって、録画しながら裏番組をみたりできるハズです。

    $ xawtv -c /dev/video1



    [ 参考 ]

    ivtv TvOutHowto


    (5) テレビをみる

    このTVカードが出力するのはMPEG2-Videoストリームなので、 xawtvなどでは直接テレビをみることができません。
    ここでは、一時ファイルを経由させてmplayerでテレビをみてみます。

    $ ptune.pl --channel 8 --freqtable ntsc-bcast-jp --set-msp-matrix 0
    $ dd if=/dev/video0 of=tvstream.mpg &
    $ gmplayer tvstream.mpg


    当然、一時ファイルはどんどん大きくなります(50MB/分)から、十分なディスクスペースを確保するか、または途中でファイルを削除する必要がありま す。

    - 終了 -

    $ killall dd
    $ rm -f tvstream.mpg



    shellスクリプトにするとこんな感じでしょうか。
    #!/bin/sh
    # tvshow-0.8 08/05/04

    FSIZE_LIMIT=5000 # [ MB ] これ以上一時ファイルが大きくなったら強制終了
    DEVICE_FILE=/dev/video0 # /dev/video0: 1枚目のカード, /dev/video1: 2枚目のカード

    shutdown(){
    echo
    kill $DD_PID &>/dev/null
    kill $MP_PID &>/dev/null
    kill $FS_PID &>/dev/null
    rm -f $TMP_FILE
    exit 0
    }
    countdown() {
    local CNT=$1
    while [ ${CNT} -gt 0 ]; do
    printf "> ${CNT} <\r"
    let "CNT -= 1"
    sleep 1
    done
    }
    setchannel() {
    local ch=$1
    ptune.pl --channel $ch --input ${DEVICE_FILE} --freqtable ntsc-bcast-jp >/dev/null
    if [ $? == 0 ]; then
    echo "チャンネルを「 $ch 」に設定しました。"
    fi
    }
    spawn() {
    dd if=${DEVICE_FILE} of=$TMP_FILE &
    DD_PID=$!
    countdown 3
    # xine $TMP_FILE &>/dev/null &
    mplayer $TMP_FILE &>/dev/null &
    MP_PID=$!
    }
    fsizeChecker() {
    local fsize=0 tmp
    while [ $fsize -lt $FSIZE_LIMIT ]; do
    sleep 60
    for s in `du -m ${TMP_FILE}`; do
    fsize=$s
    break
    done
    done
    echo
    echo "ファイルサイズが${FSIZE_LIMIT}MBをオーバーしたので強制終了します...."
    kill $MAIN_PID
    kill $DD_PID &>/dev/null
    kill $MP_PID &>/dev/null
    rm -f $TMP_FILE
    }
    createFileName() {
    TMP_FILE=tvstream.mpg
    i=0
    while [ -s $TMP_FILE ]; do
    TMP_FILE=tvstream${i}.mpg
    let "i += 1"
    done
    }
    trap shutdown 2
    if [ "$1" == "" ];then
    CHANNEL=1
    else
    CHANNEL=$1
    fi
    # メモリ使用量制限 for another task. about 64MB.
    ulimit -v 64000000
    MAIN_PID=$$
    createFileName
    setchannel $CHANNEL
    spawn
    fsizeChecker &
    FS_PID=$!
    while [ 0 ]
    do
    printf "チャンネル? > "
    read -e KEY
    if echo $KEY | grep -E "[1-9]*[0-9]" >/dev/null; then
    setchannel $KEY
    countdown 3
    elif [ "$KEY" == "df" ]; then
    df -m ./
    else
    echo "チャンネル変更: [ チャンネルNo ] + [ Enter ]して3秒待つ"
    echo "スクリプト終了: [ Ctrl ] + [ c ]"
    echo "ディスク使用量: [ df ] + [ Enter ]"
    fi
    done

    [ 使用方法 ]

    上記スクリプトを「 tvshow 」という名前で保存し、chmodしてから実行します。
    $ chmod +x tvshow
    $ ./tvshow 4

    6. Vine Linux 2.6 へのインストール

    ivtvパッケージをインストールする前に、v4l2とi2c-2.7のパッチを当てたカーネルをイン ストールします。

    1. カーネルのソースをダウンロードします。ここではvineのダウンロードサイトに あるものを使用します。

      $ apt-get source kernel
      $ rpm -ivh kernel-2.4.22-0vl2.11.src.rpm


    2. パッチをあてたカーネルをコンパイルします。 「 kernel-2.4.22-<リリース番号>.nosrc.rpm 」をダウンロードし、リビルドします。
      途中で何度か新しいドライバーを追加するか聞かれるので、全て「 m 」と答えます。

      $ rpm --rebuild kernel-2.4.22-0vl2.11.3.nosrc.rpm


    3. リビルドが完了したらカーネルをインストールします。

      $ cd ~/rpm/RPMS/i386/
      $ su
      # rpm -Uvh kernel-2.4.22-0vl2.11.3.i386.rpm
      # rpm -Uvh kernel-headers-2.4.22-0vl2.11.3.i386.rpm


    4. /etc/lilo.confまたは/boot/grub/grub.confを修正し、一旦終了してから新し い カーネルで再 起動し ます。

    5. video関係のperlモジュールとvine2.6用のivtvパッケージをダウンロードし てインストールします。
      これ以降は上記のFedoraやRedHatと同じです。引続き「  (3) セットアップとテスト  」を実行して下さい。


      # rpm -Uvh perl-Config-IniFiles-2.38-0vl2.noarch.rpm
      # rpm -Uvh perl-Video-Frequencies-0.03-0vl2.noarch.rpm
      # rpm -Uvh perl-Video-ivtv-0.12-0vl2.noarch.rpm
      # rpm -Uvh ivtv-GV-MVPRX-0.1.9_GPIO_040323-0.vl2.i686.rpm



    ivtvパッケージのリビルド

    ※ カーネルバージョンの変更に伴うリビルドは、新しいカーネルで起動した後に行う必要があります。
    1. kernel-sourceパッケージとivtv の ソース・パッケージをダウンロードしてインストールします。

      $ rpm -ivh ivtv-GV-MVPRX-0.1.9_GPIO_040323-2.rhfc1.nosrc.rpm
      $ su
      # apt-get install kernel-source#<バージョン>


    2. specファイルを編集します。

      ivtvドライバとパッケージのバージョンをそれぞれ必要に応じて変更します。

      %define cardName GV-MVPRX
      %define kernelVersion 2.4.22
      %define machineArch i686 # i386, i586, athron
      %define majorVersion 0.1.9 # ivtvドライバのメジャー・バージョン
      %define developDate 040323 # 同バージョンに含まれている開発日
      %define firmWareName p2driverRX.sys

      Summary: TV capture Bord driver for the iTVC15 familiy of MPEG codecs
      Name: ivtv-%{cardName}
      Version: %{majorVersion}_GPIO_%{developDate}
      Release: 2.rhfc1 # パッケージのバージョン
      License: GPL
      Group: System Environment/Kernel
      URL: http://linux.paken.org/index.php?LinuxでITVC16-STVLP
      BuildArch: %{machineArch}
      Source0: ivtv-%{version}-1.tar.Z # ivtvドライバ・ソースの名称
      Source1: p2driverRX.sys
      ...
      ..
      .


    3. メーカーが提供しているファーム・ウエアをコピーします。

      $ mount /mnt/cdrom
      $ cp /mnt/cdrom/Driver/p2driverRX.sys /usr/src/redhat/rpm/SOURCE/


    4. パッケージをビルドします。

      $ cd /usr/src/redhat/rpm/SPECS
      $ rpmbuild -bb ivtv-gv-mvprx.spec


    5. ビルドしたバイナリ・パッケージをインストールします。

      $ cd /usr/src/redhat/rpm/i686
      $ su
      # rpm -Uvh ivtv-GV-MVPRX-0.1.9_GPIO_040323-2.rhfc1.i686.rpm



    複数のTVカードで裏番組をチェック

    GV-MVP/RXが2枚あれば2つの番組を同時に視聴や録画することができます。
    下記を/etc/modules.confに追加することで、2枚目のTVカードへ/dev/video1を通じてアクセスできるようになります。
    alias char-major-81-0 ivtv
    alias char-major-81-1 ivtv
    options tuner type=44
    2枚目のTVカードでTV番組をみるには以下のようにします。
    $ ptune.pl --channel 1 --input /dev/video1 --freqtable ntsc-bcast-jp
    $ dd if=/dev/video1 of=tvstream2.mpg &
    $ xine tvstream2.mpg
    $ killall dd # 後始末

    [ 関連リンク ]

    Linux でITVC16-STVLP 」 ... ドライバの開発

    WinTV-PVR-250 driver 」 ... WinTV-PVR-250用ファームウエアの提供




    20