适用于iOS的ffmpeg的替代方法

我一直在尝试在我的iOS应用程序中实施ffmpeg几个星期。 现在我可以播放几个AVI文件,但其他文件,如FLV,WMA,MP4播放缓慢。

我花了很多时间与ffmpeg和opengl,我没有find解决办法。

我正在寻找其他的select来播放这个文件在iOS设备上。

有人知道其他库,框架,…我可以用来播放这个文件。 不pipe有没有营业执照

很感谢,

编辑:

初始着色器:

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;} 

我如何在这个代码中实现你的解决scheme?

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

  1. 解码
  2. 从yuv转换成rgb格式

我通过使用着色器转换图像来解决第二个问题。 它现在运行得非常快(我可以在iPad2上以30 fps的速度同时渲染6个video)。

这里是片段着色器的一部分:

  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组件。

nx和ny – 是归一化的纹理坐标(从0到1纹理)。