最初に、私の最初のアプリ (SwatchMatic) について、(長年潜伏していた私に) 多くの助けを提供してくれたこのフォーラムに感謝します。私は今、2 度目の挑戦を試みていますが、初めて質問を投げかけています。
このフォーラムの他の場所で指摘されているように、MediaDataRetriever は、たとえマイクロ秒が使用されていても、また OPTION CLOSET が使用されていても (キー/同期フレームだけでなくすべてのフレームを取得するために) 、細かいステップでビデオからビットマップを取得することは期待できません。 .
したがって、このようなものは、多くの重複したフレームを返します.1秒間のビデオに期待する〜30とは対照的に(とにかく私のSamsungテストデバイスでは)、Samsungディストリビューションはすべてのフレームを配信するのが苦手なようです.私が他のフォーラムで読んだことから、他のメーカーのものよりも)。
for (int i = 0; i < 1000000 ; i = i + (1000000/30)){
Bitmap myBitmap = retriever.getFrameAtTime(i, android.media.MediaMetadataRetriever.OPTION_CLOSEST);
...
}
典型的な答えはffmpegを使用することですが、これは私が必要とする非常に限られた機能(mpeg-4でエンコードされたvidoからの30-60のいくつかのビットマップシーケンス)を得るための非常に肥大化したソリューションであり、配布する必要があります私のアプリなどでLGPLコード。
また、このフォーラムで、VideoView (SurfaceView の子) からフレームを取得する簡単な方法がないことを読みました。一部の Google 従業員は、実際にこの効果についてここで回答しました。
しかし、ThumbnailUtils の createVideoThumbnail メソッドはどうでしょうか。MINI_KIND が提供できる解像度で生活できましたが、クリップの中間フレーム (時間的に) しか提供していないようです。特定の時間にフレームを作成するために、何らかの方法でオーバーライド/拡張できますか?