2016-10-18 8 views
2

iOSでOpenGL ES 2.0を使用してビデオを再生しようとしています。私はこれを達成するためのサンプルコードまたは出発点を得ることができません。誰も私にこれを助けることができますか?iOSでOpenGLを使ってビデオを再生するには?

+1

Googleで検索しました。あなたが言及したリンクは、画像や3Dモデルの表示方法のみを示しています。 OpenGLを使ってビデオを再生したい。基本的に、ビデオフレームをOpenGLシェーダにテクスチャとして渡したいと思います。 @AmitSrivastava –

+0

私はこれを解決する方法を見つけることができません。 – Parth

+1

@ R.Jari:あなたは正常に成功しましたか?はいの場合はコードを共有してもよろしいですか?事前にありがとう! – loki

答えて

2

あなたが探しているのは、ビデオのローバッファをリアルタイムで取得していることです。私はあなたがAVFoundationを調べて何とかCVPixelBufferRefを抽出する必要があると信じています。私が正しく覚えていれば、いくつかの方法があります。 1つは特定の時間にオンデマンドで、もう1つはブロック内のフレームの高速反復を処理するためのもので、必要なものはリアルタイムでフレームを受信することです。このため、生のRGBバッファを抽出して、テクスチャにプッシュしてレンダバッファに描画する必要があります。

テクスチャを1回(ビデオごとに)作成し、可能な限り小さくしてみてくださいが、ビデオフレームが確実に収まるようにすることをお勧めします。だから、テクスチャサイズは、ビデオ、次に大きいことが予想され

GLInt textureWidth = 1.0f; 
while(textureWidth<videoWidth) textureWidth <<= 1; // Multiplies by 2 

:あなたはのようなものを必要とするので、ビデオの幅からテクスチャの寸法を取得するために、テクスチャ(2の累乗)POTが必要になることがあります。データをテクスチャにプッシュするには、テクスチャサブ画像glTexSubImage2Dを使用する必要があります。これは、生データと矩形パラメータへのポインタが、どこにデータを保存するかを期待しています((0, 0, sampleWidth, sampleHeight))。また、範囲[0、1]ではなく、むしろx[0, sampleWidth/textureWidth]のために、テクスチャ座標を計算する必要があります。

だから、あなたはちょうどそれをすべて一緒に置く必要があります。

  • は、新しいサンプルのアップデートでビデオサイズ
  • に合わせてテクスチャを生成し、ビデオ生サンプル・バッファ
  • を生成維持するためのシステムを持っていますテクスチャにデータをロードした後に、テクスチャをフルスクリーンの矩形として描画します(スレッドについては注意してください)。

ビデオの向きや変形について注意する必要があります。可能であれば、デバイスに異なる方向で記録された少数のビデオを使ってシステムをテストしてください。私は今、すでに正しく指向されたバッファーを受け取るためのサポートがあると思います。しかし、デフォルトでは、サンプルは少なくとも「間違っていました」。肖像画の記録されたビデオはまだランドスケープのサンプルを持っていましたが、変換マトリックスまたはオリエンテーションが資産に与えられました。

関連する問題