I've been trying to implement ffmpeg in my ios app several weeks. And now I can play several avi files, but other files like a flv, wma, mp4... play slow.
I have spent much time with ffmpeg and opengl and I don't find solution.
I'm looking other alternatives to play this files on ios device.
Someone know other libraries, frameworks, ... that I can use to play this files. No matter if they have business licenses.
Very thanks,
Edited:
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;}
How I can implement your solution in this code?
I've experienced similar problems. There were two bottlenecks:
- decoding
- conversion from yuv to rgb formats
I solved the second problem by converting image using shaders. It works really fast now (I can render 6 videos simulteneously at 30 fps on iPad2).
Here is part of the fragment shader:
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);
NOTE: you have to store y,u,v components in 3 different textures.
nx and ny - are normalized texture coordinates (from 0 to 1 texture ).
来源:https://stackoverflow.com/questions/9327264/alternative-to-ffmpeg-for-ios