最優秀Linux TVプログラムは…tvtime

PCでTVを観るために、XAWTV、XineなどのLinuxアプリケーションを使ってきたのは私だけではないだろう。多少の小細工はいるが、少なくともTV番組をデスクトップで観ることはできる。

さて、ここで朗報だ。新しいTVプレーヤーがデビューした。名前は tvtime。これはすばらしい製品だ。インストールは簡単、使い方も簡単、私の旧型Hauppauge WinTVカードできびきびと動く。おまけの機能があり、コンソール型ゲーム機をTVカードに接続してGT3をプレイできる。この記事は、tvtimeのレビューと作者Billy Biggsからのコメントおよびプロフィールである。

当たり前だが、tvtimeをダウンロードする前に、必要なハードウェアを装着し、システムを設定した。使用したのは、Ximian Desktop 2をインストールしたRed Hat 9が稼動する1 GHz Athlonマシン。SDRAMを512 MB積んでいる。TVカードは旧型のHauppage WinTVで、必要なbttvドライバがkudzu(必要に応じて設定の追加/取り外しを行うためにハードウェアを監視するRed Hatプログラム)によって認識される。サウンドを再生するために、カードのラインアウトとSoundBlaster Liveのラインインをオーディオケーブルで接続した。

tvtimeホームページのダウンロードページは、わかりやすく構成されている。Red Hat、Debian、Gentoo、SuSE、Mandrakeのユーザは、ディストリビューション固有のパッケージをこのページからダウンロードできる。ほかのディストリビューションを使用している場合は、ソースコードをダウンロードして自分でビルドできる。

それはそうと、Billy Biggsとその友人Doug Bell(tvtimeの共同開発者)は、tvtimeのパッケージ化から学んだ教訓に関する記事をFreshMeat.netに発表している。Linux開発者には読む価値があると思われる。

すべてのディストリビューション・パッケージに当てはまるとは思えないが、Red Hat rpmはtvtimeをsuidとしてインストールする。Biggsは、tvtimeのようなビデオ処理アプリケーションがルート権限を必要とする理由を説明してくれた。基本的な理由は2つで、rtcとSCHED_FIFOにアクセスする必要があるからだ。

Biggsはこう説明する。「RTCデバイスはリアルタイムクロックです。これを使って、64分の1秒から最大8192分の1秒の精度でアプリケーションに割り込みをかけることができます。このデバイスには制限が多いのです。利用できるのは一度に1つのアプリケーションだけですし、ルート権限を持つか、/procを使うように設定しない限り、精度64分の1秒でしか割り込みをかけられません」

説明はまだ続く。「tvtimeでは、CPUのほぼすべての能力を引き出し、1フレームも落とさないようにするために、SCHED_FIFOを実行します。この方法だと、ほかのプロセスが何かをしようとしても、tvtimeを止められません」

本当に重要なのはパフォーマンスだ。Biggsは、「私のようにNTSCコンテンツを視聴するユーザの場合、tvtimeは16.6ミリ秒ごとに目覚めて次のフレームを描画する必要があります。デインターレーシングに8ミリ秒かかり、フレームをビデオメモリに描画するのに約4ミリ秒かかります。つまり、17ミリ秒のうち12ミリ秒がtvtimeによって使用されます。ですから、ほかのプロセスが実行されている場合に処理をスムーズに行うには、reniceするよりも強力な優先度システムが必要となります」と語っている。

しかし、suidプログラムにセキュリティのリスクはないだろうか。Biggsはこの質問にはこう答えている。「セキュリティリスクですか? ほかの問題と同様に、最小限に減らすように努力しています。ルート権限は起動時に落とし、「正しいこと」をします。setuid実行ファイルがあるのは、誰かがシステムに侵入にした場合にルートアクセスが奪取されかねないことを意味します。神経過敏になるほどではありませんが、ルートアクセスがなくてもマルチメディア・アプリケーションがまともに動作すると考えるのは甘すぎます」

正当な必要性があること、そしてセキュリティに関しても考慮されていることが納得できたので、tvtimeをsuidのままで使うことにした。

tvtimeを初めて起動すると、設定画面が表示される。この画面で、Station管理、Input設定、Picture設定、Video処理、Output設定などを扱うことができる。私の場合、設定する必要があるのはこのうち2つだけだった。

