1

我想要一个新线程,因为我喜欢发布一些代码,小评论部分不会这样做。

感谢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];

}

4

0 回答 0