AVCaptureVideoDataOuput
및 AVAssetWriter
을 사용하여 카메라의 라이브 비디오를 녹화했지만 결과 비디오에는 지속 시간이 없습니다. 누구든지 간단한 아이디어 나 일반적인 방향으로 포인트를 주면서 일할 수 있습니까?비디오 이후에 길이가 표시되지 않습니다.
0
A
답변
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 ;
}
....
[AVAssetWriter startSessionAtSourceTime]을 첫 번째 샘플 버퍼의 PTS로 설정 하시겠습니까? [AVAssetWriter finishWriting]을 호출하고 있습니까? 몇 가지 코드를 보여줘야합니다. –