2012-02-17 10 views
3

私は数年前にiosアプリケーションでffmpegを実装しようとしてきました。そして今、私はいくつかのaviファイルを再生することができますが、flv、wma、mp4のような他のファイルは...ゆっくりと再生します。iOS用のffmpegに代わるもの

私はffmpegとopenglに多くの時間を費やしていますが、解決策が見つかりません。

私はこのファイルをiosデバイスで再生する他の方法を探しています。

私はこのファイルを再生するために使用できる他のライブラリ、フレームワークなどを知っています。ビジネスライセンスを持っているかどうかは関係ありません。

非常に感謝し、

編集:

初期シェーダ:

shader = [[GLShader alloc] initWithFileName:@"render" attributes:[NSDictionary dictionaryWithObjectsAndKeys: 
                          [NSNumber numberWithInt:0], @"position", 
                          [NSNumber numberWithInt:1], @"texCoords", nil] 
             uniforms:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:0], @"sampler0", 
                          [NSNumber numberWithInt:0], @"viewProjectionMatrix",nil]]; 

render.fsv:

uniform sampler2D sampler0; 
varying highp vec2 _texcoord; 
void main() 
{ gl_FragColor = texture2D(sampler0, _texcoord);} 

render.vsf:

attribute vec4 position; 
attribute vec2 texCoords; 
varying vec4 colorVarying; 
varying vec2 _texcoord; 
uniform mat4 viewProjectionMatrix; 

void main() 
{ _texcoord = texCoords; 
gl_Position = viewProjectionMatrix * position;} 

このコードでソリューションをどのように実装できますか?

+1

注意 - Music LibraryのメディアにアクセスするためにMediaPlayerフレームワークを使用しないアプリケーションは拒否されます_ – beryllium

+0

AVIまたはWMAの場合、音楽ライブラリには疑問があります... – StilesCrisis

答えて

3

同様の問題が発生しました。

  1. YUVからRGBフォーマットへ
  2. 変換

Iはシェーダを用いて画像を変換することによって第二の問題を解決をデコード2本のボトルネックがありました。これは本当に速く動作します(私はiPad2で30フレーム/秒で6つのビデオを同時にレンダリングできます)。ここで

は、フラグメントシェーダの一部です:

uniform sampler2D y; 
    uniform sampler2D u; 
    uniform sampler2D v; 

    ... 
    y = texture2D(y, vec2(nx,ny)).r; 
    u = texture2D(u, vec2(nx, ny)).r - 0.5; 
    v = texture2D(v, vec2(nx, ny)).r - 0.5; 

    r = y + 1.13983*v; 
    g = y - 0.39465*u - 0.58060*v; 
    b = y + 2.03211*u; 

    gl_FragColor = vec4(r, g, b, 1.0); 

注:yを格納する必要があり、U、3つの異なるテクスチャでVコンポーネント。

nxとny - は、正規化テクスチャ座標(0から1テクスチャ)です。

+0

こんにちはご回答有難うございます。私は本当にあなたの答えに満足しています。私は、OpenGLとシェイダーについてはあまり考えていません。 ご存知ですか? –

+0

本当に複雑すぎることはありません。サンプラーを使用してピクセルの色を取得し、単純な方程式のyou-rgb変換を使用して変換するだけです。あなたはWikipediaで見つけることができます:http://en.wikipedia.org/wiki/YUV#Conversion_to.2Ffrom_RGB – Max

+0

こんにちは、私はこのコードをどこに追加できるのか分かりません。私のレンダリング方法では、uint8_t形式のフレームバッファを取得します。この方法で投稿を編集します。ご協力いただきありがとうございます。 –