GStreamer详解1 hello world

来源:互联网 发布:域名注册申请 编辑:程序博客网 时间:2024/06/10 16:05
void
gst_init (int *argc, char **argv[])
初始化所有内部数据结构.
检查所有可用的插件.
运行所有的命令行选项.


GstElement *
gst_element_factory_make (const gchar * factoryname, const gchar * name)
创建element对象
gst-inspect可以查询到element的名字和取值范围


基础知识:
element是GStreamer中最重要的概念。可以通过创建一系列的Elements,把它们连接起来,从而让数据流在连接的各个Elements之间传输。
每个Elements都有一个特殊的函数接口,对于有些Elements的函数接口它们是用于能够读取文件的数据,译码文件数据的。
而有些Elements的函数接口只是输出相应的数据到具体的设备上(例如,声卡设备)。你可以将若干个组件(Elements)连接在一起,从而创建一个管道(pipeline)来完成一个特殊的任务,例如,媒体播放或者录音。
GStreamer已经默认安装了很多有用的Elements,通过使用这些Elements能够构建一个具有多种功能的应用程序。当然,如果你需要的话,你可以自己编写一个新的


g_object_get()方法来获得属性
g_object_set (playbin, "uri", uri, NULL);
设置elements的属性:只读的属性会显示element的内部状态,可写的属性会影响element的行为。
接受一个用NULL结束的属性名称/属性值的组成的对,所以可以一次同时修改多项属性。


GstElement *
gst_parse_launch (const gchar * pipeline_description, GError ** error)
直接建立一个pipeline


GstStateChangeReturn
gst_element_set_state (GstElement * element, GstState state)
播放器必须设置pipeline为PLAYING状态才能真正开始播放


设置循环三个步骤
loop = g_main_loop_new (NULL, FALSE);
g_main_loop_run (loop);
void g_main_loop_quit (GMainLoop *loop)
g_main_loop_unref (loop);


GstBus *
gst_element_get_bus (GstElement * element)
获取消息总线


guint
gst_bus_add_watch (GstBus * bus, GstBusFunc func, gpointer user_data)
增加事件监听函数


GstElement *
gst_pipeline_new (const gchar * name)
一个pipeline就是一个特定类型的可以包含其他element的bin,而且所有可以用在bin上的方法也都可以用在pipeline上。


void
gst_bin_add_many (GstBin * bin, GstElement * element_1, ...)
用了gst_bin_add_many()方法在pipeline中加入element。这个方法会接受一系列的element作为输入参数,最后由NULL来终止。
增加单个element的方法是gst_bin_add()。


gboolean
gst_element_link (GstElement * src, GstElement * dest)
刚增加的elements还没有互相连接起来。我们用gst_element_link()方法来把element连接起来,这个方法的第一个参数是源,第二个参数是目标,这个顺序不能搞错,因为这确定了数据的流向。
记住只有在同一个bin里面的element才能连接起来,所以一定要把element在连接之前加入到pipeline中。




实例运行
./helloworld abc.ts
0 0