まずInput設定を行った。TVカードは外部アンテナからTV信号を受信するので、ビデオソースとして[Television]を選択した(ほかに[Composite1]、[Composite3]、[S-Video]を選択できる)。さらに、TV標準として[NTSC]を選択した(ヨーロッパや世界各地の標準放送方式も選択できる)。

次に、Station管理に進んで、周波数表として[Cable]ではなく[Broadcast]を選択してから、チャンネルの走査を実行した。これで、使用可能なチャンネルのリストが作成される。この処理には約1分を要した。完了すると、リストの先頭のチャンネルが表示される。走査の結果は、ホームディレクトリに作られる.tvtimeディレクトリにxmlファイルとして保存される。

どういった調整機能があるのかを調べるため、この設定画面をもう一度表示してみた。機能はごく少ない。オーディオモードをモノラル、ステレオ、SAPに切り替えできる。また、特定のチャンネルを微調整して受信状態を改善できる。調整結果はチャンネルリストに保存されるので、何度も設定する必要はない。また、画像のシャープネスを低、中、標準、高(360〜768ピクセルに相当する)のいずれかに指定できる。

また、輝度、コントラスト、カラー、色相を変更して画像を調整することもできる。Video処理の先頭部分に、[Deinterlacer configuration]というカテゴリがある。設定の作用がよくわからないので、デフォルトの[Television: full resolution]を変えなかった。

フレームレートも選択できる。59.94フレーム/秒の高いレートを試すことも、その数値の半分のままにしておいて、上位フィールドまたは下位フィールドのどちらかをデインターレースすることもできる。「上位フィールドまたは下位フィールドのどちらかをデインターレースする」の正確な意味はわからないが、自分ほど知識のない相手を感心させるにはうまい言い回しだ。

また、5種類の入力フィルタを試すことができる。出力設定も16:9フレームなどの多数の選択肢から選べる。最後に[Setup]メニューの[Output configuration]をクリックすることを忘れないように。これを忘れると、変更した内容が保存されない。

tvtimeで一番気に入った点は、使いやすさだ。直感的とは言えないまでも、使い方の習得と実際の使用が非常に簡単だとは言える。たとえば、ボリュームの調節には+キーと-キーを使う。ミュート(消音)にはmキーを使い、キャプションの表示/非表示にはcキーを使う。方向キーでチャンネルを切り替え、fキーを押してフルスクリーンモードとウィンドウモードを切り替える。

もう1つ気に入っているのは、画質のよさだ。米Time Warner社のケーブルから35インチのRCA入力に接続した画像より、Austinのローカル局からPCに受信した画像の方が鮮明に見える。もちろん、ケーブルからWinTVカードのアンテナ入力に接続することも簡単にできる。tvtimeでこの変更を行うには、周波数表(Configメニューの[Station Management]にある)の選択を[Broadcast]から[Cable]に変更し、チャンネルを再走査してローカルディレクトリを書き換える。それ以上の作業はまったく必要ない。

tvtimeには、ビデオストリームを録画する機能が(まだ)サポートされていない。しかし、開発を手伝う志願者をWebサイトで募っているので、この記事を目にした誰かが名乗り出て協力してくれることを期待する。あれば非常に便利だからだ。ところで、tvtimeがまだ1.0リリースではないことに触れてなかったようだ。今回使ったのは、バージョン0.9.10-1である。

このレビューを書き始めてから、何度もBilly Biggsとメールをやり取りした。1.0リリースがいつになるのかという質問に、彼はこう答えた。「今夏に1.0を出したいのですが、今はヨーロッパ向け設定の問題を解決できるまで待っています。北米のTVはヨーロッパのTVとは動作が違います。私の家では、CNNはチャンネル18です。これはケーブルTV会社がそう割り当てたものであって、常にこのチャンネルで映ります。ヨーロッパでは、TVが信号を走査し、受信可能なチャンネルが見つかるとそれに番号を割り当てます。つまり、CNNが15番目に見つかった受信可能なチャンネルだとしたら、番号15が与えられるわけです。放送局リストは、OSD(オンスクリーンディスプレイ)を使って編集できるでしょう」

