2015-04-29 4 views
0

Я пытаюсь декодировать кадры из нескольких видеофайлов и использовать их в качестве текстуры opengl.Как декодировать несколько видео одновременно с помощью AVAssetReader?

Я знаю, как декодировать файл h264, используя объект AVAssetReader, но мне кажется, вы должны прочитать кадры после вызова startReading в while цикле, когда status является AVAssetReaderStatusReading. То, что я хочу сделать, это позвонить startReading, а затем позвонить copyNextSampleBuffer в любое время в любое время. Таким образом, я могу создать новый класс видеопроигрывателя из AVAssetReader и загружать видеокадры из нескольких видеофайлов всякий раз, когда я хочу использовать их в качестве текстур opengl.

Является ли это выполнимым?

+0

http://stackoverflow.com/a/17138661/763355 – MoDJ

ответ

0

Короткий ответ - да, вы можете декодировать по одному кадру за раз. Вам нужно будет управлять логикой декодирования самостоятельно, и самое простое - просто выделить буфер пикселей BGRA, а затем скопировать данные фреймбуфера в ваш временный буфер. Будьте предупреждены, что вы, вероятно, не сможете найти небольшой фрагмент кода, который сделает все это. Дело в том, что передавать все данные из фильмов в OpenGL непросто. Я бы посоветовал вам избегать попыток сделать это самостоятельно и использовать стороннюю библиотеку, которая уже реализует жесткий материал. Если вы хотите увидеть полный пример того, что уже было реализовано, вы можете посмотреть мой блог Load OpenGL textures with alpha channel on iOS. В этом сообщении показано, как потоковое видео в OpenGL, но вам нужно будет сначала декодировать с h.264 на диск с использованием этого подхода. Также должно быть возможно использовать другие библиотеки, чтобы сделать то же самое, просто имейте в виду, что одновременное воспроизведение нескольких видеороликов является ресурсоемким, поэтому вы можете быстро преодолеть ограничения, которые могут быть сделаны на вашем аппаратном устройстве. Кроме того, если вам действительно не нужны текстуры OpenGL, гораздо проще просто работать с API-интерфейсами CoreGraphics непосредственно под iOS.