DirectShow

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索

DirectShow (DSまたはDShowとも略される)は、マイクロソフトによるメディアファイルまたはストリームに対する様々な操作を行うマルチメディアフレームワークとAPIであり、Video for Windowsの後継となっている[1]。コードネームはQuartzであった。COMをベースとしており、多数のプログラミング言語で共通のインタフェースを公開し、拡張性も高いものとなっている。フィルタベースでアプリケーションユーザまたはソフトウェアプログラマの要求に応じてメディアを再生・記録などの操作を行えるようになっている。DirectShowの開発ツールや文書は当初DirectX SDKに収録されていたが、現在ではWindows SDK(移管当時Platform SDK)になっている[2]

DirectShowに対するものとしてアップルQuickTimeLinux向けにGStreamerXineなどのマルチメディアフレームワークが存在する。

Windows Vistaからは、Media Foundationを後継とすることが計画されている[3]

歴史[編集]

DirectShowの直接の前身はActiveMovie (コードネームQuartz) であり、当初はWindowsをMPEG-1ファイル再生に対応させるために作られた。そこから、Bフレーム未対応のVideo for Windowsや完全32ビット化やCOM化されなかったMedia Control Interfaceの後継たるマルチメディアフレームワークとして拡張されることとなった[1]

ActiveMovieは1996年3月に公表され[4]、同年5月ベータ版のInternet Explorer 3.0で初公開となった[5]。1997年3月、ActiveMovieはDirectX 5の一部となることが公表され[6]、直接的にハードウェアを扱う技術に共通の命名を行う方針を受けて7月にはDirectShowと呼ばれ始めた[7][8]。そして、Windows 98からすべてのWindowsに標準搭載されるようになった[9]。DirectX 8.0から他のDirectX APIと同様に重要なコンポーネントとして扱われるようになっている。[10]

2004年10月、DirectShowはDirectXから外されDirectX Extraに含まれるようになり、さらには2005年4月、DirectShowはDirectXから完全に取り除かれ、当時Windows Server 2003 SP1版だったPlatform SDKに移管された[2]。ただし、現在でもDirectShowのサンプルプログラムのビルドには依然としてDirectX SDKが必要である[11]

アーキテクチャ[編集]

DirectShowは大きなマルチメディアタスク(映像・音声再生など)をフィルタの並びへ小さく分割して取り扱う[12][13]。各々のフィルタはデータ加工の1段階を表す。フィルタには、さらに入出力を意味し他のフィルタとの接点となる「ピン」があり、ピンの接続の仕方によって様々な機能を実現できるようになっている[14]。DirectShowを使用するプログラムでは、フィルタインスタンスの作成と接続を行ってフィルタグラフを構築する[15]

フィルタは主に3種類ある。

ソースフィルタ
ファイルから読み込むなど、データストリームを提供する。
変換フィルタ
他のフィルタの出力を受け取り、変換を行う。例えば、非圧縮ビデオにテキストを付加するなど。
レンダフィルタ
レンダリングを行う。サウンドカードに音声を送ったり、画面にビデオを描画したり、ファイルに書き出したりするものなど。

フィルタグラフを視覚的に構築して試すことができるツールとしてGraphEditが存在する[16]。GraphEditでは、レジストリから登録されているフィルタを探し、接続して、実行(再生、一時停止など)を行える。再生にあたって、フィルタグラフは再生(再生1つ取ってもファイルパース、音声と映像の分離、回答、レンダリングと細分される)・録画・録音・編集・圧縮・変換・ネットワーク転送など幅広く使用されており、それだけでなくDirectShowではDVD操作などインタラクティブな操作も可能となっている。 大半のフィルタはDirectShow基底クラスと呼ばれるDirectShow SDK収録のC++クラスを使用して作られている[17]。DirectShow基底クラスは、フィルタの作成・接続や、フィルタグラフがフィルタを自動的に使用できるよう必要なレジストリへの登録を扱ってくれる。自動的に使わせたくないフィルタでは、登録させないことも可能である。 実行中のグラフへの修正は困難である。大抵はグラフを停止させ、新たに作り直すほうが簡単である。これに対処するため、DirectShow 8.0では動的なグラフの作成・再接続、フィルタの連鎖の機能が追加された[18]。しかし、ほとんどのフィルタ製作者がこの機能を無視しているため、実行中のグラフの作成が問題なく行えるとは言い難い状況である。