このリリースでは、前のバージョンにあったLIRC(赤外線)サポートがなくなり、代わりにtvtime-commandプログラムが追加された。このプログラムを使うと、実行中のtvtimeをコマンドラインから制御できる。また、tvtimeウィンドウのスクリーンショットを撮ることもできる。GIMPやimportでスクリーンショットを撮ってもブルースクリーンにしかならないので、この機能は便利だ。tvtime WebサイトのFAQにも書いてあるが、tvtimeは、XVIDEO Xエクステンションを使って、ビデオをビデオオーバーレイ領域(フレームバッファの外部にあるメモリ)に出力する。したがって、スクリーンショットを撮るアプリケーション(ksnapshot、GIMP、xwdなど)は、カラーキーウィンドウを写し取れるだけで、tvtimeの出力は写し取れない。

SCREENSHOTコマンドを実行してからGIMPで画像を表示してみたところ、画像の解像度が「範囲外」であるという意味の警告が表示された。この件についてBiggsに問い合わせると、推測に基づいて正方形にされたピクセルを含む詳細な技術的解説が返ってきた。私の理解できる言葉による説明もあった。「GIMPのエラーメッセージは無害だと思います。GIMPのバグではないでしょうか。あら探し屋ではないので、まだバグレポートは送ってません」

Joe Barrは、優れたLinux TVアプリケーションと評価し、
栄えあるJoey Awardを授与した(下)
     

And the winner is: tvtimeまた、Biggsは、tvtimeのWebサイトで使われているような、より正確なスクリーンショットを作成する方法も教えてくれた。tvtimeで標準の解像度を使っていると仮定すると、画像をGIMPにロードし、解像度を640 x 480に設定し、中心の608×456ピクセルをトリミングし、縦軸と横軸の起点をそれぞれ16と12に設定してから画像を保存すればよい。

メールをやり取りするうちに、tvtimeプロジェクトの歴史と作者のことが、少し詳しくわかってきた。Biggsは、現在「カナダのNova Scotia州HalifaxのDalhousie大学で修士課程にある」そうだ。携わったほかのオープンソースプロジェクトとして、kphone(初のLinux対応オープンソースSIPベースIPフォン)、 movietime(誰も知らないDVD再生アプリケーション)、 ttrk(MIDIシーケンサ)などがある。

Biggsは、2001年にtvtimeプロジェクトに着手した。彼によると、しばらくは学内に協力者はいなかったが、その夏「友人のDoug Bellは、フル59.94 fpsフレームレートをサポートしたLinux TVアプリケーションがなく、Dreamcastゲームをキャプチャカードでうまくプレイできないことにいらだっていました。tvtimeを使ったらうまくいったので、彼はtvtimeを本格的なTVアプリケーションに変えようとしました。10月には、この新しいtvtimeの最初のリリースが完成しました」

tvtimeは優秀なアプリケーションだ。プロフェッショナルな外観、見事なパフォーマンス。それだけでなく、tvtimeのソースコードは、ほかのオープンソースプロジェクト、たとえばxine、freevo、xine, freevoにも取り入れられている。irc.freenode.netには#lividというtvtimeサポート/開発チャンネルがあり、ここにはBiggs(ニックネーム:vektor)がよく現れる。Biggsら開発者は、tvtimeの外観、パフォーマンス、使いやすさに多大な注意を払っているようだ。明らかにそうとわかる。

訂正:Billy Biggsから、記事に若干の誤りがあると指摘された。デインターレーサーのデフォルトは[Television: Full Resolution]ではなく[Motion adaptive: advanced]だ。同じく、LIRCサポートは新しいリリースでもなくなってはいない。変更されたのは、LIRCとtvtimeが通信する方法である。これについては、tvtime Webサイトに説明のページがある。

Joe Barr――IT分野のライターとして10年(Linuxについては5年)の経験を持つ。IBM Personal Systems Journal、LinuxGazette、LinuxWorld、Newsforge、phrack、SecurityFocus、VARLinux.orgなどに掲載記事多数。Linux Liberation Armyの公式ニューズレター、The Dweebspeak Primerの生みの親でもあり、同組織では終身伍長の名誉職にある。