1.初始化gstreamer: gst_init();
2.创建source,sink, 和pipeline gst_element_factory_make & gst_pipeline_new
3.管道中加入元件,并建立元件间的联系:gst_bin_add_many && gst_element_link
4.设置元件的属性,启动管道的状态:g_object_set && gst_element_set_state
5.获取管道的总线,并等待信号:gst_element_get_bus && gst_bus_timed_pop_filtered
6.解析信号,执行对应的操作:GST_MESSAGE_TYPE (msg)
7.释放资源:gst_object_unref
动态管道
4.设置元件属性之后,设置信号连接机制,原元件产生数据,创建源衬垫,触发回调。
4.1 回调函数:
g_signal_connect (data.source, "pad-added", G_CALLBACK (pad_added_handler), &data); //(GstElement *src, GstPad *new_pad, CustomData *data)
src是触发信号的GstElement,作为连接的唯一信号;new_pad是源元件的 GstPad 。这通常是我们想要pad的一端。数据是我们连接到信号时提供的指针。
4.2 获得新pad: gst_element_get_static_pad
4.3 判断生成的衬垫是否被连接:gst_pad_is_linked (sink_pad)
4.4 获取源衬垫的功能(返回结构体),只取音频的结构体,并重命名。判断是不是音频的衬垫,
4.5 尝试链接:gst_pad_link(new_pad, sink_pad)
4.6 释放两个衬垫。
android: Android平台下GStreamer SDK使用实践 :
gstAndroidRoot=D:/mind_file/Android10/gstreamer-1.0-android-universal-1.16.1
基于Gstreamer的实时视频流的分发
gstreamer的rtsp推流
实现:https://www.cnblogs.com/kkia/p/3806520.html