gst_parse_launch()
gst_parse_launch()
是GstParse的一个函数,GstParse
允许开发者基于gst-launch-1.0
命令行形式创建一个新的pipeline。
注:相关函数采取了一些措施来创建动态管道。因此这样的管道并不总是可重用的(例如,将状态设置为NULL并返回到播放)。
GstElement *
gst_parse_launch (const gchar * pipeline_description,
GError ** error)
基于gst-launch-1.0
命令行形式创建一个新的pipeline。
-
pipeline_description
:描述pipeline的命令行字符串 -
error
:错误提示信息
GstParseError
-
GST_PARSE_ERROR_SYNTAX (0)
:Pipeline格式错误 -
GST_PARSE_ERROR_NO_SUCH_ELEMENT (1)
:Pipeline包含未知GstElement(Plugin) -
GST_PARSE_ERROR_NO_SUCH_PROPERTY (2)
:Pipeline中某个GstElment(Plugin)设置了不存在属性 -
GST_PARSE_ERROR_LINK (3)
:Pipeline中某对Plugin之间的GstPad无法连接 -
GST_PARSE_ERROR_COULD_NOT_SET_PROPERTY (4)
:Pipeline中某个GstElment(Plugin)的属性设置错误 -
GST_PARSE_ERROR_EMPTY_BIN (5)
:Pipeline中引入了空的GstBin -
GST_PARSE_ERROR_EMPTY (6)
:Pipeline为空 -
GST_PARSE_ERROR_DELAYED_LINK (7)
:Pipeline中某个GstPad存在阻塞
Code Example
#include <gst/gst.h>
#include <string>
#include <iostream>
int main(int argc, char* argv[])
{
GstElement* pipeline;
GError* error = NULL;
std::string m_strPipeline("filesrc location=test.mp4
! qtdemux ! qtivdec ! waylandsink");
pipeline = gst_parse_launch (m_pipeline.c_str(), &error);
if ( error != NULL ) {
printf ("Could not construct pipeline: %s", error->message);
g_clear_error (&error);
}
// ...
return 0;
}
使用gst_parse_launch()
解析完之后就能够获得一条GstPipeline
,然后就可以使用gst_element_set_state()
来运行pipeline了。
gst_element_factory_make()
gst_element_factory_make()
是GstElementFactory的一个函数,GstElementFactory
用于实例化一个GstElement
。
开发人员可以使用 gst_element_factory_find()
和gst_element_factory_create()
来实例化一个GstElement或者直接使用gst_element_factory_make()
来实例化。
#include <gst/gst.h>
int main(int argc, char* argv[])
{
GstElement* src;
GstElementFactory* srcfactory;
gst_init (&argc, &argv);
{
srcfactory = gst_element_factory_find ("filesrc");
g_return_if_fail (srcfactory != NULL);
src = gst_element_factory_create (srcfactory, "src");
g_return_if_fail (src != NULL);
}/*equals*/{
src = gst_element_factory_make ("filesrc", "src");
}
// ...
return 0;
}
gst_element_factory_make()
只是创建并实例化单个的GstElement
,如果要构建GstPipeline
,那么还需要将一系列的GstElement
添加到GstPipeline
中,并按照正确的顺序链接。
gst_bin_add_many()
gst_bin_add_many()
函数将GstElement
添加到pipeline中(不区分先后顺序)
gst_bin_add_many()
只是将各个GstElement
加入一个GstBin
中,即GstElement
的parent
指针指向同一个GstBin/GstPipeline
,这种添加是无序的,开发人员需要使用gst_element_link_many()
来将这些GstElement
链接起来。
gst_element_link_many()
gboolean
gst_element_link_many (GstElement * element_1,
GstElement * element_2,
... ...)
-
参数为按顺序排列的
GstElement
变量,并且需要以NULL
结尾。 -
在链接之前需要调用
gst_bin_add_many()
,确保所有的GstElement
属于同一个GstBin/GstPipeline
。
g_object_set()
GStreamer的实现依赖于GObject,所有的GStreamer elements都是特殊的GObject,用于提供property
特性。
大多数GStreamer elements都具有被称作属性的定制性质,使用g_obeject_set()
修改writable propeties
的属性值可以改变element的行为,使用g_obejct_get()
请求readable properties
的属性值可以获得element的内部状态。
g_object_set()
可以接受一个以NULL
结束的属性名-属性值键值对列表,所以可以一次性设置多个属性。
/* Modify the source's properties */
g_object_set (source, "pattern", 0, NULL);
在本教程中我们将videotestsrc
的pattern
属性设置为0
,pattern
属性控制者videotestsec
的输出视频类型,用户可以尝试设置为不同的值并查看效果。