Благодаря партнерству между Collabora и Huawei теперь можно создать Gstreamer только с функциями, необходимыми для конкретного приложения, уменьшая размер двоичного файла для встраиваемых систем с ограниченным пространством.
Gstreamer – очень популярный мультимедийный фреймворк с открытым исходным кодом, используемый в большом количестве проектов и продуктов, с впечатляющим количеством функций, охватывающих более 30 библиотек и более 1600 элементов в 230 плагинах. Это не проблема для настольных ПК и большинства смартфонов, но размер двоичного файла может быть слишком большим для некоторых систем, и до недавнего времени было непросто настроить сборку GStreamer для конкретного приложения. Но Collabora изменила код, чтобы позволить gst-build генерировать минимальную сборку GStreamer.
Компания основывалась на новых свойствах GStreamer 1.18, выпущенной в сентябре 2020 года, которая позволяет собрать всю GStreamer в единую общую библиотеку с именем gstreamer-full со всеми библиотеками, а также с плагинами и другими зависимостями, такими как GLib. Компания объясняет, что gst-build уже предоставляет опции для выбора подключаемых модулей для сборки, но с помощью библиотеки gstreamer-full можно точно выбрать, какие библиотеки будут включены в окончательную библиотеку с расширением -Dgst-full-libraries=
. Затем плагины автоматически включаются в соответствии с конфигурацией и доступными зависимостями. Вот пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
$ meson build-gst-full \ --buildtype=release \ --strip \ --default-library=static \ --wrap-mode=forcefallback \ -Dauto_features=disabled \ -Dgst-full-libraries=app,video,player \ -Dbase=enabled \ -Dgood=enabled \ -Dbad=enabled \ -Dgst-plugins-base:typefind=enabled \ -Dgst-plugins-base:app=enabled \ -Dgst-plugins-base:playback=enabled \ -Dgst-plugins-base:volume=enabled \ -Dgst-plugins-base:videoconvert=enabled \ -Dgst-plugins-base:audioconvert=enabled \ -Dgst-plugins-good:audioparsers=enabled \ -Dgst-plugins-good:isomp4=enabled \ -Dgst-plugins-good:deinterlace=enabled \ -Dgst-plugins-good:audiofx=enabled \ -Dgst-plugins-bad:videoparsers=enabled |
Важной частью является строка -Dauto_features=disabled
, которая отключает автоматический выбор функций, а затем позволяет нам выбирать определенные функции в выбранных плагинах.
Все это уже включено в Gstreamer 1.18. Так что же именно сделала Collabora? Они добавили пять новых опций в меню Gstreamer, чтобы обеспечить лучшую детализацию, а именно:
- gst-full-plugins – выберите плагин, который хотите включить. По умолчанию все плагины будут включены в процессе сборки, и необходимо пропустить хотя бы один, чтобы избежать сборки всех.
- gst-full-elements – выберите element, используя
plugin1:elt1,elt2;plugin2:elt1
- gst-full-typefind-functions – выберите typefind, используя
plugin1:tf1,tf2;plugin2:tf1
- gst-full-device-suppliers – выберите decide-provider, используя
plugin1:dp1,;dp2;plugin2:dp1
- gst-full-dynamic-types – выберите dynamic-type, используя
plugin1:dt1,;dt2;plugin2:dt1
Element, typefind, device-provider и dynamic type – все это функции плагина, которые определены в документации Gstreamer.
Чтобы продемонстрировать решение, Collabora сначала построила Gsteamer со всеми параметрами, в результате чего будет получена статическая библиотека с полным gstreamer объемом 49,2 МБ, за которой следует адаптированная сборка всего с тремя элементами, а именно filesrc, fakesink иidentity:
1 2 |
$ meson build-gst-full --reconfigure -Dgst-full-plugins=coreelements '-Dgst-full-elements=coreelements:filesrc,fakesink,identity' '-Dgst-full-libraries=[]' $ ninja -C build-gst-full |
В итоге получился размер всего 3,2 МБ, или на 93,5% меньше. Не плохо!
Более подробную информацию о реализации Collabora вы найдете в объявлении в блоге.
Выражаем свою благодарность источнику из которого взята и переведена статья, сайту cnx-software.com.
Оригинал статьи вы можете прочитать здесь.