Продолжая предыдущий вопрос о ASSETWriterInput для создания видео из UIImages по проблемам Iphone - PullRequest
1 голос
/ 24 октября 2010

Я хочу новую ветку, потому что мне нравится публиковать некоторые коды, небольшая секция комментариев не сделает этого.

Спасибо, Питер Дьюис, но у меня все еще есть проблемы.

У меня есть цикл, получающий снимок экрана 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];

}

...