GStreamer Playback tutorial 学习笔记(八)

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 函数与知识点

  1. gst_plugin_feature_set_rank (GstPluginFeature * feature, guint rank) 功能:为插件功能指定一个rank,以便自动插入机制使用最合适的功能。

你可能感兴趣的:(GStreamer学习笔记,c++,GStreamer,webrtc,服务器)