特徴[編集]

標準では一般的なメディア形式のフィルタしか導入されない。例えば、コーデックとしてMPEG-1, MP3, Windows Media Audio, Windows Media Video, MIDIコンテナフォーマットではAVI, ASF, WAV、それ以外には分離・多重化・入力元・出力先(シンク)・静的な画像のフィルタなどである[19]。これらの特許はWindowsにライセンスされており、別途ライセンスを受ける必要はない。現在、評判が良く標準が制定された現代的なMPEG-4 ASP, AAC, H.264, VorbisのコーデックやOgg, MOV, MP4などのコンテナなどが含まれていないことに注意が必要である。使用には、別途コーデックを得る必要がある。

しかし、DirectShowは、市販品やオープンソースのソースフィルタを使って拡張でき、様々なコンテナ形式や音声・映像のコーデックがある。例えば、Ogg Vorbis[20] Musepack , Musepack[21], AC3[22]などが挙げられる。さらに、VLCのように[23]、他のマルチメディアAPIの機能を提供するブリッジフィルタというものも存在する。

フィルタグラフの構築には、様々な方法が考えられる。もっとも単純なのは、ファイルやURLなどからDirectShowに自動でフィルタグラフを構築させる方法である[24]。それが不可能なら、ソースフィルタなどと必要に応じて既存のカスタムフィルタを手動で追加する方法が考えられる。その場合、接続はDirectShowに任せたり必要に応じて手動で行ったりする。また、適当なフィルタがなければ、カスタムフィルタの作成から行うことになる。

再生時、MoviesTaskを呼び続けないといけないQuickTimeのC APIと違い、DirectShowは透過的に扱う。つまりバックグラウンドスレッドを作って、プログラマに余計な負担を強いることなくスムーズな再生を実現している。もう1つ、QuickTimeとの違いとして、URLからの読み込みとコンピュータ内のローカルファイルとの読み込みの手順で特に違いが存在しないということが挙げられる。これは、DirectShowのフィルタグラフが差異を吸収するためであり、QuickTime (ActiveXコントロール)でも最近はこの点が改善されている。

DirectShow編集サービス[編集]

DirectShow編集サービス (DirectShow Editing Services, DES)は、Windowsムービーメーカーのため[1]、DirectX 8.0 / Windows XPで導入されたDirectShowのアーキテクチャ上で構築された映像編集を行うAPIである。これには、タイムライン、トラック、サイズ変更、クロップ、映像・音声へのエフェクト、トランジション、キーイング、自動フレームレートサンプリング周波数変換やその他ノンリニア編集で用いられる無数の機能が搭載されている。さらに、高水準の実行時合成、シーク対応、グラフ管理は低水準のDirectShowの機能を使用中でも利用できる。

DirectShow編集サービスはVisual C++向けにインタフェースが用意されているが、最近ではC#VB.NETなどといった.NET言語で利用できるようにするサードパーティのライブラリとしてDirectShow Libが存在する[25]

ほかには、DirectShow編集サービスも含めたDirectShowのAPIをDelphi 5, 6, 7およびC++ Builder 6などで利用可能にするサードパーティのライブラリとしてDSPackが存在する[26]

ビデオレンダーフィルタ[編集]

当初、DirectShowが映像を再生する手段としてビデオレンダラフィルタが用いられた。これは、まずDirectDraw、それが駄目ならGDIを用いて描画するレンダラである [27]。ビデオレンダラでは、ビデオウィンドウへのアクセスが制限される。Video for Windowsでは、映像再生用ウィンドウのハンドルに対して、アプリケーションが適切な扱いをしないことに起因するデッドロックに苦慮したため、初期のDirectShowでは、再生するためのウィンドウへのハンドルがアプリケーションから隠蔽されていたこともあった。そのため、画面の映像上に字幕の文字や絵を描画する確実な方法は当時存在しなかった。

