Я занимаюсь разработкой приложения, которое записывает видео с использованием 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
, который я установилкогда пользователь нажимает кнопку «Начать запись».