■はじめに | ||
■TV録画を快適に -DiGA E80H に持った不満- | ||
こちらのページで解説したように,Linux
ベースでのTV/FMラジオの録画/録音サーバを立ち上げ,ストリーミング機能も含めて
便利に使っていました.しかし,TV録画に関して述べると,常用し始めた後で
いくつかの不満点が出てきました.当初は『とりあえず放送されたものを録画でき,
そこそこの品質でチェック出来たら良い』と思っていたのですが,思いの他安定
かつ便利に使えるため,欲が出てきたとも言えます. 実はきちんと録画したい(残したい)ものに関しては Panasonic製 DiGA E80Hを購入したこともあり,こちらで録画すれば良いと考えていました. しかし,使い込むに従い,次第に DiGA の欠点が見えてきます.あくまでも私が 主観的に感じるところの欠点ですが,以下のような不満点を持ち始めました.
以上,かなり贅沢な悩みだと思います.VTRの置き換えと考えた場合は,かなりの部分 で妥協できるレベルだと思います. しかし,内蔵80GBディスクの空き容量を確保するために, DVD-R/RAM にデータを書き出して PC に移動する…という作業を頻繁に 行っていると,とてもではないですが忍耐力無くしてやってられません. HDD から DVD-R/RAM へファイルをコピーする際に使用する DiGA のユーザ・ インターフェイスは,PC を使い慣れ ている人にとってはまどろっこしく,また,1枚コピーするのに30分間(記録ビットレート を変更する場合は実時間.つまり,2時間物は2時間コピーに必要)かかり,ダビング 中は予約録画が実行されません. また,PC とデータのやり取りをするために使用する DVD-R/RAM の 4.7GB という容量が 1つのネックになり,映画を綺麗に録画しようとしても,"SP"クオリティを常用する ことになってしまいます("XP"で録画し,メディアに書き出す際に編集して2つに分割& 2枚に分けて記録&PC側で再び結合…という手も使えますが,手間がかかります). これらを全てクリアするためには,ネットワーク経由で録画が可能であり,録画した ものを同じくネットワーク経由で吸い出せるような製品がベストだと思います.そう いった意味では,NEC製 AX300の ような製品が良いとは思うのですが,流石に10万を大きく超えるものはおいそれとは 購入できません. そのような経緯もあり,PC で TV録画を行うことにし,メインで利用しても 不満を感じないような『最強のテレビ録画サーバ』を目指すことにしました. |
||
■TV録画を快適に -BT878互換チップで録画の問題点- | ||
PC で録画を行うことにより,DiGA E80H に対して持っていた不満点は概ね解決
します.特に Linux で行い,不足部分を自分でプログラミングする方向で考えれば,
事実上自分のスキルとハードウエアのスペックが許す限り(それと懐具合も),
何でも出来るでしょう.このようなことを考え,改めて Linux での TV 録画環境を再構築
することにしました. 前回, BT878 互換チップ搭載カードで TV録画サーバを構築したわけですが,これで 不満に感じたのは以下の3点です.
BT878 互換チップ搭載カードを選択した時点で,これらの点は妥協すべき問題 かもしれません.また,一時期 mencorder を使用してノイズ除去フィルタをかけつつ高解像度での キャプチャを試みたのですが,(原因は特定できませんでしたが)音声と映像の同期ズレ の問題が発生し,安定して録画を行うことができませんでした(*). (*)CPUパワーには充分余裕があるが,fpsやキャプチャサイズなどのパラメータを調整 しても症状は改善しなかった Windows であれば,MPEG2 ハードウエアエンコーダ搭載のキャプチャカードが多数 存在し,これらを使用すれば上記のような問題は一通り解決可能です.しかし, Linux では,安定可動するハードウエアエンコーダを搭載したカードに関する情報が 殆ど無く,また,あっても日本国内では 入手困難なものばかりでした.しかし,今年(2003年)の下旬に,この状況は大きく変わりました. |
||
■Linux でMPEG2 ハードウエアエンコーダ搭載カードは使えるか? 〜プロローグ〜 | ||
MPEG2 ハードウエアエンコーダ搭載カードに使用されている『MPEG2エンコードチップ』
には,多くの種類が存在します.そしてそれらチップを何とか Linux で動かそうとする
プロジェクトも多数立ち上がっています.しかし,これらチップはメーカーのノウハウの
固まりであるため,NDA契約(所謂秘密保持契約)を結ばなければ技術情報を得ることが出来
ないものが殆どです.そのため,多くのプロジェクトの進捗は思わしくなく,また,自ずと
リバースエンジニアリングに頼ることになりますので,『特定のカードのみに対応した
ドライバ』となることが多いという状況でした. この『特定のカード』というのがクセ物であり,大抵日本国内では入手困難なものばかり です.そのため,『Linux ではソフトエンコードカードしかマトモに使えない』といった 雰囲気が色濃くあり,実際にその通りでした. しかし,2003年9月頃に,インターネットの巨大掲示板 :-) にて, 『玄人志向 ITVC15-STVPCI がこのドライバで動くらしい』 という話がありました(実際には映像のみ取り込めるという状態であった).しかし,このカード は既に旧製品となり,入手は困難になりつつありました.そして現行商品である 玄人志向 ITVC16-STVLP も動くのではなかろうかという予想が出始めます.実際に購入した人が試したところ, ちょっとしたパッチを当てることにより,見事に(TV の映像のみではありますが)利用可能で あることが確認されました.あとは音声入力のみです. そのやりとりをウォッチしていた私は早速ドライバをダウンロードし,ソースを眺めて みました.元々 Win PVR 専用に書かれたドライバであったため,音声周りは定番の MSP34XX というチップを利用すること前提で書かれています.このチップは音声入力として複数のアナログ入力 を接続することが可能であり,ソフト的な設定により,どの入力をデジタル化して出力するかを 切り替えます. そしてカードメーカーによりそのアサインはは異なるわけですが,ドライバのソースを眺めると, 『Tunerからの入力は1番』のように決め打ちでコーディングされていました. おそらくこの辺りをちょこっと直せば動くだろうという甘い見積もりをし,私もカードを通販でオーダー しました.しかしその後の掲示板でのやりとりで,カード上には MSP34XX と思わしきチップは 搭載されていないとの話が出ました.数日後に手元に届いたカードを見回してみると,確かに搭載 されていません.ここからカード&ドライバとの格闘が始まりました... |
||
■Linux でMPEG2 ハードウエアエンコーダ搭載カードは使えるか? 〜格闘編〜 | ||
まず行ったのは,テスター片手にカード上のパターンのトレースです. 主要なチップの 型番を控え,その機能を調べていった所,ADC(A/Dコンバータ),マルチプレクサ(複数入力 から任意の入力を選択&出力する)が確認できましたので,そこを中心に追っていきます.するとマルチ プレクサの制御信号は MPEG2 エンコードチップである CX23416 の下の方に入っていくのが 確認できました.どうも GPIO (汎用入出力ポート)の信号を使用し,音声入力を切り替え ているようです.Windows 上でその挙動を確認したところ,たしかにそう なっていました.
以下の改造は試行錯誤した際のものです.Linux で動作させる際にこれら改造は不要です後は CX23416 の GPIO をコントロールする方法が分かれば OK です.そこで日本で CX23416 を扱う代理店に資料請求をしたのですが,NDA 契約の壁が立ちふさがりました(ちなみに 代理店の方は非常に親切に対応して下さいました.ありがとう).Windows 用のドライバの 解析も進めていたのですが進捗は思わしくなく, こちらのページで解析されているドキュメント を精読することにしました.そしてあれこれ試してみたところ,とりあえずチューナーからの音声入力 ができるようになりました. その結果をレポートしたところ,時を同じくしてKomoriya氏が同カードの解析を 進めており,音声多重の動作&設定に関しても解析済みとのこと.早速私が作りかけていたソース とマージ&提供し,いくつかの問題を FIX して公開.その後 Komoriya氏がさらなる拡張と ivtv driver の CVS版への対応をして下さり, 高機能かつ安定して動くようになりました. |
||
■Linux でMPEG2 ハードウエアエンコーダ搭載カードは使えるか? 〜現状と今後の展開〜 | ||
現状はと言いますと,Komoriya氏が精力的に活動して下さり,ITVC15-STVPCI への対応と
IVTVドライバの本家へのマージが決まりました.
2003年12月現在,本家の安定版としてリリースされているものにはまだマージされていませんが,
近々公開されるようです.玄人志向の ITVC15-STVPCI,ITVC16-STVLP に対応した現在の最新版
ソースは,Komoriya氏
のページからダウンロード可能です. 本家のドライバは『Win PVR 専用』的にコーディングされていましたが,今回の玄人志向の カードに対応させる際に,かなりの部分を汎用的なコードに書き換えました.その関係で, MPEGエンコードチップとして CX23415/CX23416 が使用されているカードであれば,ドライバに 若干の修正を加えることにより動作すると思います.修正方法に関するガイドは こちらのページ(EUC テキスト) (Komoriya 氏のページに置いて頂いている物と同じです)を参照してください. |
||
■Linuxで 玄人志向 ITVC16-STVLP を使う | ||
■玄人志向 ITVC16-STVLP | ||
日本国内では玄人志向から販売されていますが,YUAN
製の MPG600 というカードです.私は 15千円程で購入しましたが,現在は1万円弱にまで
値下がりしているようです.
このカードの売りは,Low-Profile 対応で省スペースなこと.そして低消費電力な チップを搭載しているため,ファンレス動作が可能なことです.正に今回のような用途 には打って付けです. 比較的低価格で販売されており,入手性が良い点も Good です. |
||
■Linux,ドライバ のインストールと設定 | ||
Linux で本カードを利用するためには,ドライバをインストールすることの他に,
Kernel を V4l2 対応に構築し直す必要があります(必須ではないとドキュメントには書かれ
ていますが,お勧めできません).詳しい手順に関しては,
こちらのページ(EUC テキスト)
(Komoriya 氏のページに置いて頂いている物と同じです)を参照してください. # ちょっと手抜きしています :-) |
||
■ITVC16-STVLP で TV録画 | ||
ドライバに同梱されている test_ioctl や ptune を使用してカードの
各種設定(チャンネルやビットレート設定など)を行った後,/dev/video0
をリダイレクトすることにより,MPEG ストリームをそのままファイルに落とすことができます.
厳密な設定を行いたい場合は,
これらプログラムのソースを参考にして,自前のプログラムないしはスクリプトを組むと
良いでしょう. もっと手軽に録画を行いたい場合は,同じくドライバに同梱されている perl スクリプト である record-v4l2.pl を使うと良いでしょう.様々なオプションが設定可能 であり,大抵のことはこれ1つで事足りるでしょう.なお,利用時にはいくつかの perl module をインストールする必要があります.詳しくは こちらを参照して下さい. 一般的な使い方としては,/usr/local/bin 等のパスが通った所に record-v4l2.pl をコピーし,"record-v4l2.pl --channel <チャンネル> -t <録画時間[sec]> --freqtable ntsc-bcast-jp" のように実行します.するとカレントディレクトリに"Tuner_0-<チャンネル>-<日付>-<時間>" というディレクトリが作成され,その下に video.mpg という MPEG2 形式のファイルが 出来ます. その他のパラメータの詳細に関しては,オプション無しで record-v4l2.pl を実行し, 表示される usage を読んでみて下さい. |
||
■予約録画 | ||
前述のようにコマンドを叩けば録画が出来るわけですが,次に行うべきことは
予約録画です. Linux で設定した時刻に任意のコマンドを実行するためには,一般に at または cron を利用します.前者は任意の時刻に1回だけ設定したコマンドを実行するものですが,後者は, ある特定のパターン(例えば「毎週土曜の 22:00」 等)の時刻に繰り返しコマンドを実行する ことができます. 柔軟なTV録画システムを構築するとしたら, cron を利用して, こちらのページで解説したように何らかのプログラムを 起動するようにした方が良いでしょう.この場合,起動したプログラムが録画キューを確認& 指定時刻であれば録画開始…のような動作を行うようにします. そしてこのキューを Web インターフェイスを介してコントロール 出来るようなものを開発すれば,録画システムとして最強でしょう. しかし,今回はまだそこまで手が回っていませんので :-),手軽に予約録画を行う方法を 解説することにします.なお,以下のスクリプトはあくまでもサンプルですので,そのままでも 動作は致しますが,用途に合わせて record-v4l2 のオプションを追加 するようにした方が良いでしょう.特にビットレートは,デフォルトで高めになってますので, 利用可能なディスクの空き容量に対して注意が必要です. まず,以下のようなシェルスクリプトを,パスの通った所に rec_tv.sh という名前で保存 します.実行フラグを立てておくのを忘れないで下さい(chmod +x rec_tv.sh).
このスクリプトでは,チャンネルとTVの周波数テーブル,保存先以外は record-v4l2.pl のデフォルト 値を使用するようにしています.そして rec_tv.sh 実行時に渡された1つ目のパラメータを 録画するチャンネル,2つ目を録画時間(単位は秒)として実行するようにしています.なお, 録画ファイルは /tv_mpeg ディレクトリ以下に書き込むように設定していますので,最低限 この部分だけは各自の環境に合わせて修正してください.
※record-v4l2.pl が /usr/local/bin 以外にある場合はこのパスも書き換えて下さい.
※12ch を超えるチャンネルは CATV 用です.なお,CATV チューナーが表示するチャンネルは,
実際に規定されている周波数テーブルのチャンネルと異なる場合がありますので注意して下さい
次に, at コマンドを利用して録画ジョブを at キューに積むスクリプトを記述します.以下の内容 を, "ivtv_rec.sh" としてパスの通った所にで保存して下さい.こちらも同じく実行フラグ を立てるのを忘れないで下さい.
※tv_rec.sh が /usr/local/bin に置かれていると仮定しています.異なる場合は
パスを書き換えて下さい
なお,本スクリプトを利用する場合, atd が動作していることが必須条件です. atd が動作しているかは "ps aux | grep atd" して確認可能です.atd が自動起動 しないように設定されている場合は,ntsysv コマンド等で自動起動するように設定しておいて下さい. 次に現在予約しているキューの確認やキャンセル方法ですが,基本的に at 系のコマンド で行います.キューの一覧表示は atq コマンドで行い,削除は atrm コマンドで行います. 詳しくは man ファイルを参照してください. |
||
■TIPS | ||
ここでは,私が TV 録画を行った際に抱えた3つの問題,そしてTIPSに関して解説します.
■パーミッション問題 この問題を解決するために,私は/etc/security/console.permsを編集して対応しました. このファイル中に
と,いうエントリーが並んでいますので,
上記のように変更します.このように修正することにより,常に /dev/video*, /dev/radio* 等の 一連の v4l 用のデバイスファイルは誰からでも利用できるようになります.ただし,セキュリティ 的にはやや問題がある設定ですので,別の方法が採れる場合はそちらを使用するようにして下さい.
■発熱問題 CX23416 は低発熱であり,ITVC16-STVLP はファンレスで動くと書きましたが,それでもかなり 発熱します.そのため,充分にケース内が冷却されていない場合は問題が起きます.症状としては, 録画中や録画後,不意に OS ごとハングアップするという現象として表れます.対策は充分に冷却することです. 一時この症状が頻発しましたが,ケースファンの回転数を上げ気味にしたところ収まりました. しかし,夏場の利用が心配ですので,MPEGエンコードチップに『チップ冷却用ヒートシンク』を貼り付け ようと考えています. ■録画開始時間のズレ record-v4l2.pl は,録画開始時(tunerの周波数セット時)に,1,2秒 sleep します.内蔵クロックを NTP 等を使用して完璧に近く合わせていたとしても,録画開始時の最初の2秒くらいが切れてしまいます. これが嫌な場合は,対処療法ではありますが,1分前から録画開始すると良いでしょう. ■MPEG2 ファイルのサムネイル画像を作成する Web インターフェイスを用いた録画システムを作成する場合,録画した動画のサムネイル画像が 表示されると便利でしょう.MPlayer を使用すると,任意の場所の1フレームを JPEG 形式等に保存することが出来ます.例えば aaa.mpg ファイルの先頭から 10秒目の1フレームを JPEG 形式で保存する場合,"mplayer -vo jpeg -ao null -ss 10 -frames 1 aaa.mpg"のように 実行します.カレントディレクトリに 00000001.jpg という名前でファイルが出来ているはずです. ※私の MPlayer のインストール方法が悪いためか,上記の方法ではシークが利かず,動画ファイルの 先頭のフレームがファイルに落とされました.フレーム数を "2" として実行した所,00000001.jpg に先頭のフレーム, 00000002.jpg に指定した位置の1フレーム画像が保存されることが確認できましたので,少々気持ち 悪くはありますが,2つめの画像ファイルを使う…と,いうことでお茶を濁しています.bug? |
||
■まとめと今後の課題 | ||
ITVC16-STVLP が利用可能になってからというもの,DiGA は要らない…とまでは行きませんが,
『綺麗に残したい物は ITVC16-STVLP で撮る』ようになりました.ディスクは空いているだけ
フルに使えますので,DiGA 利用時には常に(DVD-R/RAM の容量の関係で)ビットレートを絞って
録画していましたが,高ビットレートで綺麗な状態で録画出来るようになりました.また,
ITVC16-STVLPは 1万円弱の廉価なキャプチャカードではありますが,画質はまずまずで,特に
低ビットレートで記録した場合でもそれほど破綻を来しません.また,BT878系チップで頻発
していた白飛び問題も発生せず,とても満足しています. 総合的に考えて,VTR の置き換えとしては全く無問題です.値段から考えても,絶大な コストパフォーマンスを発揮しています.常用するようになって困った問題としては, 『気になる番組は録画キューに入れる』ようになり,急速にディスクの空き容量が 減っていくことでしょうか… 次に今後の課題としては,以下のようなことを考えています.
CX23416GYC-STVLP は ITVC16-STVLP にノイズ除去チップを搭載し,最強と言っても過言ではない
キャプチャカードです. ただ,私の方はこのところ本業に忙殺される毎日でして, Komoriya氏にとっても期待している今日この頃です (^^).あと,このカードで使用されている NEC製 の Y/C 分離チップで ある uPD64083 のデータシートがどうしても入手できず,難渋しています(ELISNETには uPD64082 のデータシートしかありません.また,メーカーからは門前払い状態でした).これがドライバ 開発の進捗を遅らせている1つの原因になっていますので,もし提供して頂ける方がおられましたら, ご連絡頂けると助かります. 年内に間に合わせようと急いで書いたため,多少乱筆気味&校正不足ですみません...
['04/01/04]追記 |
||
■['03/12/25]追記:その他の情報 | ||
少々書き忘れたことがありましたので,メモ書きに近い体裁ですが,補足しておきます.
Komoriya氏のページのドライバに関する 情報がアップデートされました.最新の動向などはそちらを参照してください.
日本人が中心になって行っているivtvドライバの拡張ですが,新たに いくつかの最新のカードに対応しました.対応したカードは, 長瀬 TRANSGEAR 5000TV, I/O Data GV-MVP/RX, 玄人志向 CX23416GYC-STVLP (YUAN MPG600GR のOEM)>の3種類です.また, AOpen VA2000MAX-SNT6も 現在Tuner入力のみ対応していますが,画質のチューニングは未了です(白飛びが激しい). 最新ドライバの入手や情報に関しては,ぱ研の CX23416GYC-STVLPの解析ページを参照して下さい.なお, 各入力(Tuner,S-Video,Composite)の番号が玄人志向 ITVC16-STVLPとは 変更になっていますので,スクリプトを使い回す際にはご注意を.これらカードでの使い 方や,如何に解析行って新規カードに対応させるかに関して,時間があるときでも別ページに まとめたいと考えています.
|