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 ничего более!,

Я пытался поместить функцию кодирования в последовательную очередь, но она не сработала! в чем дело?!

0 ответов

Другие вопросы по тегам