Gstreamer 基础知识
1. Gstreamer 组件
- 创建一个 Gstelement 办法是借助于GstElementFactory 工厂对象。
// mad 是工厂对象的名称 decoder 是创建出element 的名字。
element = gst_element_factory_make("mad","decoder")
if (!element)
{
g_print("Faild to create element of type mad. \n")
}
-
销毁一个 Gstelement , 当创建的element 不再使用时 需要及时销毁并释放资源。此时需要借用gst_element_unref() 函数释放占用的资源。
gst_element_unref(element);
-
对 组件的属性的操作
Gstreamer 使用了与Gobject 相同的机制来对属性进行管理,包括查询,设置,和读取。
-
对 name 属性的操作
gst_object_set_name() gst_object_get_name() g_object_get(GST_OBJECT(element),"name",&name,NULL);
-
2. Bin 柜子
bin 是一组 element 的容器。 可以利用容器特性 把多个元件组合成一个逻辑单元。
在Gstreamer 应用程序中 常用的两种Bin 为:
- GstPipeline
- GstThread 线程
1 如何创建 一个 Bin
pipeline = gst_pipeline_new("pipeline_name")
GstElement *bin;
bin = gst_element_factory_make("mad","decoder");
gst_bin_add(GST_BIN(bin),element);
2 如何把元素添加进 Bin 中。
gst_bin_add();
3 在箱柜中查询特定的原件。
gst_bin_get_by_name(GST_BIN(bin),"decoder");
4 如何将元素从柜子中移除。
gst_bin_remove(GST_BIN(bin),element);
3 Pad(接头)
pad 是element 连接时 夹在中间的 数据滤网。
[src]![sink src]![sink]
-
如何给一个Element获取一个pad
Gstpad* srcpad; srcpad = gst_element_get_pad(element,"src");
-
查询element 中所有的pad
GList* pads; pads = gst_element_get_pad_list(element); while(pads) { GstPad *pad = GST_PAD(pads->data); }