2017-01-30 188 views

回答

1

你对视频帧有任何操纵吗?在我的情况下,我正在调整视频帧的大小,然后再编写它们。在这种情况下,首先写入音频帧,在几帧后写入视频帧。由于这个原因,前几帧在预览中显示为白色。但它在视频播放中几乎不明显。

解决方案:

跳过写音频帧,直到你使用avasssetwriter


推荐代码captureoutput

func captureOutput(_ captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection!) { 

    if CMSampleBufferDataIsReady(sampleBuffer) == false 
    { 
     // Handle error 
     return; 
    } 
    startTime = CMSampleBufferGetPresentationTimeStamp(sampleBuffer) 

    if videoWriter.status == AVAssetWriterStatus.Unknown { 
       videoWriter.startWriting() 
       videoWriter.startSessionAtSourceTime(startTime) 
       return 
     } 

    if videoWriter.status == AVAssetWriterStatus.Failed { 
     // Handle error here 
     return; 
    } 

    // Here you collect each frame and process it 

    if(recordingInProgress){ 

    if let _ = captureOutput as? AVCaptureVideoDataOutput { 

     if videoWriterInput.isReadyForMoreMediaData{ 
      videoWriterInput.append(sampleBuffer) 
      video_frames_written = true 
     } 
    } 
    if let _ = captureOutput as? AVCaptureAudioDataOutput { 
      if audioWriterInput.isReadyForMoreMediaData && video_frames_written{ 
       audioWriterInput.append(sampleBuffer) 
      } 

     } 

    } 

} 
+0

我想这可能工作写一个视频帧,但似乎即使我只在写入视频帧时写入音频帧,仍然存在一个白色帧,其中既没有视频也没有au dio被记录。还有其他建议吗? –

+0

你能分享录制的文件吗?可能是第一个samplebuffer的日志? – manishg

+0

以下是视频https://drive.google.com/file/d/0B2QAK-lm39WhdVlqa0hSY0tNaGM/view?usp=sharing的示例。录音机的设置方式是每隔一秒录制一个新的片段,但问题不在于此,因为在录制的第一秒内仍然存在空白帧,没有视频或音频。 –