Я работаю над приложением для редактирования видео для iPhone / iPod Touch. Мое приложение просто просит пользователя выбрать одно из уже существующих видео в каталоге прокрутки камеры, затем кадр за кадром изменяет значения пикселей и снова сохраняет под другим именем в каталоге прокрутки камеры. Поскольку обработка видео может быть довольно продолжительной, мне действительно нужно реализовать какую-то функциональность, чтобы возобновить ранее начатый сеанс (т. Е. Когда обработка видео достигает 30% от общей длины видео, и пользователь нажимает кнопку «домой» (или происходит телефонный звонок), когда мое приложение возвращается на передний план, обработка видео должна начинаться с 30%, а не с начала).
Наиболее важные части моего кода (немного упрощены, чтобы быть более читабельными):
AVAssetReader* assetReader = [[AVAssetReader alloc] initWithAsset:sourceAsset error:&error];
NSArray* videoTracks = [sourceAsset tracksWithMediaType:AVMediaTypeVideo];
AVAssetTrack* videoTrack = [videoTracks objectAtIndex:0];
AVAssetReaderTrackOutput* assetReaderOutput = [[AVAssetReaderTrackOutput alloc] initWithTrack:videoTrack
[assetReader addOutput:assetReaderOutput]);
[assetReader addOutput:assetReaderOutput];
[mVideoWriter startWriting]
[mAssetReader startReading]
[mVideoWriter startSessionAtSourceTime: kCMTimeZero];
mediaInputQueue = dispatch_queue_create("mediaInputQueue", NULL);
[writerInput requestMediaDataWhenReadyOnQueue:mediaInputQueue usingBlock:^{
while (mWriterInput.readyForMoreMediaData) {
CMSampleBufferRef nextBuffer = [mAssetReaderOutput copyNextSampleBuffer];
if (nextBuffer) {
// frame processing here
} // if
} // while
}]; // block
// when done saving my video to camera roll directory
Я слушаю методы обратного вызова делегата моего приложения, такие как applicationWillResignActive, applicationWillEnterForeground, но я не уверен, как правильно их обрабатывать. Что я уже пробовал:
1) [AVAssetWriter start / endSessionAtSourceTime], к сожалению, остановка и запуск во время представления последнего кадра не работали для меня
2) сохранение «вручную» каждой части фильма, которая была обработана, и когда обработка достигает 100% слияния всех из них с помощью AVMutableComposition, это решение, однако, иногда дает сбой в очереди отправки
Было бы здорово, если бы кто-нибудь дал мне несколько советов, как это должно быть сделано правильно ...