Альтернатива ffmpeg для iOS - PullRequest
       10

Альтернатива ffmpeg для iOS

3 голосов
/ 17 февраля 2012

Я пытался внедрить ffmpeg в моём приложении ios несколько недель.И теперь я могу воспроизводить несколько файлов 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 Ответ

3 голосов
/ 18 февраля 2012

У меня были похожие проблемы. Было два узких места:

  1. декодирование
  2. преобразование из формата yuv в rgb

Я решил вторую проблему, конвертировав изображение с помощью шейдеров. Теперь он работает очень быстро (я могу одновременно рендерить 6 видео со скоростью 30 кадров в секунду на iPad2).

Вот часть фрагмента шейдера:

    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 текстуры).

...