替代ffmpeg for iOS

时间:2012-02-17 11:18:25

标签: ios opengl-es ffmpeg video-processing

我几周都试图在我的ios应用程序中实现ffmpeg。现在我可以播放几个avi文件,但其他文件如flv,wma,mp4 ......播放速度很慢。

我花了很多时间使用ffmpeg和opengl,但我找不到解决方案。

我正在寻找在ios设备上播放此文件的其他选择。

有人知道我可以用来播放这些文件的其他库,框架......无论他们是否有营业执照。

非常感谢,

编辑:

Init Shader:

 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 个答案:

答案 0 :(得分:3)

我遇到过类似的问题。有两个瓶颈:

  1. 解码
  2. 从yuv转换为rgb格式
  3. 我通过使用着色器转换图像解决了第二个问题。它的工作速度非常快(我可以在iPad2上以30 fps同时渲染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,v组件存储在3种不同的纹理中。

    nx和ny - 是标准化纹理坐标(从0到1纹理)。