由于全球软件咨询公司 Collabora 和华为之间的合作,现在构建GStreamer时可以只使用特定应用程序所需的功能了。这样可以减少那些存储空间受限的嵌入式系统二进制文件的大小。
可能有一些人不了解Gstreamer,Gstreamer其实是一个非常流行的开源多媒体框架,广泛用于各种项目和产品中。它拥有很多的功能,这些功能分布在超过 30 个库中,而且Gstreamer在 230 个插件中有超过 1600 多个元素。数量如此繁多的功能在台式PC和大多数智能手机上应用时都不是问题,但对于某些系统来说,Gstreamer二进制的文件可能太大了。直到现在也还没有一种简单、好用的方法来为特定应用程序定制构建GStreamer。不过,Collabora 公司现在更改的代码可以让gst-build生成最小的 GStreamer 构建了。这也算是一个不错的变化了。

其实,这次Collabora公司的Gstreamer是在去年 9 月发布的 GStreamer 1.18 基础上构建的。此次又构建了一项新功能,这个新功能可以将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 |
所有这些都已经包含在 Gstreamer 1.18 中。那么 Collabora 究竟做了什么?其实他们向 Gstreamer 菜单添加了五个新选项从而提供了更好的粒度,如下所示:
重要的部分是-Dauto_features=disabled行,它禁用自动特性选择,然后允许我们在选定的插件中选择特定的特性。
- gst-full-plugins – 选择你想要包含的插件。默认情况下,所有插件都会在被构建过程中启用,并且必须至少传递一个插件以避免构建所有插件。
- gst-full-elements – 使用 plugin1:elt1,elt2;plugin2:elt1格式选择element(s)
- gst-full-typefind-functions – 使用plugin1:tf1,tf2;plugin2:tf1格式选择 typefind(s)
- gst-full-device-providers – 使用plugin1:dp1,;dp2;plugin2:dp1格式选择decide-provider(s)
- gst-full-dynamic-types – 使用plugin1:dt1,;dt2;plugin2:dt1格式选择dynamic-type(s)
Element、typefind、device-provider 和 dynamic type 都是Gstreamer 文档中定义的插件功能。
为了展示该解决方案,Collabora公司 首先构建了 Gsteamer ,然后将所有选项生成一个 49.2 MB 的 gstreamer-full 静态库,然后是仅包含三个元素的自定义构建,即 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 |
你们可以在他们的公告中找到有关 Collabora 公司实施的更多详细信息。
最终整个文件就只有 3.2 MB 的大小了,或者说大小减少了 93.5%。还是十分不错的。

文章翻译者:Jacob,嵌入式系统测试工程师、RAK高级工程师,物联网行业多年工作经验,熟悉嵌入式开发、测试各个环节,对不同产品有自己专业的分析与评估。