2001年12月号掲載
第5回 PC上でMPEG-2を再生するソフトウェアの仕組みを知る
CPUの処理能力が向上するに従い、PCでMPEG-2をソフトウェア再生する環境が一般的になってきている。ソフトウェアDVDプレーヤーもMPEG-2再生環境の1つ。今回は、Windowsマシン上でのMPEG-2ソフトウェア再生環境の仕組みについて解説する。

■ソフトウェアによるDVD-Video再生の仕組み
代表的なMPEG-2再生環境は、ソフトウェアDVDプレーヤーだろう。多くのコンシューマーPCにバンドルされているし、単体ソフトとしても各種販売されている。Windowsで動作するソフトウェアDVDプレーヤーのほとんどは、DirectShowという仕掛け(アーキテクチャ)を使っている。DirectShowを使うとビデオやオーディオを再生するためのソフトウェア部品(フィルタと呼ぶ)を組み合わせることができる。DirectShowについては、右ページのコラムで解説する。
ソフトウェアDVDプレーヤーは、Microsoft製のフィルタと、DVDプレーヤーを開発したサードパーティー製のフィルタを組み合わせ、その上に各社がGUI(ユーザインタフェース:ウィンドウやボタン制御)を作り込んで実現されている(図1)。製品ごとに多少の違いはあるが、一般的には以下のようなフィルタの組み合わせとなる。
- DVD-Video読み込み解釈
DVDディスクから読み込んだファイルの内容を解釈し、以下の各デコーダに分離したデータを渡す。また、DVD-Videoのナビゲーションコマンド(リモコンのボタンに相当)を実行する。 - サブピクチャーデコーダ
メニューのハイライトや字幕に使われるサブピクチャーデコーダをデコードする。MPEG-2ビデオデコーダと一体化されることもある。 - MPEG-2ビデオデコーダ
MPEG-2ビデオ圧縮データをデコードし、非圧縮ビデオデータにする。 - Dolby DigitalオーディオデコーダDolby Digitalオーディオ圧縮データをデコードし、非圧縮オーディオデータ(PCMデータ)にする。
- ビデオ%サブピクチャー表示
デコードされた非圧縮ビデオデータ画面に表示(描画)する。 - オーディオ出力
デコードされた非圧縮オーディオデータをサウンドデバイスに送り込む。
これらのフィルタのうち、「2.サブピクチャーデコーダ""3.MPEG-2ビデオデコーダ""4.Dolby Digitalオーディオデコーダ"はDVDプレーヤーを開発する会社が用意する。会社によっては「1.DVD-Video読み込み解釈」も自社開発している。また、画面表示(描画)のパフォーマンス向上のため、「5.ビデオ%サブピクチャー表示」はそのまま使わない場合もある。
このようにフィルタの組み合わせといったソフトウェア部品の仕組みを使うことは、一般に開発期間の短縮やコストダウン、信頼性向上などのメリットがある。

■Windows Media Playerどうやって再生している?
それでは、Windows Media Playerはどのような仕組みでうごいているのだろうか。Windows Media PlayerもDirectShowを使っている。Windows Media PlayerでMPEG-2ファイルを再生する場合に使われるフィルタは以下のようなものだ。
- ファイル読み込み
- MPEG-2AV分離
ビデオ%オーディオが同期多重化されて1ファイルとなっているのを分離して、各デコーダに引き渡す。 - MPEG-2ビデオデコーダ
- MPEGオーディオデコーダ
- ビデオ表示
- オーディオ出力
これらのうち、「3.MPEG-2ビデオデコーダ」以外のフィルタは、MicrosoftがDirectShowの標準機能として提供している。また、「5.ビデオ表示」「6.オーディオ出力」はDVDプレーヤーと同じフィルタを使う。
つまり、DVDプレーヤーの"3.MPEG-2ビデオデコーダ」があれば、Windows Media PlayerでMPEG-2再生ができる。なお、このような場合でも、Windows Media PlayerですべてのMPEG-2ファイルが再生できるわけではない。DVDプレーヤーの「MPEG-2ビデオデコーダ」は、DVD-Video規格が使っていないMPEG-2規格には対応していなかったり、「MPEG-2 AV分離」もすべての場合に対応しているわけではないからだ。Windows Media Playerが、再生時にどんなフィルタを使っているかは、プロパティダイアログで知ることができる。

■再生パフォーマンスを上げるための仕組み
MPEG-2やDVD-Videoのソフトウェア再生は、かなりCPU負荷の高い仕事となる。このため、ソフトウェア再生時のCPU負荷を減らすために、いろいろな工夫がされている。その中の1つに「ビデオオーバーレイ描画」がある。ビデオオーバーレイは、VGAチップが持っている機能で、ビデオ再生時に高速描画できるものだ。VGAチップによる違いはDirectDrawで統一されている。DirectDraw経由で使えるビデオオーバーレイ機能は次のようなものだ。
- YUV描画
MPEGでは圧縮効率を良くするため、RGBではなくYUVとい色空間を使っている。一方PCの画面はRGB表現。このため、再生時にYUV→RGB変換が必要となる。YUV→RGB変換は負荷のかかる仕事なので、これをVGAチップ側に任せることでCPUに負荷をかけないようにしている。 - ビデオメモリー直接書き込み
Windowsでは、一般にビデオボードのメモリーにアプリケーションソフトが直接アクセスできない。ビデオオーバーレイ機能では、ビデオメモリーへ直接高速に書き込むことができる。 - ビデオの拡大縮小
表示サイズ変更のための拡大%縮小も負荷のかかる仕事。これもVGAチップ内でハードウェア的に実現し、CPUに負荷をかけない。
ビデオオーバーレイ機能が使えない場合、DirectShowは他の手段を使って描画するが、これにはかなり負荷がかかり、コマ落ちの原因となる。再生時にビデオオーバーレイ機能を使っているかどうかを見分けるのは、VGAごとに異なるため簡単ではない。ビデオオーバーレー使用時は、マウスカーソルが見えなくなったり、マウスカーソルの影が太くなる傾向があるのでそれを目安にするしかない。
ビデオオーバレイを実現するためには、ビデオボード上に画面用のメモリーとは別にメモリー領域が必要となる。このため、ノートPCなど実装メモリーが少ない場合は、画面の表示色数を1600万色から6万5000色に減色する必要がある。

【コラム】DirectShowとは何か?
DirectShowは、Windows上でビデオやオーディオを扱うためのソフトウェア%アーキテクチャだ。1996年にMicrosoftが発表したActiveMovieが元になっている。フィルタと呼ばれるソフトウェア部品の組み合わせでいろいろな機能を実現することができる。一般的にはMicrosoftが用意している各種フィルタと、各社が開発した独自のフィルタを組み合わせて使う。
元々ActiveMovieとして発表されたが、その後バージョンアップされるにつれ、DirectShow単体、DirectX Mediaの1機能というように、提供形態が変化している。DirectX8からは、DirectXの1機能として提供されるようになっている。
最近のバージョンでは、ビデオキャプチャーや編集などのための機能も充実してきた。オーディオのみでDirectShowを使うことも増えてきており、最近のサウンド編集ソフトがサポートしているフィルタプラグインは、DirectShowのフィルタ機能を利用したものだ。
なお、MPEG-1ビデオデコーダは、標準のフィルタの1つとしてDirectShowに付属している。特別なことをしなくてもWindowsでMPEG-1が再生できるのはこのためだ。Windows XPでもMPEG-2ビデオデコーダは付属しない。

(文/ 竹松 昇、(株)朋栄アイ・ビー・イー) ※編集の関係上、雑誌掲載内容と少し異なる個所があります。
