openh264
Библиотека для кодирования и декодирования видео в формате H.264, разработанная компанией Cisco. Она спроектирована для использования в приложениях реального времени, таких как WebRTC, и обеспечивает оптимальный баланс между производительностью и качеством сжатия.
Особенности
- поддержка кодирования и декодирования H.264;
- возможность работы с произвольным разрешением, не кратным 16x16;
- гибкий контроль над битрейтом: адаптивная квантизация (RC) или постоянная квантизация;
- поддержка многопоточного кодирования;
- временная масштабируемость до 4 уровней;
- пространственная симуляция до 4 разрешений с одного входа;
- поддержка кадров долгосрочного ссылания, MMCO и модификации списков ссылок;
- динамическое изменение битрейта, частоты кадров и разрешения во время работы.
Основные компоненты
OpenH264 предоставляет разработчикам два ключевых модуля — кодер и декодер, а также набор вспомогательных утилит (подробнее с документацией можно ознакомиться здесь).
Кодирование видео
Модуль кодирования реализует профиль Constrained Baseline и поддерживает расширенные сценарии, включая симуляцию и множественные слайсы.
Основные функции кодера:
- Управление битрейтом: постоянный битрейт (CBR), переменный битрейт (VBR) или постоянное качество (CRF) с адаптивной квантизацией.
- Слайсы: настройка количества слайсов — один на кадр, несколько на кадр, по числу макроблоков или по размеру в байтах.
- Масштабирование: пространственная симуляция (до 4 потоков разного разрешения) и временная масштабируемость (до 4 иерархических уровней).
- Динамическая перенастройка: изменение параметров кодирования (битрейт, FPS, разрешение) без пересоздания кодера.
- Долгосрочные ссылки: поддержка LTR-кадров для повышения устойчивости к потерям.
Декодирование видео
Декодер OpenH264 ориентирован на максимальную совместимость с потоком H.264 и эффективное восстановление после ошибок.
Ключевые особенности декодера:
- Устойчивость к ошибкам: улучшенные алгоритмы сокрытия ошибок (error concealment) с несколькими режимами работы.
- Парсинг без декодирования: режим
bParseOnly, позволяющий только разобрать битстрим без фактического декодирования. - Обработка LTR и MMCO: корректное восстановление ссылочных картинок при использовании долгосрочных ссылок.
- Информация о временных метках: возврат временных меток кадров в выходной структуре.
Поддерживаемые платформы и процессоры
OpenH264 доступна на большинстве современных платформ и использует аппаратные оптимизации для ускорения работы.
Процессорные архитектуры и оптимизации:
- x86/x86-64: MMX/SSE (без AVX, помощь приветствуется);
- ARM: NEON для ARMv7, AArch64 с NEON;
- Универсальный C/C++ fallback для любых других архитектур.
Масштабирование и многопоточность
Библиотека спроектирована для эффективного использования многоядерных процессоров и сценариев с множеством одновременных потоков видео.
Возможности масштабирования:
- Многопоточное кодирование: автоматическое распараллеливание по слайсам.
- Симуляция (Simulcast): одновременное кодирование одного исходного потока в несколько разрешений без дополнительных затрат на повторное чтение кадров.
- Временные уровни: иерархическая структура P-кадров для адаптации к меняющейся пропускной способности канала.
Управление параметрами кодирования
API OpenH264 позволяет тонко настраивать поведение кодера под конкретные задачи. Большинство параметров доступны через структуру SEncParamBase / SEncParamExt и могут изменяться динамически.
Основные настраиваемые параметры:
iTargetBitrate— целевой битрейт;fMaxFrameRate— максимальная частота кадров;iPicWidth/iPicHeight— разрешение;iRCMode— режим контроля скорости (RC_QUALITY_MODE,RC_BITRATE_MODE,RC_BUFFERBASED_MODE);iMultipleThreadIdc— количество потоков кодирования;bEnableFrameSkip— разрешение пропуска кадров для соблюдения битрейта (важно для RC);iSpatialLayerNum— количество пространственных слоёв для симуляции.