2012-04-04 7 views
4

私はmp4ファイルをデコードし、iOSアプリケーションでOpenGLを使用して描画する必要があります。私はmp4ファイルからh264フレームを抽出してデコードする必要があり、CoreMediaを使って何ができるか聞いた。誰もそれをどうやって考えているのですか? CoreMediaの使用例は?iOS上でCoreMedia.frameworkを使用してビデオをデコード

答えて

7

あなたが探しているコアメディアではなく、AVFoundationです。特に、AVAssetReaderを使用してムービーからロードし、フレームを反復処理します。これらのフレームをOpenGL ESテクスチャとしてアップロードするには、glTexImage2D()または(iOS 5.0の場合)もっと速いテクスチャキャッシュを使用します。

これを独自に実装したくない場合は、私のGPUImageフレームワーク内でOpenGL ES経由でAVFoundationベースのムービーの読み込みと処理を行っています。 GPUImageMovieクラスは、ムービーの読み込みとテクスチャへのアップロードのプロセスをカプセル化します。独自のシーンで使用するためにそのテクスチャを抽出する場合は、GPUImageTextureOutputをそのシーンに連結できます。これらのクラスの両方の例は、フレームワーク配布内のSimpleVideoFileFilterサンプル・アプリケーションとCubeExampleサンプル・アプリケーションにあります。

これは直接使用することもできますし、GPUImageMovieクラス内でこれらの同じ操作を実行するために書いたコードを参照することもできます。

+0

1つの長いファイルを再生しようとするとAVAssetReaderを使用しようとしましたが、サーバーからダウンロードした小さなビデオファイルのシーケンスを再生する必要があります。それは私自身のHTTPライブストリーミングの実装です。 1つのファイルを再生して新しいリーダーを作成して次のファイルを再生しようとしましたが、AVAsset/AVAssetReaderの初期化には時間がかかるため、セグメント間に遅延があります。私は最初に新しいmp4ファイルを追加することを考えましたが、私はそれを行う正しい方法を見つけることができません。どのようにそれを行うか考えていますか?または、AVAsset/AVAssetReaderを最適化する方法は? –

+0

また、いくつかのビデオエフェクトにはライブラリGPUImageを使用します。良い仕事、ありがとう! –

+0

申し訳ありませんが、あなたのような複数の映画の入力で遊んでいません。 AVFoundationの多くは、複数のメディアファイルではなく、単一のメディアファイルを再生または録音するように見えることがわかりました。 –

関連する問題