Как записать экран в iOS с пользовательской частотой кадров? - PullRequest
0 голосов
/ 13 апреля 2020

Я пытался сделать снимок экрана, используя Broadcast Extension со скоростью 30 кадров в секунду или 120 кадров в секунду. Ниже приведен код

        if lastSampleTime == nil{
            self.lastSampleTime = CMSampleBufferGetPresentationTimeStamp(sampleBuffer)
        }

        var sampleTimingInfo: CMSampleTimingInfo = CMSampleTimingInfo(duration: CMTime.invalid, presentationTimeStamp: CMTime(), decodeTimeStamp: CMTime.invalid)
        var newBuffer: CMSampleBuffer!  = nil

        CMSampleBufferGetSampleTimingInfo(sampleBuffer, at: 0, timingInfoOut: &sampleTimingInfo);

        sampleTimingInfo.duration = CMTimeMake(value: 1, timescale: self.frameRate!) // Specify new frame rate.
        sampleTimingInfo.presentationTimeStamp = CMTimeAdd(self.lastSampleTime!, sampleTimingInfo.duration)
        self.lastSampleTime = sampleTimingInfo.presentationTimeStamp

        let status: OSStatus = CMSampleBufferCreateCopyWithNewTiming(allocator: kCFAllocatorDefault, sampleBuffer: sampleBuffer, sampleTimingEntryCount: 1, sampleTimingArray: &sampleTimingInfo, sampleBufferOut: &newBuffer);

        if status == noErr {
            if sampleBufferType == .video{
                appendVideoBuffer(newBuffer)
            }
            else if sampleBufferType == .audioMic{
                appendAudioBuffer(newBuffer)
            }
        }

Но проблема в том, что когда я снимаю со скоростью 30 кадров в секунду, это замедляет видео, т.е. 7 секунд видео становится 17 секундами, а для 120 кадров в секунду 17 секунд видео становится 7 секундами или около того.

Как изменить частоту кадров при замедлении или ускорении видео ??

...