После полутора лет разработки состоялся релиз GStreamer 1.20, написанного на языке Си кроссплатформенного набора компонентов для создания широкого спектра мультимедиа приложений, от медиаплееров и конвертеров аудио/видео файлов, до VoIP-приложений и систем потокового вещания. Код GStreamer распространяется под лицензией LGPLv2.1. Одновременно доступны обновления плагинов gst-plugins-base 1.20, gst-plugins-good 1.20, gst-plugins-bad 1.20, gst-plugins-ugly 1.20, а также обвязка gst-libav 1.20 и сервер потокового вещания gst-rtsp-server 20. На уровне API и ABI новый выпуск обратно совместим с веткой 1.0. Бинарные сборки в скором времени будут подготовлены для Android, iOS, macOS и Windows (в Linux рекомендуется использовать пакеты из дистрибутива).
Ключевые улучшения GStreamer 1.20:
- Разработка на GitLab переведена на использование единого репозитория, общего для всех модулей.
- Добавлена новая высокоуровневая библиотека GstPlay, которая пришла на смену API GstPlayer и предлагает сходные функции для воспроизведения контента, отличающиеся использованием для уведомления приложений шины сообщений вместо сигналов GObject.
- Добавлена поддержка декодирования информации о прозрачности в формате WebM, которая позволяет воспроизводить видео VP8/VP9 с прозрачными областями.
- В профили кодирования добавлена поддержка настройки дополнительных свойств, специфичных для приложений.
- В Compositor реализована поддержка преобразования и смешивания видео в многопоточном режиме.
- В классах depayloader и payloader унифицирована поддержка работы с дополнительными заголовками RTP (RTP Header Extensions).
- Добавлена поддержка механизма упреждающей коррекции ошибок SMPTE 2022-1 2-D (Forward Error Correction).
- В encodebin и transcodebin для кодеков VP8, VP9 и H.265 реализован умный режим кодирования (“smart encoding”), при котором перекодировка выполняется только при необходимости, а в остальное время выполняется проброс имеющегося потока.
- Обеспечена совместимость плагина souphttpsrc c libsoup2 и libsoup3.
- Добавлена возможность декодирования входных данных на уровне промежуточных кадров (sub-frame), что позволяет начать декодирование не дожидаясь получения полного кадра. Поддержка данной оптимизации задействована в декодировщиках OpenJPEG JPEG 2000, FFmpeg H.264 и OpenMAX H.264/H.265.
- При декодировании видео для протоколов RTP, WebRTC и RTSP обеспечена автоматическая обработка потери пакетов, повреждения данных и запросов ключевых кадров.
- В упаковщики медиаконтейнеров mp4 и Matroska добавлена поддержка изменения данных кодека на лету, что позволяет изменять профиль, уровень и разрешение для входных потоков H.264/H.265.
- Добавлен режим создания фрагментированных медиаконтейнеров mp4.
- В порт на базе WPE (WebKit Port for Embedded) добавлена поддержка звука.
- Добавлена возможность использования CUDA для преобразования цветового пространства, масштабирования элементов и загрузки элементов.
- Для элементов OpenGL glupload и gldownload добавлена поддержка памяти NVMM (NVIDIA Memory Module).
- Улучшена поддержка WebRTC.
- Предложен новый плагин для VA-API (Video Acceleration API), поддерживающий больше декодировщиков и элементов постпроцессинга.
- В API AppSink добавлена поддержка событий в дополнение к буферам и спискам буферов.
- В AppSrc добавлены дополнительные настройки внутренних очередей.
- Обновлены привязки на языке Rust и добавлено 26 новых плагинов, написанных на Rust (gst-plugins-rs).
- Добавлены элементы aesdec и aesenc для шифрования и расшифровки с использование алгоритма AES.
- Добавлены элементы fakeaudiosink и videocodectestsink для тестирования и отладки.
- Улучшены средства для создания минималистичных сборок GStreamer.
- Добавлена возможность сборки с FFmpeg 5.0.
- Для Linux реализованы варианты кодеков MPEG-2 и VP9, работающих без сохранения состояния (Stateless).
- Для Windows в декодировщик на базе Direct3D11/DXVA добавлена поддержка AV1 и MPEG-2.