web-dev-qa-db-ja.com

iOS4:ビデオファイルをOpenGLテクスチャとして使用するにはどうすればよいですか?

OpenGLのUVマップされた3Dオブジェクトにビデオファイルの内容を表示しようとしています(今のところオーディオなしで言いましょう)。私はOpenGLでかなりのことをしましたが、ビデオファイルの処理をどこから始めればよいかわかりません。そこにある例のほとんどは、カメラからビデオフレームを取得するためのもののようですが、これは私が求めているものではありません。

現時点では、ビデオの個々のフレームをCGImageRefとして取得できるかどうかを感じているので、これをどのように行うのか疑問に思っています。おそらく、これを行うためのより良い方法がありますか?どこから始めればよいですか?iOSでビデオを再生するための最も簡単なファイル形式は何ですか? .mov?

23
Billy

謝罪; iPhoneで入力するので、少し簡単に説明します。

ビデオのURLを使用してAVURLAssetを作成します。必要に応じてローカルファイルのURLにすることもできます。 QuickTimeでできることは何でも問題ないので、H.264のMOVまたはM4Vがおそらく最良のソースです。

タイプAVMediaTypeVideoのトラックのアセットをクエリします。ソースビデオにそのようなものの複数のカメラアングルがない限り、1つだけを取得する必要があるため、objectAtIndex:0を取得するだけで、必要なAVAssetTrackが得られます。

これを使用して、AVAssetReaderTrackOutputを作成します。おそらく、kCVPixelFormatType_32BGRAを指定する必要があります。

アセットを使用してAVAssetReaderを作成します。アセットリーダートラック出力を出力として添付します。そして、startReadingを呼び出します。

今後は、トラック出力でcopyNextSampleBufferを呼び出して、新しいCMSampleBufferを取得し、カメラから入力を取得する場合と同じ位置に配置できます。したがって、それをロックしてピクセルコンテンツを取得し、AppleのBGRA拡張機能を介してそれらをOpenGLにプッシュできます。

32
Tommy