Date

DirectShow入門…の前に

DirectShow は Windows 上で、動画・音声の再生、ファイルへのキャプチャ(録画)を行うアーキテクチャである。モバイル、組み込み向け OS である Windows CE、 Windows Mobile でも使われる。

DirectShowを勉強する前に、ある動画ファイルを再生する処理プロセスをみてみよう。このファイルは、音声と映像がそれぞれ圧縮されて1つのファイルで構成されているものとする。

  1. ファイルを読み込む。
  2. 読み取ったデータは動画と音声がインターリーブされている(Interleaved)ので分離して取り出す。
  3. 映像と音声を伸長(圧縮解除)する。
  4. レンダリングする。映像は画面に表示され、音声はサウンドデバイスで再生される。

これらが再生時間に合わせて少しずつ処理されていく。つまりファイルをすべて読む、読み取ったすべてのデータを分離、伸長とはならない。現在の再生位置をもとに必要に応じて少しずつ読みすすめられる。読み取った分だけ分離、伸長処理される。メディアプレイヤーでファイルを再生するとすぐに始まるのは、この仕組みによる。

フィルタ、フィルタグラフ

図1で示したように、一言で「動画を再生する」といっても実際にはいくつかの処理に分けられる。DirectShow では各処理をフィルタと呼ばれるモジュールで行う。フィルタは入力されたデータをもとに何らかの処理を行い、接続先のフィルタにその結果を出力する。フィルタはお互いに「接続する」ことができる。図1の四角で表したものがフィルタ、矢印が接続を表したものだと思っていただきたい。フィルタと、それらの接続全体を表したものをフィルタグラフと呼ぶ。

ピン

フィルタとフィルタを接続する端点をピンと呼ぶ。接続元となるピンを出力ピン、接続先を入力ピンと呼ぶ。他のフィルタと接続するには出力ピンから入力ピンに方向に接続する。接続するとピンの間にストリームができ、データを別のフィルタに転送できる。

フィルタの種類

フィルタは役割に応じて便宜上以下のように分類される。

ソースフィルタ

ソースフィルタはストレージからファイルを読み込む、またはネットワークからダウンロードする。キャプチャデバイスから映像、音声データを取得するタイプもある。取得したデータはダウンストリーム(下流)フィルタへ送る。入力するデータが無いので上流フィルタは無い。

ソースフィルタにはプッシュ方式とプル方式の 2 種類がある。プッシュ方式はフィルタ自体がデータを生成しダウンストリームフィルタへ送り出すフィルタである。プル方式は、ダウンストリームフィルタがデータを要求した時点でデータを渡すフィルタである。

スプリッタフィルタ、パーサーフィルタ、Demux フィルタ

アップストリームフィルタから受け取ったデータから映像と音声を分離してダウンストリームフィルタへ渡すフィルタをスプリッタフィルタと呼ぶ。パーサーと呼ぶこともある。MPEG-1 形式で記録されたバイナリデータを音声・映像に分離する MPEG-I Stream Splitter などが該当する。ソースフィルタにこの機能が内蔵されていることもある。

トランスフォーム(変換)フィルタ

アップストリームフィルタから受け取ったデータに対し何らかの加工をし、ダウンストリームフィルタへ送り出す機能を持つフィルタである。MPEG-1 の画像を伸長する MPEG Video Decoder 等が該当する。

Mux フィルタ

スプリッタとは反対に、アップストリームフィルタから受け取った複数のストリームを 1 本のストリームにまとめるフィルタである。AVI Mux 等が該当する。Mux;Multiplex.

レンダリングフィルタ

レンダリングフィルタは、アップストリームフィルタから受け取ったデータを画面に表示したり、ファイルに書き出したりするフィルタである。従って下流のフィルタは無い。Video Renderer 等が該当する。

フィルタの実装の詳細については当ブログの他の記事で記述する。

更新履歴

2011/2/26 - 記事構成を見直した。図を追加した。


Comments

comments powered by Disqus