0

AVCaptureVideoDataOuputAVAssetWriter을 사용하여 카메라의 라이브 비디오를 녹화했지만 결과 비디오에는 지속 시간이 없습니다. 누구든지 간단한 아이디어 나 일반적인 방향으로 포인트를 주면서 일할 수 있습니까?비디오 이후에 길이가 표시되지 않습니다.

+0

[AVAssetWriter startSessionAtSourceTime]을 첫 번째 샘플 버퍼의 PTS로 설정 하시겠습니까? [AVAssetWriter finishWriting]을 호출하고 있습니까? 몇 가지 코드를 보여줘야합니다. –

답변

2

수행해야 할 작업은 초기 CMTime을 정의하는 것입니다. 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

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

다음

[instanceAVAssetWriter setSessionAtSourceTime:self.time]; 

이 내가 NebulaFox의 대답에 유사하다 할 것입니다. 이 코드는 비디오 데이터를 캡처하기위한 콜백에 있습니다. 작성기가 이미 초기화되고 설정되었습니다.

switch (writer.status) { 
     case AVAssetWriterStatusUnknown: 

      startTime = CMSampleBufferGetPresentationTimeStamp(sample); 

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

      if (writer.status != AVAssetWriterStatusWriting) { 
       break ; 
      } 
....   
관련 문제