Я хочу новую ветку, потому что мне нравится публиковать некоторые коды, небольшая секция комментариев не сделает этого.
Спасибо, Питер Дьюис, но у меня все еще есть проблемы.
У меня есть цикл, получающий снимок экрана 30 раз. Каждый раз, когда я получаю изображение, я вызываю команду convert, чтобы добавить это изображение в видео. После этого закройте видеофайл
Итак, все, что я сделал не так. на этом конкретном я не получаю видео
[self init_video];
для (индекс = 0; индекс <30; индекс ++) {</p>
[self.view.layer renderInContext:ctx];
global_image = UIGraphicsGetImageFromCurrentImageContext();
//Once I have UIImageview of global_image I call convert
[self convert];
}
[self end_video];
/////////////////////////////////////////////// /////////////
- (void) init_video
{
........ видео настройка и настройка адаптера
AVAssetWriterInputPixelBufferAdaptor *
avAdaptor = [AVAssetWriterInputPixelBufferAdaptor assetWriterInputPixelBufferAdaptorWithAssetWriterInput: writerInput sourcePixelBufferAttributes: NULL];
[videoWriter addInput: writerInput];
[videoWriter startWriting];
[videoWriter startSessionAtSourceTime: kCMTimeZero];
}
/////////////////////////////////////////////// //////
- (void) конвертировать
{.......... получение пиксельного буфера изображения
CMTime frameTime = CMTimeMake (1, 15);
CMTime lastTime = CMTimeMake (index, 15); // индекс от 0 до 29 цикла выше
CMTime presentTime = CMTimeAdd (lastTime, frameTime);
// по словам Питера ДеВиса, нужно дважды позвонить, чтобы все заработало.
[avAdaptor appendPixelBuffer: pixelBuffer withPresentationTime: lastTime];
[avAdaptor appendPixelBuffer: pixelBuffer withPresentationTime: presentTime];
}
/////////////////////////////////////////////// ///////////
- (void) end_video
{
[writerInput markAsFinished];
//want 2 seconds of video, with 15 frame for each seconds.
[videoWriter endSessionAtSourceTime:CMTimeMake(30, 15)];
[videoWriter finishWriting];
}