一个Registry保存一组插件的元数据。
设计原理
GstRegistry对象是一个列表,此列表包含多个插件和操作插件的函数。每个GstPlugin与磁盘上的文件是一对一匹配的,并且可能会或可能不会在给定时间内加载插件。
插件信息的主要来源始终是插件文件本身。因此,应用程序想要查询指定插件的有关信息,或想要搜索满足指定条件的功能,主要的操作方法是加载每个插件并查看在默认注册表中搜集的结果信息。显然这是一个耗时的过程,因此我们将信息缓存在注册表文件中。缓存文件的格式和位置是gstreamer内部的。
在应用启动时,程序会在插件搜索路径中搜索插件,按照以下位置,顺序检查:
- 来自 --gst-plugin-path 命令行选项的位置
- GST_PLUGIN_PATH 环境变量
- GST_PLUGIN_SYSTEM_PATH 环境变量
- 默认位置(如果未设置 GST_PLUGIN_SYSTEM_PATH)。这些默认位置是:
$XDG_DATA_HOME/gstreamer-$GST_API_VERSION/plugins/
和$prefix/libs/gstreamer-$GST_API_VERSION/
。 $XDG_DATA_HOME默认为$HOME/.local/share
.
注册表缓存文件是从$XDG_CACHE_HOME/gstreamer-$GST_API_VERSION/registry-$ARCH.bin
(其中 $XDG_CACHE_HOME 默认为$HOME/.cache
)或GST_REGISTRY
env var 中列出的文件加载的 。更改注册表位置的原因之一是为了测试。如:
对于在插件搜索路径找到的每个插件, 缓存信息可能有3种可能:
- 缓存可能不包含有关给定文件的信息。
- 缓存可能有陈旧的信息。
- 缓存可能有当前信息。
在前两种情况下,加载插件并更新缓存文件。除了这些情况外,缓存中可能包含与当前进程无关的插件条目。这些被标记为对当前进程不可用。如果缓存因任何原因更新,则将其标记为dirty.
在初始化结束时,写出dirty缓存。检查每个条目以确保信息最低限度地有效。如果不是,则简单地删除该条目。
注意事项:
“缓存”和“注册表”是不同的概念。可以代表不同的插件集,由于各种原因,在初始化时,缓存存储在默认注册表中,与当前进程无关的插件用GST_PLUGIN_FLAG_CACHED位标记。这些插件在初始化结束时被删除。
原文地址:https://gstreamer.freedesktop.org/documentation/gstreamer/gstregistry.html?gi-language=c#GstRegistry