AVAssetWriter在Swift中录制视频?

时间:2017-01-30 03:46:27

标签: swift xcode avassetwriter

我已成功设置AVAssetWriter以录制并将视频保存到我的相机胶卷。唯一的问题是录制视频的第一帧是空白帧。有没有办法解决这个问题?到底是怎么回事?

1 个答案:

答案 0 :(得分:2)

你在对视频帧进行任何操作吗?在我的情况下,我在写入之前调整了视频帧的大小。在这种情况下,首先写入音频帧,然后在几帧之后写入视频帧。因此,前几帧在预览中显示为白色。但在视频播放中几乎没有注意到。

解决方案:

在您使用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)
            }

        }

    }

}
相关问题