第一次在这里问一个问题.我希望帖子清晰,示例代码格式正确.
我正在尝试AVFoundation和时间推移摄影.
我的目的是从iOS设备(我的iPod touch,版本4)的摄像机中抓取每个第N帧,并将每个帧写入文件以创建游戏中时光倒流.我正在使用AVCaptureVideoDataOutput,AVAssetWriter和AVAssetWriterInput.
问题是,如果我使用CMSampleBufferRef传递给
captureOutput:idOutputSampleBuffer:fromConnection:,每帧的回放是原始输入帧之间的时间长度.帧率为1fps.我希望得到30fps.
我试过用了
CMSampleBufferCreateCopyWithNewTiming(),但随后将13帧写入文件后,
captureOutput:idOutputSampleBuffer:fromConnection:停止被叫.界面处于活动状态,我可以点击按钮停止捕获并将其保存到照片库进行播放.它看起来像我想要的那样回放,30fps,但它只有那13帧.
如何实现30fps播放的目标?如何判断应用程序丢失的原因以及原因?
我已经放置了一个名为useNativeTime的标志,因此我可以测试这两种情况.当设置为YES时,我得到所有我感兴趣的帧,因为回调不会"迷路".当我将该标志设置为NO时,我只处理了13帧,并且再也没有返回到该方法.如上所述,在这两种情况下我都可以播放视频.
谢谢你的帮助.
这是我正在尝试重新定时的地方.
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection
{
BOOL useNativeTime = NO;
BOOL appendSuccessFlag = NO;
//NSLog(@"in captureOutpput sample buffer method");
if( !CMSampleBufferDataIsReady(sampleBuffer) )
{
NSLog( @"sample buffer is not ready. Skipping sample" );
//CMSampleBufferInvalidate(sampleBuffer);
return;
}
if (! [inputWriterBuffer isReadyForMoreMediaData])
{
NSLog(@"Not ready for data.");
}
else {
// Write every first frame of n frames (30 native from camera).
intervalFrames++;
if (intervalFrames > …Run Code Online (Sandbox Code Playgroud)