DirectShow(ダイレクトショー)とは
DirectShowは、
マイクロソフトが開発したマルチメディアフレームワークとAPIであり、様々なメディアファイルやストリームの操作を可能にする技術です。Video for Windowsの後継として位置づけられ、コードネーム「Quartz」として開発されました。COMベースのアーキテクチャを採用し、複数のプログラミング言語から利用可能な共通インターフェースを提供しています。その高い拡張性により、ユーザーや開発者のニーズに応じたメディア再生、録画、編集などの操作をフィルターベースで実現できます。
歴史
DirectShowは、ActiveMovie(コードネーム「Quartz」)が前身です。当初は、WindowsでMPEG-1ファイルの再生を可能にするために開発されました。その後、Video for WindowsやMedia Control Interface (MCI) の後継として、より高度なマルチメディアフレームワークへと拡張されました。ActiveMovieは1996年に発表され、Internet Explorer 3.0のベータ版で初公開されました。1997年にはDirectX 5の一部となり、DirectShowという名称になりました。Windows 98以降のすべてのWindowsに標準搭載されるようになり、DirectX 8.0からは他のDirectX APIと同様に重要なコンポーネントとして扱われています。2004年にはDirectX SDKから外れ、Windows SDK(旧Platform SDK)に移管されました。
アーキテクチャ
DirectShowは、大きなマルチメディアタスクを、フィルターの連なりとして扱います。各フィルターはデータ処理の一段階を表し、ピンと呼ばれる入出力接点を介して他のフィルターと接続します。このフィルターの連なりをフィルターグラフと呼びます。DirectShowを使用するプログラムでは、必要なフィルターのインスタンスを作成し、接続することでフィルターグラフを構築します。
フィルターの種類
- - ソースフィルター: ファイルからの読み込みなど、データストリームを提供します。
- - 変換フィルター: 他のフィルターの出力を受け取り、データ変換を行います。例えば、非圧縮ビデオにテキストを追加するなどが該当します。
- - レンダーフィルター: 音声の出力や画面への描画など、最終的なレンダリングを行います。
フィルターグラフを視覚的に構築・試行できるツールとして「GraphEdit」があります。GraphEditを利用することで、
レジストリに登録されたフィルターを接続し、再生、録画、編集などの操作を試すことが可能です。DirectShowは、ファイルパース、音声と映像の分離、圧縮解除、レンダリングなど、多岐にわたるメディア処理に活用されています。さらに、
DVD操作のようなインタラクティブな機能も提供します。
フィルターの多くは、DirectShow基底クラス(DirectShow SDKに収録された
C++クラス)を利用して作成されます。これにより、フィルターの作成や登録が容易になります。また、必要に応じてフィルターの自動登録を回避することも可能です。
DirectShow 8.0では、動的なフィルターグラフの作成・再接続機能が導入されましたが、この機能は必ずしも広く利用されているとは言えません。
特徴
DirectShowは、標準では一般的なメディア形式(MPEG-1,
MP3, AVI, ASFなど)のフィルターのみが導入されています。現代的なコーデック(
MPEG-4,
H.264,
AACなど)やコンテナ形式(
Ogg, MP4, MOVなど)は含まれていません。これらを使用するには、別途コーデックを入手する必要があります。しかし、DirectShowは拡張性が高く、市販品やオープンソースのフィルターを利用することで、様々なメディア形式に対応可能です。また、他のマルチメディアAPIの機能を提供するブリッジフィルターも存在します。
フィルターグラフの構築方法は様々です。DirectShowに自動構築させる方法のほか、ソースフィルターやカスタムフィルターを手動で追加する方法もあります。再生時にはバックグラウンドスレッドで処理を行うため、QuickTimeのようにプログラマーが特別な処理を記述する必要はありません。さらに、URLとローカルファイルの読み込み手順に差異がないという点も特徴として挙げられます。
DirectShow編集サービス(DES)
DirectShow編集サービスは、DirectShowのアーキテクチャを基盤とした、映像編集のためのAPIです。タイムライン、トラック、エフェクト、トランジション、
キーイングなど、
ノンリニア編集に必要な多くの機能を搭載しています。高水準の実行時合成やシーク機能も提供されており、低水準のDirectShow機能と組み合わせて利用可能です。DESはVisual
C++向けのインターフェースが提供されていますが、サードパーティ製の
ライブラリを利用することで、C#やVB.NETなどの.NET言語からも利用可能です。
ビデオレンダラーフィルター
DirectShowで映像を再生する初期の手段として、ビデオレンダラーフィルターがありました。これは、DirectDrawやGDIを用いて描画を行うものでした。しかし、ビデオウィンドウへのアクセスが制限されるという問題点がありました。その後、オーバーレイミキサーやVMR-7、VMR-9といった新しいレンダラーが導入され、より柔軟な映像処理が可能となりました。
- - オーバーレイミキサー: 字幕付きDVDやストリーミング放送の再生のために開発され、DirectDrawを利用してレンダリングを行います。
- - VMR-7: DirectDrawバージョン7を使用し、複数のストリームやグラフィックスの混合が可能です。ウィンドウレスモードも利用できます。
- - VMR-9: Direct3D 9を使用し、DirectX 9が利用可能なすべてのWindowsで利用可能です。
Windows Vista以降では、Media FoundationとEnhanced Video Renderer (EVR) が採用されています。
関連項目
- - Microsoft DirectX
- - GraphEdit
- - GraphStudio
- - DirectX Media Objects
- - Media Foundation
- - DirectXプラグイン
- - DirectX Video Acceleration
参考資料
- - MSDN DirectShow documentation
- - Programming Microsoft DirectShow for Digital Video and Television
外部リンク
- - DirectShow - Windows applications | Microsoft Docs
- - Good Overview of Video Renderer versions
- - Search results - Microsoft Download Center
- - Radlight Ogg Theora DirectShow filter
- - J. River DirectShow Playback Guide