gstreamer的API

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中,即GstElementparent指针指向同一个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);

在本教程中我们将videotestsrcpattern属性设置为0pattern属性控制者videotestsec的输出视频类型,用户可以尝试设置为不同的值并查看效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值