Вы должны декодировать и перекодировать поток, пропуская кадры. Просто уменьшив вдвое временные метки в видео со скоростью 60 кадров в секунду, вы получите видео со скоростью 120 кадров в секунду.
Имейте в виду, что необработанный видеопоток H.264 не имеет встроенных временных меток. Оболочка .mp4, проанализированная MediaExtractor и добавленная MediaMuxer, содержит информацию о времени. Интерфейсы MediaCodec, кажется, принимают и создают отметку времени презентации, но в основном они просто передают ее, чтобы помочь вам сохранить отметку времени, связанную с правильным кадром - кодировщик может переупорядочивать кадры. (Некоторые кодировщики просматривают метки времени, чтобы попытаться достичь цели скорости передачи данных, поэтому вы не можете передавать фиктивные значения.)
Вы можете сделать что-то вроде примера DecodeEditEncode. Когда декодер вызывает releaseOutputBuffer()
, вы просто передаете "false" для аргумента рендеринга в каждом втором кадре.
Если вы принимаете видеокадры из какого-либо другого источника, например виртуального дисплея для записи экрана, вы не можете передать поверхность кодировщика непосредственно на дисплей. Вам нужно будет создать SurfaceTexture, создать Открывайте его, а затем обрабатывайте кадры по мере их поступления. Пример DecodeEditEncode делает именно это, модифицируя каждый кадр с помощью шейдера GLES.
Однако запись экрана представляет дополнительную трудность. Кадры с виртуальных дисплеев поступают по мере их создания, а не с фиксированной частотой кадров, что дает видео с переменной частотой кадров. Например, у вас может быть такая последовательность кадров:
[1] [2] <10 seconds pass> [3] [4] [5] ...
Хотя большинство кадров поступают с разницей в 16,7 мс (60 кадров в секунду), бывают промежутки, когда дисплей не обновляется. Если ваша запись захватывает каждый второй кадр, вы получите:
[1] <10+ seconds pass> [3] [5] ...
В итоге вы останавливаетесь на 10 секунд не на том кадре, что может бросаться в глаза, если между 1 и 2. Чтобы эта работа работала правильно, требуется некоторый интеллект в отбрасывании кадров, например. повторение предыдущего кадра по мере необходимости для создания видео с постоянной частотой кадров 30 кадров в секунду.
person
fadden
schedule
22.06.2015