1 自定义playbin输出
视频解码加速API:
VAAPI(Video Acceleration API):最初由英特尔于2007年设计,针对基于Unix操作系统的X Window System,现在是开源的。现在它也通过dmabuf支持Wayland。它目前不仅限于Intel GPU,其他制造商也可以自由使用此API,例如Imagination Technologies或S3 Graphics。通过gstreamer-vaapi包对GStreamer进行访问。
OVD(Open Video Decode):AMD Graphics的另一个API,旨在为软件开发人员提供利用AMD Radeon显卡内部的Universal Video Decode(UVD)硬件的跨平台方法。当前不可用于GStreamer。
DCE(Distributed Codec Engine):德州仪器的开源软件库(“libdce”)和API规范,针对Linux系统和ARM平台。通过gstreamer-ducati插件对GStreamer进行访问。
Android MediaCodec:这是Android的API,用于访问设备的硬件解码器和编码器(如果可用)。通过gst-plugins-bad中的androidmedia插件进行访问。包括编码和解码。
Apple VideoTool Box Framework:苹果的硬件访问API可以通过包含编码器(vtenc元素)和解码器(vtdec元素)的applemedia插件进行访问。
Video4Linux:最新的Linux内核具有一个内核API,以标准方式公开硬件解码器,这现在由gst-plugins-good
中的v4l2插件支持。根据平台的不同,可以支持解码和编码。
1.1 硬件加速视频解码插件的内部工作原理
API通常提供多种功能,如视频解码、后处理或呈现解码帧。相应地,插件通常针对这些功能中的每一个提供不同的GStreamer元素,因此可以构建适应任何需求的管道。
1.2 更改硬件加速相关元素的rank
static void enable_factory (const gchar *name, gboolean enable) {
GstRegistry *registry = NULL;
GstElementFactory *factory = NULL;
registry = gst_registry_get_default ();
if (!registry) return;
factory = gst_element_factory_find (name);
if (!factory) return;
if (enable) {
gst_plugin_feature_set_rank (GST_PLUGIN_FEATURE (factory), GST_RANK_PRIMARY + 1);
}
else {
gst_plugin_feature_set_rank (GST_PLUGIN_FEATURE (factory), GST_RANK_NONE);
}
gst_registry_add_feature (registry, GST_PLUGIN_FEATURE (factory));
return;
}
2 函数与知识点
gst_plugin_feature_set_rank (GstPluginFeature * feature, guint rank)
功能:为插件功能指定一个rank
,以便自动插入机制使用最合适的功能。