ios didOutputSampleBuffer отбрасывает первые несколько кадров
Я создаю приложение, которое должно записывать видео и аудио, используяAVCaptureVideoDataOutputSampleBufferDelegate
функции, которые я использую:
func captureOutput(_ captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, from connection: AVCaptureConnection!)
{
self.captureQueue.async {
if !self.isCapturing
{
return
}
var isVideo = true
if connection != self.videoConnection
{
isVideo = false
}
self.encoder!.encodeFrame(sampleBuffer: sampleBuffer, isVideo: isVideo)
}
}
и функция кодирования кадра:
func encodeFrame(sampleBuffer : CMSampleBuffer , isVideo : Bool)
{
if (CMSampleBufferDataIsReady(sampleBuffer))
{
if self.writer.status == .unknown
{
print("INIT")
let startTime = CMSampleBufferGetPresentationTimeStamp(sampleBuffer)
self.writer.startWriting()
self.writer.startSession(atSourceTime: startTime)
}
if self.writer.status == .failed
{
print("writer failed : \(self.writer.error!)")
}
if isVideo
{
if self.writerVideoInput.isReadyForMoreMediaData
{
if self.writerVideoInput.append(sampleBuffer)
{
print("writing video")
}
else
{
print("failed to append video")
}
}
else
{
print("video input data isn't ready ")
}
}
else
{
if self.writerAudioInput.isReadyForMoreMediaData
{
if self.writerAudioInput.append(sampleBuffer)
{
print("writing audio")
}
else
{
print("failed to append audio")
}
}
else
{
print("audio input isn't ready")
}
}
}
else
{
print("sample buffer isnt ready ")
}
}
проблема в том, что когда я начинаю запись (устанавливая флаг isCapturing в значение true), первые несколько кадров сбрасываются (причина - FrameWasLate), в документации Apple говорится, что это происходит потому, что sampleBuffer освобождается недостаточно быстро!, но все, что я делаю, это инициализацияAvassetwriter
ничего более!,
Я пытался поместить функцию кодирования в последовательную очередь, но она не сработала! в чем дело?!