Silverlightの動画再生(H.264とGPU)

 

SilverlightLogo

Silverlight

■H.264とGPU
H.264は、別名MPEG-4 AVCという動画圧縮規格です。Silverlight 3から、H.264の動画再生をサポートしています。Silverlight 4では、Silverlight DRMでH.264動画を保護することも可能です。
再生時は、DirectX 9以降をサポートするグラフィックボード搭載のPC上では、GPUアクセラレーションを行います。
・NVIDIA Quadro FXの多く
2000/500/700/3000/3400/4400/3450/4500/4500
X2/5500/350/550/560/4600/5600/1700/570/370/3700/4700
X2/1800/580/380/3800/4800/5800
・NVIDIA GeForce 7 Series以降(7,8,9,100,200)
・ATI RADEON 9500番以降、X300/X600 XT/X1050
・ATI RADEON XPRESS 200
・ATI RADEON Xシリーズ
・ATI RADEON HDシリーズ
・ATI FirePro 3Dシリーズ

●Flashの場合、Flash Player10でwmodeを使った設定を行います。
wmode=directとwmode=gpuという設定を行うことができます。
[wmode=direct(動画再生の場合、こちらを使います。)]
Windows環境の場合、DirectDrawまたはDirect3D(Vista,7 or Later)を使います。FlashはSilverlight 3と同じ動きになり、DirectX9以降をサポートするグラフィックボード搭載のPCでのみGPUアクセラレーションをします。
OSXやLinux環境の場合、OpenGLを使います。OpenGL 2.0または Shader Model 3.0 をサポートするグラフィックボード搭載のPCでのみGPUアクセラレーションをします。
・NVIDIA Quadro FX(350/370/540/560/570/1400/1500/1700/3400/3450/3700/4400/4500/4600/5500/5600)
・NVIDIA GeForce 7シリーズ以降(7,8,9,200)
・ATI RADEON HDシリーズ
・ATI RADEON X1600以降
・ATI FirePro 3Dシリーズ

[wmode=gpuの場合(こちらを指定しても、動画はソフトウェアが描画します。)]
Windows環境の場合、Direct3Dを使います。DirectDrawを使いません(現在の多くのグラフィックボードはDirect3D専用に移行してきています)。
OSXやLinux環境の場合、OpenGLを使います。GPUを使うかどうかについてはwmode=directと同じです。

●Windows環境では、FlashとSilverlightの動画再生動作は同じです。
このように、Windows環境ではSilverlightとFlashはGPUの利用に関して同じ動作を行います。注意が必要なのは、Silverlightはプラグインがそれを判定し、Flashは制作者が設定するということです。
GPUはビデオカードのデバイスドライバに大きく依存しているため、利用環境を想定できる環境で利用することが重要です。Flashの場合、wmodeはコンテンツ制作者が設定しますので、Flash Playerがインストールされているにも関わらず、コンテンツが再生できないユーザーが発生することを想定したコンテンツを作成する必要があります。

■動画を再生することだけに注目すると
OpenGLは工学描画が目的であり、DirectXはサウンドや入出力も考慮したエンターテイメント描画を目的としています。動画再生という利用シーンを考慮するとDirectXでの再生がその目的に合致しているのではないでしょうか?
●動画再生では、GPUの役割は少ない
ただし、OpenGLを使うとサウンドや入出力に支障が出るわけではありません。むしろ動画の再生の場合は、GPU処理における文字のエッジがぼやけるとか色が合わないといった影響を動画コンテンツの作りが吸収してしまう場合が多く考えられます。たとえば、主にPCのディスプレイで再生されることが想定できるコンテンツを制作する場合、フレームレートはリフレッシュレートを超えませんから、50~55フレームぐらいできれいに、見やすい動画コンテンツを作ると、それを意識していない動画コンテンツを、高性能グラフィックボードを搭載したPCで再生した場合より有効なコンテンツとなります。
●GPUが威力を発揮するコンテンツとは
3Dオブジェクトとビデオの合成であるとか、3Dオブジェクトのみで構成されたアニメーションの再生といった場合にGPUは効果を発揮するのではないでしょうか?現状では、Silverlightで作るコンテンツよりもXNAで作るコンテンツのほうがGPUの恩恵を多く享受できそうです。動画単体といくつかのコントロールのみで構成されたコンテンツを再生する場合、あまりGPUの効果を享受するのが難しいかもしれません。
ただし、Silverlightの場合、GPUに任せた処理結果をキャッシュさせるという機能があります。これは、開発者がビジュアルツリーを構成することができるAPIですので、GPUに任せるオブジェクトも設定することができます。そのため、CPUの負荷を軽減するといったメディア再生のシナリオを構築することが可能です。

■参考
Adobe Flash Player チーム スペシャリストTinicのblog「What does GPU acceleration mean」
http://www.kaourantin.net/2008/05/what-does-gpu-acceleration-mean.html
Wikipedia「GeForce」「RADEON」
http://ja.wikipedia.org/wiki/GeForce, http://ja.wikipedia.org/wiki/Radeon

About takao