【发布时间】:2019-04-18 12:15:15
【问题描述】:
我正在开发一个使用 AVAssetWriter 录制视频的应用(源媒体是从captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) 输出的样本缓冲区。
我注意到第一次实例化我的AVAssetWriter,然后调用startWriting() 和startSession(atSourceTime: CMTime),会有大约 30 毫秒的延迟。这会导致屏幕上的视频预览暂时挂起,这也会导致视频的前几帧无法正确写入。
奇怪的是,如果我随后重新实例化我的 AVAssetWriter 并再次执行所有相同的步骤,那么从那时起一切正常。这只发生在第一次。
虽然可能太长而无法发布,但这是我确定发生错误的函数;
func insert(pixel buffer: CVPixelBuffer, with time: CMTime) {
// Check for unknown status
if fileWriter.status == .unknown {
guard startingVideoTime == nil else {
print("We've received an error setting the starting video time.")
return
}
startingVideoTime = time
if fileWriter.startWriting() {
fileWriter.startSession(atSourceTime: startingVideoTime!)
isRecording = true
}
}
// Append buffer
if videoInput.isReadyForMoreMediaData {
append(pixel: buffer, with: time)
isRecording = true
}
}
为了后代,我从我的captureOutput 调用上述函数,只有当我的self.isRecording = true 时才这样做,这是我在用户点击“开始录制”按钮时设置的。
【问题讨论】:
-
你解决了吗?其实我也面临同样的问题..谢谢你的回复
-
@bezoadam 还没有。还是想不通。我可以说当 AVAssetWriter 被实例化时我正在丢帧,这可能是产生可见“滞后”的原因,但仍然不知道为什么。
标签: ios swift avfoundation avassetwriter