0

我已使用AVCaptureVideoDataOuputAVAssetWriter錄製了相機的實時視頻,但所得視頻沒有持續時間。任何人都可以給出一個簡要的想法或總體方向的一點來獲得持續工作?持續時間不會顯示在視頻

+0

您是否將[AVAssetWriter startSessionAtSourceTime]設置爲第一個樣本緩衝區的PTS?你打電話給[AVAssetWriter finishWriting]嗎?你應該顯示一些代碼。 –

回答

2

需要做的是定義一個初始的CMTime

self.time = CMMakeTime(0, 30 /* some frame time */); 

然後

[instanceAVAssetWriter setSessionAtSourceTime:self.time]; 

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; 
+0

甚至無法描述這個答案帶來的挫折。謝謝! – kleezy

0

這是我做的這類似於NebulaFox的答案。此代碼用於捕獲視頻數據的回調。作者已經被初始化和設置。

switch (writer.status) { 
     case AVAssetWriterStatusUnknown: 

      startTime = CMSampleBufferGetPresentationTimeStamp(sample); 

      [writer startWriting]; 
      [writer startSessionAtSourceTime:startTime]; 

      if (writer.status != AVAssetWriterStatusWriting) { 
       break ; 
      } 
....