プログラムで AVI の最初のフレームを取得し、ビットマップ イメージを取得してユーザーにプレビューを表示する方法があるかどうか疑問に思っていました。Silverlight の MediaControl は、Silverlight でサポートされているビデオ ファイルのプレビューを表示しますが、AVI は表示しません。私は Silverlight 環境にいるため、アンマネージ コードやライブラリを使用することはできません。ファイルストリームにしかアクセスできません。
2 に答える
SilverlightランタイムはAVIファイルをネイティブにサポートしていないため、MediaElementでそれらを使用することはできません。
あなたがする必要があるのは、実際にAVIファイルを手で解析し、そのファイルからフレームを引き出すことです。フレームを解析しているポイントに到達すると、少しトリッキーになる可能性があります。
この作業をSilverlight2で行う予定の場合、AVIファイルにはWMVフレームまたはSilverlightでサポートされている画像形式(JPGまたはPNG)のいずれかのフレームが含まれている必要があります。WMVを使用している場合は、MediaStreamSourceを設定し、最初のサンプルとして目的のビデオフレームをMediaStreamSourceに渡します。いずれかの画像形式で作業している場合は、画像を使用してそのソースをストリームに設定する必要があります。JoeStegmanがこれを使用してSilverlight2が非ネイティブの画像形式をサポートするのを支援した例を見ることができます。
Silverlight 3でこれを行っていた場合(現在ベータ版です)、テクニックは一般的に同じですが、メディア形式のサポートが少し増えて(WMVに加えて)H264、Raw YV12、またはRawARGBフレームが含まれるようになります。同様に、イメージングの面では、フレームの描画に使用できるWriteableBitmapができました。
ビデオがTheora、Divx、Xvid、VP6などの場合。Silverlightで表示できるように、そのフレームをデコードする方法を見つける必要があります。
同様の質問がSilverlight フォーラムに投稿されています。フォーラム スレッドには、コード サンプルが含まれています。
最初の数フレームがフェードインするか、ビデオをあまり代表していない可能性があるため、ビデオのさらに先のフレームを選択することをお勧めします。
エンコーディングによっては、MediaPlayer クラスで AVI ファイルを読み取れない場合があります。(互換性のあるエンコーディングについては、こちらを参照してください)。マネージド コードでこれを行うには、ビデオのトランスコードが必要になる場合があります。独自のデコーダーを見つけたり書いたりしない限り。