iOS的ffmpeg替代方案

3
我已经尝试了数周来在我的iOS应用程序中实现ffmpeg。现在我可以播放几个avi文件,但其他文件如flv、wma、mp4等播放速度很慢。
我花了很多时间研究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
请注意 - 不使用MediaPlayer框架访问音乐库中的媒体的应用将被拒绝。 - beryllium
如果是AVI或WMA格式的,很可能不在音乐库里面。 - StilesCrisis
1个回答

3

我曾经遇到过类似的问题,其中有两个瓶颈:

  1. 解码
  2. yuv格式转换为rgb格式

我通过使用着色器来解决第二个问题。现在它非常快速(我可以在iPad2上同时渲染6个视频,每秒30帧)。

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

    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的纹理)。


嗨Max,非常感谢你的回答。我真的很高兴得到了你的回答。我对OpenGL和着色器没有太多的了解。你知道有什么例子吗? - resident_
这真的不太复杂。您只需要使用采样器获取像素颜色,然后使用简单的公式进行您的RGB转换。您可以在维基百科上找到它:http://en.wikipedia.org/wiki/YUV#Conversion_to.2Ffrom_RGB - Max
嗨Max,我知道你在哪里包含代码,但不知道如何正确地执行它。我已经编辑了我的帖子并附上了我的片段着色器代码。谢谢。 - resident_
嗨Max,我需要尽快解决这个问题。我无法与你联系。我希望你能和我合作。如果你愿意,请通过ggdiez@gmail.com与我联系。 - resident_
同时以30fps渲染6个视频相当令人印象深刻,你是如何加速解码的? - jAckOdE
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接