我想要一个新线程,因为我喜欢发布一些代码,小评论部分不会这样做。
感谢peter Deweese之前,但我仍然有问题..
我有一个循环,截屏 30 次。每次我得到一张图像时,我都会调用 convert 将该图像附加到视频中。之后,关闭视频文件
所以,我做错了什么。在这个特定的我没有收到视频
[自我初始化视频];for (index=0; index<30; index++) {
[self.view.layer renderInContext:ctx];
global_image = UIGraphicsGetImageFromCurrentImageContext();
//Once I have UIImageview of global_image I call convert
[self convert];
} [自我结束视频];
///////////////////////////////////////// //////////
-(void) init_video { ........视频设置和设置适配器
AVAssetWriterInputPixelBufferAdaptor * avAdaptor = [AVAssetWriterInputPixelBufferAdaptorassetWriterInputPixelBufferAdaptorWithAssetWriterInput:writerInput sourcePixelBufferAttributes:NULL];
[videoWriter addInput:writerInput]; [videoWriter startWriting];
[videoWriter startSessionAtSourceTime:kCMTimeZero]; }
///////////////////////////////////////// ///
-(void) convert {.............获取图像像素缓冲区
CMTime 帧时间 = CMTimeMake(1, 15);
CMTime lastTime=CMTimeMake(index, 15); //索引是从上面循环的0到29
CMTime presentTime=CMTimeAdd(lastTime, frameTime);
//根据 Peter DeWeese 的说法,需要调用两次才能使其工作。
[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];
}