Постобработка iOS — наложение метки времени на видео и экспорт

Я работаю над приложением, в котором данные видео и времени/GPS/акселерометра одновременно записываются в отдельные файлы.

Я могу воспроизвести видео, и мой оверлей отлично отобразится в реальном времени, но я не могу просто экспортировать его.

Я хочу обработать видео и наложить время, координаты и видео. Есть и другие фигуры, которые будут накладываться, изменяя размер/положение на каждом кадре.

Я пытался использовать AVMutableComposition и добавлять CALayers с ограниченными результатами. Это работает до некоторой степени, но я не могу синхронизировать метку времени с видео. Я мог бы использовать CAKeyframeAnimation со значениями+keyTimes, но количество значений, с которыми мне нужно работать, слишком велико.

Мой текущий подход заключается в рендеринге отдельного видео, состоящего из CGImages, созданных с использованием данных. Это работает хорошо, но мне нужно будет использовать ChromaKey, чтобы сделать наложение прозрачным. Я читал, что после этого, вероятно, будут проблемы с качеством.

Есть ли более простой подход, на который я должен обратить внимание?

Я понимаю, что скорость рендеринга не будет фантастической, однако я не хочу требовать отдельного приложения для ПК для рендеринга видео.


person Talic    schedule 22.07.2014    source источник


Ответы (2)


Используйте AVAssetReader для записанного видео. Получите CMSampleBufferRef, получите метку времени, отрисуйте время в буфере выборки, запишите буфер в AVAssetWriterInputPixelBufferAdaptor. Аналогичный подход для записываемого видео.

person Ivan Rysev    schedule 18.12.2014

Используйте протокол AVVideoCompositing https://developer.apple.com/library/mac/documentation/AVFoundation/Reference/AVVideoCompositing_Protocol/index.html

Это позволит вам получать покадровые обратные вызовы с пиксельными буферами, чтобы делать то, что вы хотите.

С помощью этого протокола вы сможете взять один кадр и наложить на него кого угодно. Взгляните на этот пример — https://developer.apple.com/library/ios/samplecode/AVCustomEdit/Introduction/Intro.html, чтобы узнать, как обрабатывать покадровые модификации. Если вы воспользуетесь преимуществами протокола AVVideoCompositing, вы можете установить пользовательский видеокомпозитор и видеокомпозицию на вашем AVPlayerItem и AVExportSession для рендеринга/экспорта того, что вы хотите.

person Jonathan    schedule 07.02.2015