0

Я записал видео в реальном времени с камеры с помощью AVCaptureVideoDataOuput и AVAssetWriter, но в результате видео не имеет продолжительности. Может ли кто-нибудь дать краткую идею или точку в общем направлении, чтобы получить продолжительность работы?Продолжительность не отображается после видео

+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 ; 
      } 
....   
Смежные вопросы