on bti2c0
bktr0: Card has no configuration EEPROM. Cannot determine card make.
bktr0: Pinnacle/Miro TV, Philips NTSC tuner.
(page 17)
Linuxでのカーネル再構築手順(Bt8x8編)
- 一般的な手順と同じでよい
- カーネルの設定変更
# cd /usr/src/linux
# make menuconfig (あるいはmake xconfig)
- カーネルのコンパイルとインストール
# make dep clean bzImage modules modules_install
# cp arch/i386/boot/bzImage System.map /boot/
- デバイスファイルの作成
# cd /dev
# ./MAKEDEV video ← キャプチャー用
# ./MAKEDEV audio ← サウンド用
- /etc/modules.confの設定
# vi /etc/modules.conf
- 再起動
# reboot
(page 18)
カーネルの設定変更(Bt8x8編)
- Multimedia devices → Video 4 Linuxをmに
- その下のVideo 4 Linux → BT848 Video 4 Linuxをmに
(page 19)
カーネルの設定変更(Bt8x8編)(つづき)
- Video 4 Linuxを使うために必要な設定
- Character devices → I2C support
- I2C support, I2C bit-banging interfacesをmに
- サウンド関係の設定
- Sound Card Supportをyに
- 持っているサウンドカードに対応した設定をする
- デバイスドライバはOSSを使用
(page 20)
/etc/modules.confの設定(Bt8x8編)
- BT878A-STVPCI2使用時の追加項目
alias char-major-81 bttv ←デバイス番号
options bttv card=78 ←キャプチャーカード番号
options tuner type=2 ←TVチューナー番号
- カード/チューナーの番号は
/usr/src/linux/Documentation/video4linux/bttv/CARDLISTを参照
- キャプチャーカード番号の例
card=0 - *** UNKNOWN/GENERIC ***
card=78 - Jetway TV/Capture JW-TV878-FBK, Kworld KW-TV878RF
card=81 - GV-BCTV5/PCI (IO/DATA)
card=99 - AD-TVK503 (アルファデータ)
- TVチューナー番号の例
type=2 - Philips NTSC (FI1236,FM1236 and compatibles)
type=4 - NoTuner
type=31 - SHARP NTSC_JP (2U5JF5540)
type=40 - HITACHI V7-J180AT
(page 21)
bttvドライバ使用時のデバイス認識
- モジュールとして組み込んだときは、デバイス使用時に認識される
% dmesg
(抜粋)
Linux video capture interface: v1.00
bttv: driver version 0.7.104 loaded
bttv: Bt8xx card found (0).
bttv0: using: BT878(Jetway TV/Capture JW-TV) [card=78,insmod option]
i2c-core.o: adapter bt848 #0 registered as adapter 0.
bttv0: using tuner=5
i2c-core.o: driver i2c TV tuner driver registered.
tuner: probing bt848 #0 i2c adapter [id=0x10005]
tuner: chip found @ 0xc0
tuner(bttv): type forced to 2 (Philips NTSC (FI1236,FM1236 and ..)) [insmod]
bttv0: registered device video0
bttv0: registered device vbi0
bttv0: registered device radio0
(page 22)
Linuxでのカーネル再構築手順(SAA713x編)
- 普通の再構築に比べて手間が増える(※の部分)
- ※カーネル2.4のソースコードにパッチを当てる
- カーネルの設定変更
- カーネルのコンパイルとインストール
- デバイスファイルの作成
- (慎重にやるならここで再起動)
- ※saa7134ドライバのインストール
- /etc/modules.confの設定
- 再起動
(page 23)
カーネル2.4のソースコードにパッチを当てる
- カーネル2.4.22以上のソースコードを用意
# cd /usr/src
# tar xfj linux-2.4.22.tar.bz2
# ln -s linux-2.4.22 linux
- Video for Linux 2を使うためのパッチを入手
- パッチをあてる
# bzip2 -dc patch-2.4.22-kraxel.gz | patch -p1
(page 24)
saa7134ドライバのインストール
- ソースコードを入手
- コンパイルしてインストール
% tar xvfz saa7134-0.2.10.tar.gz
% cd saa7134-0.2.10
% make KDIR=/usr/src/linux
# make install
(page 25)
/etc/modules.confの設定(SAA713x編)
- SAA7130-STVLP使用時の追加項目
alias char-major-81 saa7134 ←デバイス番号
options saa7134 card=10 ←キャプチャーカード番号
options tuner type=2 ←TVチューナー番号
- キャプチャーカードの番号はsaa7134-0.2.10/doc/CARDLIST.saa7134を参照
0 -> UNKNOWN/GENERIC
5 -> SKNet Monster TV
10 -> Kworld/KuroutoShikou SAA7130-TVPCI
13 -> ELSA EX-VISION 300TV
14 -> ELSA EX-VISION 500TV
16 -> AOPEN VA1000 POWER
- TVチューナーの番号はsaa7134-0.2.10/doc/CARDLIST.tunerを参照
(page 26)
saa7134ドライバ使用時のデバイス認識
- モジュールとして組み込んだときは、デバイス使用時に認識される
% dmesg
(抜粋)
i2c-core.o: i2c core module
Linux video capture interface: v1.00
saa7130/34: v4l2 driver version 0.2.9 loaded
saa7130[0]: subsystem: 1131:0000, board: Kworld/KuroutoShikou SAA7130-TVPCI [card=10,insmod option]
i2c-core.o: adapter saa7130[0] registered as adapter 0.
i2c-core.o: driver i2c TV tuner driver registered.
tuner: chip found @ 0xc0
tuner(bttv): type forced to 2 (Philips NTSC (FI1236,FM1236 and ..)) [insmod]
tuner: type already set (2)
saa7130[0]: registered device video0 [v4l2]
saa7130[0]: registered device vbi0
(page 27)
TV視聴アプリケーション
- あれこれ紹介せずに、代表的なものを紹介
- FreeBSD: fxtv
- Linux: xawtv
(page 28)
fxtv
(page 29)
fxtvの設定方法
- fxtvには設定ファイル(.fxtvなど)がないらしい
- 膨大かつ長いコマンドオプションで設定
- Xのリソースファイルで設定
- オリジナルは/usr/X11R6/lib/X11/app-defaults/Fxtv
- 今回はXのリソースファイルで設定
Fxtv*inputFormat: ntscj
Fxtv*defaultInput: tuner
Fxtv*defaultAudioInput: tuner
Fxtv*tunerMode: cable (アンテナの場合はantenna)
Fxtv*cableFreqSet: jpncable
Fxtv*cableStationList: 1-12 (CATVのチャンネル範囲に合わせる)
Fxtv*antennaFreqSet: jpnbcst
Fxtv*antennaStationList: NHK(2) MBS(4) ABC(6) KTV(8) YTV(10)
(page 30)
fxtvの使い方
- チャンネルの切り替え: ↓↑ボタン
- 入力系統の切り替え: Input → Tuner/S-Video
- 画面の拡大
- 起動時はオプションで指定
% fxtv -geometry 640x480
- 起動後は×ボタンで拡大/縮小
- フルスクリーンで表示する方法は不明(ないかも)
- 大画面で見たいときは
- あらかじめXFree86を低解像度で表示できるように設定
- xvidtune -nextで解像度を切り替える
- 画像の取り込み、録音、録画もできる
(page 31)
xawtv
- http://bytesex.org/xawtv/
- saa7134ドライバと同じ作者によるもの
- LinuxでもFreeBSDでも動く
- 最新版は3.91
- rpm,dpkg,FreeBSDのportsにもあり
- VinePlusで提供されているrpmはバージョンが古い
- ソースコードからのインストール手順
% configure
% make
# make install
(page 32)
xawtvの設定
(page 33)
.xawtv設定上の注意
- 一部の設定項目において、大文字が有効なときと小文字が有効なときがある
- 小文字: ntsc,television,svideo,compisite1
- 大文字: NTSC,Television,S-Video,Composite1
- 最近のバージョンでは小文字表記らしいのだが…
- どちらか片方しか有効にならない(もう片方だとエラーになる)
- xawtv起動時に怒られたら修正する
(page 34)
xawtvの使い方
- チャンネル/入力系統の切り替え: マウス左クリック → 選択
- 画面サイズは起動時のオプションで
% xawtv -geometry 640x480
- フルスクリーン表示: 画面内でF
- fxtvの所で紹介した方法でXを低解像度にしておくと大画面になる
- 画像の取り込み、録音、録画もできる
- XFree86起動時にXvideoを有効にしていると取り込めない
→ xawtv -noxv で起動すれば取り込める
(page 35)
xawtv使用上の注意
(page 36)
v4lctl (V4LCTL)
- Video 4 Linuxデバイス操作コマンド
- xawtvの付属品
- チャンネルの操作
% v4lctl setchannel 1ch
- 入力系統の操作
% v4lctl setinput svideo
- チャンネル名や入力系統は.xawtvを参照して動作する
- ところが、v4lctlとxawtvで.xawtvの記法が異なることがある
- ntsc/NTSC,svideo/S-Videoなど
- 対策: 設定ファイルを2種類用意し、切り替えて使用
- リモートで操作するときに役立つ
(page 37)
リモートでTVを見る方法
- 基本アイデア
- TVチューナーカードから得た映像/音声を
ストリーミングで流し、端末で受信する
- 今回はRealVideoを使う方法を紹介
- システム構成
- この方法の特徴
- さまざまな接続形態に対応できる
- 映像だけでなく音声も届き、同期も取れる
- 画質は期待できない(特に低速回線で見るとき)
(page 38)
リモートでTVを見るために必要なもの
- Helix Producer: エンコーダ
- RealVideo9コーデックを使用
- 必ずTVチューナーと同一マシンで動かす
- Helix Universal Server: サーバ
- 今回はTVチューナーと同一マシンで動かすが、別マシンでも可
- RealPlayer: プレーヤー
- TVチューナーと別マシンで動かす
- 同一マシンにもインストールしておくと動作確認時に役立つ
- 常時接続回線とグローバルIPアドレス
- TVサーバはLinuxで構築
- Helix ProducerにFreeBSD版がないため
- 端末はRealPlayerさえ動けばどんなOSでもよい
(page 39)
RealPlayerのインストール
- Windows, Macの人: RealOnePlayerを使用
- Linux, BSDの人: RealPlayer8(Linux版)を使用
- BSDの人はLinuxエミュレータ使用
- RealVideo9コーデックに未対応
→ 後からライブラリを追加して対応
(page 40)
RealPlayer8のRealVideo9コーデック対応方法
- RealVideo9対応パッケージを入手
- 入手したファイルを展開
- RealVideo9用ライブラリを
RealPlayer8用ライブラリのディレクトリにコピー
% cd rv9/codecs
% cp drv4.so.6.0 rv40.so.6.0 /usr/local/lib/RealPlayer8/Codecs
- RealPlayerを起動して動作確認
- FreeBSDのportsでRealPlayerをインストールすると、
RealVideo9対応ライブラリが自動的に追加される
(page 41)
Helix Producerのインストール
- Helix Producer Basic(無償版)を入手
- 入手したファイルを実行してインストール
- 注意: サウンドドライバはOSSを使うこと
- Helix ProducerはALSAに対応していないらしい
(page 42)
Helix Producerが使うデバイスの検出
% producer -pd
VIDEO
Device 00: Kworld/KuroutoShikou SAA7130-TV /dev/video0
Port 00: S-Video ← スカパー
Port 01: Composite1
Port 02: Television ← TVチューナー
AUDIO
Device 00: Sound Blaster /dev/dsp
Port 00: synth
Port 01: line ← スカパー
Port 02: mic ← TVチューナー
Port 03: cd
(page 43)
Helix Producerの動作確認
- v4lctlでTVを起動
% v4lctl setstation 1ch
- Helix Producerでファイルに出力(つまり録画)
% producer -ac 00 -ap 02 -vc 00 -vp 02 -cs 240x180 -ad '150k' -o test.rm
- -ac: オーディオデバイス番号
- -ap: オーディオポート番号
- -vc: ビデオデバイス番号
- -vp: ビデオポート番号
- -cs: 画面サイズ
- -ad: 帯域
- -o: 出力ファイル名
- 適当な所でCtrl-Cを打って録画終了
- RealPlayerでtest.rmを再生できればOK
(page 44)
Helix Universal Serverのインストール
- Helix Universal Server Basic(無償版)を入手
http://licensekey.realnetworks.com/rnforms/products/servers/eval/index.html?ulf=b
- 入手したファイルを実行してインストール
- インストール時にいろいろと指定する
- ライセンスキー: 入手するとXML形式のファイルがメールで届く
- インストール先のディレクトリ
- ユーザ名とパスワード: エンコーダからの
ストリーム受付や管理画面での認証に使用
- 各種ポート番号:
PNM(デフォルト: 7070)、RTSP(デフォルト: 554)、
HTTP(デフォルト: 80)、MMS(デフォルト: 1755)、
管理画面(デフォルト: 乱数)
- 起動
# cd (インストール先)
# Bin/rmserver rmserver.cfg
- RealPlayerで動作確認
- rtsp://serverhost.domain.jp/real9video.rm が再生できればOK
(page 45)
Helix ProducerからHelix Serverへの送出
- 同一マシンでProducerとServerを動かすとする
% producer -ac 00 -ap 02 -vc 00 -vp 02 -cs 240x180 -ad '28k,56k,256k' -sp username:password@localhost:80/stream.rm
- -ad: 帯域
- 複数指定すると、回線状況に応じて帯域が動的に変化(SureStream)
- 指定できる数字は、$INSTALLDIR/audiences/ を参照(最大3つ)
- -sp: Helix Serverとの接続方法、ストリーム名など
- 書式: username:password@serverhost.domain.jp:port/stream.rm
- username,password: Helix Serverインストール時に指定したもの
- serverhost: Helix Serverのホスト名かIPアドレス
- port: Helix Serverインストール時に指定したHTTPポート番号
- stream.rm: ストリーム名(自由に指定)
- RealPlayerで動作確認
- rtsp://serverhost.domain.jp/broadcast/stream.rm
が再生できればOK
(page 46)
外出先からの接続
- 必要なもの
- システム構成
- TVサーバがグローバルIPアドレスを持っているとき
- 端末からは、そのIPアドレスのHelix Serverにアクセスする
- TVサーバがプライベートIPアドレスを持っているとき
- 例えば、自宅にLANがあるとき
- たいていルータが入っているので、そこで細工する
(page 47)
自宅にLANがあるときの構成
- システム構成
- ルータでの設定
- IPマスカレードの設定により特定ポートへのアクセスをTVサーバに向ける
- IPマスカレードを設定するポート
- RTSPのポート(デフォルト: 554/tcp)
- HTTPのポート(デフォルト: 80/tcp)
- 管理画面のポート(デフォルト: 乱数/tcp)
- モニター画面のポート(デフォルト: 9090/tcp)
- SSHのポート(デフォルト: 22/tcp)
(page 48)
自宅LAN内TVの視聴方法
- sshでルータのアドレスを指定(アドレス変換されてTVサーバへ)
% ssh 200.1.1.1
- TVを起動
% v4lctl setstation 1ch
- Helix Producerを起動しストリーム送出開始
% producer -ac 00 -ap 02 -vc 00 -vp 02 -cs 240x180 -ad '28k,56k,256k' -sp username:password@localhost:80/stream.rm
- RealPlayerで動作確認
- rtsp://200.1.1.1/broadcast/stream.rm
- 実際にはTV視聴用シェルスクリプトを作成し、TVサーバにて実行
% ./stream.sh 1ch 28k,56k,150k
- cronやatコマンドで指定時刻に起動することも可能
(page 49)
TV視聴用シェルスクリプト
#!/bin/sh
#$1: チャンネル名、$2: 帯域
channel=$1
bitrate=$2
#すでにxawtvが動いていたらkillする
killall xawtv
#v4lctlでTVを起動
cd $HOME
cp .xawtv-big .xawtv
/usr/local/bin/v4lctl setstation $channel
#入力系統に応じた設定
case $channel in
skapa) #スカパー
# audio from line
audioport="01"
/usr/bin/aumix -l 60
/usr/bin/aumix -m 0
# video from S-Video
videoport="00"
;;
*) #地上波
# audio from mic
audioport="02"
/usr/bin/aumix -l 0
/usr/bin/aumix -m 50
# video from Television
videoport="02"
;;
esac
#producerを起動
/usr/local/bin/producer -ac 00 -ap $audioport -vc 00 -vp $videoport -cs 240x180 -ad $bitrate -sp username:password@localhost:80/stream.rm
(page 50)
回線状況に応じた設定
- サーバ〜端末の回線状況を推測し、エンコーダの帯域を設定する
- 低速回線で接続しているとき(PHSなど): 28k固定で設定
- 高速回線で接続しているとき(ホテルのLANなど): 150kぐらいの固定で設定
- 回線状況が大きく変化するとき(会社のLANなど): 幅広く3種類選んで設定
(page 51)
映像素材に応じた設定
- 動きの多い素材(スポーツ中継など): フレーム数を重視する
- 画面サイズを小さくする
- producerコマンドで-vm smoothを追加する
- ただし低速回線のときは、フレーム数を稼ぐのはあきらめる
- 動きの少ない素材(ニュース、ドラマなど): 各コマの画質を重視する
- producerコマンドで-vm sharpを追加する
(page 52)
まとめ
UNIXマシンでTVを見る方法を紹介
- UNIXマシンでTVチューナーカードを動かす
- FreeBSD
- Linux
- Bt8x8系チップとbttvドライバ
- SAA713x系チップとsaa7134ドライバ
- TV視聴アプリケーションを動かす
- FreeBSD: fxtv
- Linux: xawtv
- リモートでTVを見る
- RealVideoによるライブ配信(見るのは自分だけ)
(page 53)
参考文献
- BSD magazine 第9号(2001年): bktrドライバ、fxtvの紹介
- UNIX magazine 2001年8月号「UNIX便利帖」: fxtvの紹介
- Software Design 2003年3月号「Linux, ビデオデッキ化計画」
- 「Linuxカーネル設定ガイド」翔泳社
- 「Helix Universal Server Advanced Book」BNN新社
- Linuxでのハードディスクレコーダ構築の記事
- 日経Linux 2003年12月号
- Software Design 2004年2,3月号
(page 54)
質問受け付けます
(page 55)