我使用AVCaptureVideoDataOuput
和AVAssetWriter
从相机录制了实时视频,但生成的视频没有持续时间。任何人都可以在总体方向上给出一个简短的想法或一点,以使持续时间有效吗?
答案 0 :(得分:2)
需要做的是定义初始CMTime
。
self.time = CMMakeTime( 0, 30 /* some frame time */ );
然后
[instanceAVAssetWriter setSessionAtSourceTime:self.time];
on captureOutput:didOutputSampleBuffer:fromConnection:
CMSampleBufferRef sb;
CMSampleTimingInfo sampleTimingInfo;
sampleTimingInfo.duration = CMTimeMake(1,30);
sampleTimingInfo.presentationTimeStamp = self.time;
sampleTimingInfo.decodeTimeStamp = kCMTimeInvalid;
CMSampleBufferCreateCopyWithNewTiming(kCFAllocatorDefault, sampleBuffer, 1, &sampleTimingInfo, &sb);
和结束
CFRelease( sb );
self.time.value += 1;
答案 1 :(得分:0)
这就是我所做的,类似于NebulaFox的回答。此代码位于用于捕获视频数据的回调中。作者已经初始化和设置。
switch (writer.status) {
case AVAssetWriterStatusUnknown:
startTime = CMSampleBufferGetPresentationTimeStamp(sample);
[writer startWriting];
[writer startSessionAtSourceTime:startTime];
if (writer.status != AVAssetWriterStatusWriting) {
break ;
}
....