現在 Android 向けに再構築中の iOS アプリがあります。このアプリは、フレームの精度でビデオをスクラブできることに依存しています。単一のフレームとしてレンダリングされる 3D アニメーションがあります。フレームのサブセットを多数の小さな (1 ~ 2 秒) ビデオに構築します。アプリは、これらのビデオをスクラブして、個々のフレームを表示する機能を提供します。
最初に作成した MP4 ビデオは、iOS で正常に動作します。(MediaPlayer クラスを使用して) Android でそれらを動作させようとしたとき、私たちは苦痛の世界に入りました! MediaPlayer.seekTo() を使用して、すべての Android デバイスで再生し、フレーム精度のスクラブを可能にするビデオ形式を見つける必要があります。最初は Android 3.0 以降をターゲットにしていますが、おそらく最初のリリース後に 2.3.3 まで引き伸ばしたいと考えています。これまでに発見したことは次のとおりです。
(A) Android は、H264 の「ベースライン プロファイル」をどこでもサポートする必要があると主張しています: (URL)。ただし、その中には、サポートされている場合とサポートされていない場合があるその他の設定が多数あります。どこかにもっと細かいリストはありますか? 現在、MP4 コンテナ内で H264 に変換しています。
(B) キーフレーム (「フレーム内」) を挿入せずに H264 ファイルを正確にスクラブする Android デバイスをまだ見たことがありません。iOS は、キーフレームなしでH264 ファイルを喜んで受け取り、正確なスクラブを提供します。正確なスクラブを可能にするには、ビデオのすべてのフレームにキーフレームを挿入する必要があるようです (関連する ffmpeg 設定は「-g 1」です)。これにより、ファイル サイズが大幅に増加します。
(C) ただし、フレームごとにキーフレームを挿入すると、Samsung Galaxy Note 3 (Snapdragon チップセットと思われます) ではまったく再生されないビデオになります。キーフレームを毎秒以上のフレームに減らすとうまくいくようです(ffmpeg設定「-g 2」)。
要約すると、 MediaPlayer.seekTo() はビデオ形式に大きく依存しているようで、デバイスによって異なります。これは意図ですか?形式に関係なく、 seekTo() が提供するはずの基本レベルの動作はありますか?
すべての Android デバイス (少なくとも 3.0 以降の場合) でフレーム精度のスクラブ (MediaPlayer.seekTo() を使用) を許可するビデオ形式は何ですか?