Включить кодирование B-кадров в MediaCode - PullRequest
0 голосов
/ 14 сентября 2018

Все,

Я использую класс MediaCodec для генерации видео / AVC видео потока.потоковое кодирование в порядке, но я хочу использовать B-кадры для лучшего сжатия.Хотя я установил профиль AVCProfileHigh, кодер не генерирует B-кадры.Видеопоток имеет только I и P кадры.

Ниже приведена конфигурация профиля мультимедиа.

mFormat.setInteger (MediaFormat.KEY_PROFILE, MediaCodecInfo.CodecProfileLevel.AVCProfileHigh);

Имеет MediaCoderподдержка B кадров ??Если да, то мотыга для настройки кадров B.

Ответы [ 2 ]

0 голосов
/ 25 апреля 2019

Это зависит от устройства.Android O и P на короткое время автоматически включили B-кадры для кодирования AVC High Profile, но во многих приложениях произошел сбой, так как они не ожидали неупорядоченных кадров, поэтому вскоре после запуска он отключился.Также MediaMuxer вышел из строя на некоторых потоках стресса с B-кадрами (например, если B-кадр ссылается на кадр в течение 1 секунды в будущем).Это исправлено в Android Q, хотя обратная ссылка по-прежнему ограничена 30 минутами.

Технически приложения могут получать B-кадры с ключом формата MediaFormat.KEY_OUTPUT_REORDER_DEPTH (после установки высокого профиля), но поддержка этогоне требуется для устройств и не подключается в AOSP.

0 голосов
/ 16 сентября 2018

Нет гарантии, что все устройства будут поддерживать его, но некоторые устройства могут.

Однако, по крайней мере, в более ранних версиях Android вам приходилось устанавливать параметр уровня одновременно, если вы пытались установить параметр профиля, иначе он не будет использоваться. См. https://stackoverflow.com/a/26293422/3115956 для более подробной информации об этом. С настройкой параметра level вы должны выбрать достаточно высокий уровень для поддержки выбранного разрешения и частоты кадров.

...