Мне нужно декодировать файл mp4 и нарисовать его с помощью OpenGL в приложении ios. Мне нужно извлечь и декодировать h264 кадры из файла mp4, и я услышал, что это возможно сделать с помощью CoreMedia. Кто-нибудь знает, как это сделать? Любые примеры использования CoreMedia?Декодирование видео с помощью CoreMedia.framework на iOS
ответ
Это не основной носитель, который вы ищете, это AVFoundation. В частности, вы должны использовать AVAssetReader для загрузки из вашего фильма и итерации по кадрам. Затем вы можете загрузить эти фреймы в виде текстур OpenGL ES либо с помощью glTexImage2D()
, либо (на iOS 5.0), используя гораздо более быстрые текстурные кеши.
Если вы не хотите откатывать свою собственную реализацию, у меня есть работа по загрузке и обработке фильмов на основе AVFoundation через OpenGL ES в рамках моего GPUImage. Класс GPUImageMovie инкапсулирует чтение фильма и процесс загрузки в текстуру. Если вы хотите извлечь эту текстуру для использования в своей собственной сцене, вы можете связать с ней GPUImageTextureOutput. Примеры обоих этих классов можно найти в примерах приложений SimpleVideoFileFilter и CubeExample в рамках дистрибутива.
Вы можете использовать это непосредственно или просто посмотреть на код, который я написал, для выполнения этих же действий в классе GPUImageMovie.
Я попытался использовать AVAssetReader, и он отлично работает, когда я пытаюсь воспроизвести один длинный файл, но мне нужно воспроизвести последовательность небольших видеофайлов, загруженных с сервера. Это моя собственная реализация потоковой передачи HTTP Live. Я попытался воспроизвести один файл, создав новый читатель и сыграю следующий файл, но для инициализации AVAsset/AVAssetReader требуется некоторое время, и у меня есть задержка между сегментами. Я думал о добавлении новых файлов mp4 в первую очередь, но я не могу найти правильный способ сделать это. У вас есть идеи, как это сделать? Или как оптимизировать запуск AVAsset/AVAssetReader? –
Также я использую вашу библиотеку GPUImage для некоторого видеоэффекта. Спасибо за хорошую работу, мужик! –
Извините, вы не играли с несколькими входами в видео, как вы описываете. Я заметил, что большая часть AVFoundation, похоже, ориентирована на воспроизведение или запись одиночных медиафайлов, а не нескольких. –