DirectShow 6.0では、DirectX Mediaの一部として、オーバーレイミキサをリリースした。これは、字幕を付けてのDVDやストリーミング放送の再生のために作られ、DirectDrawをレンダリングに用いる。なお、オーバーレイミキサの使用の際には、ウィンドウ管理のためフィルタ接続の下流に「ビデオレンダラ」フィルタが必要である。オーバーレイミキサは(PCIを通さず直接ビデオカードへ映像信号を送る)オーバーレイ対応のアナログTVチューナーカードと協調するためのVideo Port Extensions (VPE) もサポートしている。また、DXVA接続にも対応している。

Windows XPではVideo Mixing Renderer 7 (VMR-7、単にVMRと表記されることも)が導入された。この7は、GDIを全く使用せずDirectDrawバージョン7を描画に用いることに由来する。VMR-7の特徴は、複数のストリームやグラフィックスの混合が可能になったことである。例えば、アプリケーションが映像上に文字や絵を乗せることが可能になったのである[28]。また、VMR-7にはウィンドウハンドルの扱いに関する問題を改善した「ウィンドウレスモード」が存在する[29]。公式には、VMR-7はWindows XP以降にしか用意されていない。

DirectX 9ではVMR-9が搭載されている。これはDirectDrawではなく、Direct3D 9を描画に用いる[30]。こちらは、DirectX 9が使用可能なすべてのWindowsで利用可能である。

Windows Vistaでは、Media FoundationEnhanced Video Renderer (EVR)[31]と呼ばれる新しいレンダラが用意されている。EVRはDXVA 2.0に対応しているが、Windows Vistaには搭載されていない[32]


関連項目[編集]

参考[編集]

脚注[編集]

  1. ^ a b c MSDN Magazine (2002年7月). “Core Media Technology in Windows XP Empowers You to Create Custom Audio/Video Processing Components” (英語). Microsoft PressPass. 2009年6月9日閲覧。
  2. ^ a b DirectShow documentation on MSDN
  3. ^ Migrating from DirectShow to Media Foundation
  4. ^ Microsoft (1996年3月5日). “Microsoft Announces ActiveMovie”. Microsoft PressPass. 2006年12月31日閲覧。
  5. ^ Microsoft (1996年5月29日). “Microsoft Internet Explorer 3.0 Beta Now Available”. Microsoft PressPass. 2006年12月31日閲覧。
  6. ^ Microsoft (1997年3月31日). “Microsoft Unveils First Unified Multimedia API Strategy”. Microsoft PressPass. 2006年12月31日閲覧。
  7. ^ Microsoft (1997年7月21日). “Microsoft and Progressive Networks Collaborate on Streaming Media”. Microsoft PressPass. 2006年12月31日閲覧。
  8. ^ DirectX Then and Now (Part 1)
  9. ^ Microsoft Releases DirectShow SDK - Universal Playback for DVD, Digital Video and Audio, and the Internet
  10. ^ FAQs about the DirectShow and Windows Media SDKs
  11. ^ DirectX FAQ”. 2005年9月11日閲覧。
  12. ^ Introduction to DirectShow application programming
  13. ^ DirectShow system overview
  14. ^ About DirectShow filters: MSDN
  15. ^ Overview of graph building
  16. ^ Overview of GraphEdit
  17. ^ DirectShow Base Classes
  18. ^ Dynamic Graph Building
  19. ^ Formats supported by default in DirectShow”. 2005年9月11日閲覧。
  20. ^ illiminable Directshow Filters for Ogg Vorbis, Speex, Theora and FLAC”. 2006年3月11日閲覧。
  21. ^ Monogram's DirectShow filters for Musepack, AAC and AMR”. 2008年3月8日閲覧。
  22. ^ AC3Filter
  23. ^ Dean Anderson, Jim Lamberson (2007年). “Using VideoLan VLC in DirectShow”. An open source bridge from VLC to DirectShow. 2008年2月15日閲覧。
  24. ^ DirectShow For Media Playback In Windows: Customizing Graphs
  25. ^ DirectShow.NET
  26. ^ DSPack
  27. ^ DirectShow Video Renderer Filter
  28. ^ Video Mixing Renderer 7 (VMR-7)”. 2005年9月11日閲覧。
  29. ^ VMR Windowless Mode”. 2005年9月11日閲覧。
  30. ^ Video Mixing Renderer 9 (VMR-9)”. 2005年9月11日閲覧。
  31. ^ Enhanced Video Renderer”. 2007年2月28日閲覧。
  32. ^ Media Foundation forum

外部リンク[編集]