Я использую AVSampleBufferDisplayLayer для отображения CMSampleBuffers, которые поступают через сетевое соединение в формате h.264. Воспроизведение видео является плавным и работает правильно, однако я не могу контролировать частоту кадров. В частности, если я вставляю 60 кадров в секунду в AVSampleBufferDisplayLayer, он отображает эти 60 кадров, даже если видео записывается при 30 FPS.Установите скорость, с которой AVSampleBufferDisplayLayer отображает буферы с образцами
При создании буферов выборки можно установить метку времени представления, передав массив данных синхронизации в CMSampleBufferCreate (информация о синхронизации отсутствует в потоке h.264, но может быть рассчитана или передана в виде контейнера) , Временные метки представления, которые я установил, составляют около 0,033 секунды, а продолжительность составляет 0,033, но уровень отображения по-прежнему отображает столько кадров в секунду, сколько может.
Есть два способа Епдиеих буферов на AVSampleBufferDisplayLayer: «стесненный» по телефону - [AVSampleBufferDisplayLayer enqueueSampleBuffer:] всякий раз, когда буфер готов, или «непринужденный» по телефону - [AVSampleBufferDisplayLayer requestMediaDataWhenReadyOnQueue: usingBlock:] и enqueuing буферов в это блок. Я пробовал оба, но даже второй метод отображает буферы так быстро, как это возможно - например, если у меня есть 300 кадров, стоящих в очереди на принимающей стороне, то при первом запуске блока в вышеописанном методе readyForMoreMediaData остается верным независимо от того, сколько буферы получают в очереди, и все они отображаются за очень короткое время.
Такое поведение похоже на то, что можно было бы ожидать, если в CMSampleBuffer было установлено вложение kCMSampleAttachmentKey_DisplayImmediately, однако в настоящее время оно НЕ установлено (и значение по умолчанию - false).
Я попытался установить слой controlTimeBase, но он, похоже, не имел никакого эффекта. Я испытываю недостаток в других вещах, чтобы попытаться найти примеры в Интернете. Кто-нибудь знает, как можно управлять частотой кадров, при которой AVSampleBufferDisplayLayer отображает фреймы?
Вы когда-нибудь находили решение для этого? – Kaleb
Прошу прощения, что я не –