我已成功设置AVAssetWriter以录制并将视频保存到我的相机胶卷。唯一的问题是录制视频的第一帧是空白帧。有没有办法解决这个问题?到底是怎么回事?
答案 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)
}
}
}
}