自定义构建GStreamer使之包含你应用需要的功能

原文链接:Customize GStreamer build with only the features needed for your application 由Jean-Luc Aufranc撰写。

由于全球软件咨询公司 Collabora 和华为之间的合作,现在构建GStreamer时可以只使用特定应用程序所需的功能了。这样可以减少那些存储空间受限的嵌入式系统二进制文件的大小。

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

自定义构建的Gstreamer
自定义构建的Gstreamer

其实,这次Collabora公司的Gstreamer是在去年 9 月发布的 GStreamer 1.18 基础上构建的。此次又构建了一项新功能,这个新功能可以将GStreamer整体构建到单独一个名为gstreamer-full并包含所有的库的共享库中,该共享库同时也包含插件和其他依赖项,例如 GLib。该公司解释说,gst-build 已经提供了要构建插件的选项,通过使用 gstreamer-full 库,可以使用-Dgst-full-libraries=来选择最终库包含哪些库。然后根据配置和可用的依赖项自动包含插件。下面是一个示例:


所有这些都已经包含在 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:


你们可以在他们的公告中找到有关 Collabora 公司实施的更多详细信息。
最终整个文件就只有 3.2 MB 的大小了,或者说大小减少了 93.5%。还是十分不错的。

分享这篇文章
订阅评论
提醒
0 评论
最旧
最新 最多投票
内联反馈
查看所有评论