GStreamer基本使用

GStreamer是处理多媒体流的框架。媒体流经过一系列的中间element,从source element流到sink element,这些相互作用

的element组成了pipeline.

(1)gst_init(NULL, NULL);//所有Gstreamer应用的第一句

        初始化所有内部数据结构

        检查所有可用的插件

(2)gst_parse_launch();//描述一个pipeline,也可以建立一个pipeline

        如:pipeline = gst_parse_launch("playbin uri=file:///share/ccnn.mp4", NULL);//创建一个播放本地视频的pipeline

  playbin:

        playbin元件是整合元件,内部建立工厂管道,用到很多元件。

(3)gst_element_set_state();//设置element的状态,如果element是pipeline,就可通过设置状态来控制播放、暂停和关闭

如:gst_element_set_state(pipeline, GST_STATE_PLAYING);//开始播放

所有状态值:

GST_STATE_NULL:默认状态,此状态将会回收所有被该element占用的资源

GST_STATE_READY:准备状态,元件会得到所有所需的全局资源,这些全局资源将被通过该元件的数据流所使用。如打开设备,分配缓存等。此状态下数据流没有开始被处理,数据流的位置信息自动置0,。如果数据流被打开过,会关闭该数据流,并且重置位置信息,特性信息为初始状态。

GST_STATE_PAUSED:暂停状态,此状态元件可以修改流的位置信息,读取或者处理流数据,只有时钟是禁止运行的

GST_STATE_PLAYING:运行状态,管道会自动处理数据,不需要任何形式的迭代。GStreamer会开启一个新的线程来处理数据。GStreamer同样可以使用GstBus在管道线程和应用程序线程间进行交互

(4)GstBus *bus = gst_element_get_bus(pipeline);

GstMessage *msg = gst_bus_time_pop_filtered(bus, GST_CLOCK_TIME_NONE, GST_MESSAGE_ERROR | GST_MESSAGE_EOS);

上面两行代码是等待发生错误或者播放结束。gst_element_get_bus();会得到pipeline的总线,然后gst_bus_timed_pop_filtered();会阻塞直到你遇到一个错误或者流播放结束。

(5)清理。

gst_object_unref(bus);//释放GstBus类型指针

gst_message_unref(msg);//释放GstMessage类型指针

gst_element_set_state(pipeline, GST_STATE_NULL);//回收pipeline占用的所有资源

gst_object_unref(pipeline);//释放GstElement指针


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章