目录
下载地址:
测试命令:
GStreamer总览
基本流程
常用元件
首先你需要从Index of /data/pkg/windows下载库
您需要为开发人员和非开发人员下载并安装安装程序。
例如对于 1.20,它是现在的最新版本,
gstreamer-1.0-devel-msvc-x86_64-1.20.0.msi 2022-02-04 05:36 186M
特点:devel版包含lib和dll文件,vs开发调用需要这个
gstreamer-1.0-msvc-x86_64-1.20.0.msi 2022-02-04 05:52 104M
特点:只有dll文件, 不能用vs来开发项目。
gst-play-1.0.exe D:\\data\\person\\skivideo.mp4
GStreamer是一个基于glib实现的跨平台多媒体框架。以下是架构图:
GStreamer架构图
GStreamer实现了多媒体处理的框架,主要是一个管道(pipline)包含多个元件(element)组成。管道继承自容器(bin),容器可以方便管理元件,用于串联元件,处理修改元件的状态,生命周期等。管道会提供一个消息总线(bus),用于元件的状态同步。而元件会包含一个或多个垫片(pad),用于数据的源(src)和槽(sink),每个数据源鱼一个数据槽相连接。这样多个元件在管道中就形成了复杂的处理流程了。
首先初始化GStreamer库,库前缀为 gst_
,glib前缀为 g_
。
// argc, argv 是初始化GStreamer的命令行参数
gst_init (&argc, &argv);
然后创建管道
pipeline = gst_pipeline_new ("test-pipeline");
创建对应的元件,采用了工厂模式
source = gst_element_factory_make ("videotestsrc", "source");
filter = gst_element_factory_make ("timeoverlay", "filter");
sink = gst_element_factory_make ("autovideosink", "sink");
连接元件
// 先把元件加入到容器(管道)中
gst_bin_add_many (GST_BIN (pipeline), source, filter, sink, NULL);
// 再确定连接方式
gst_element_link_many (source, filter, sink, NULL);
整个管道就创建好了,然后我们就让管道开始工作
gst_element_set_state (pipeline, GST_STATE_PLAYING);
最后,一直等待管道完成工作
bus = gst_element_get_bus (pipeline);
msg = gst_bus_timed_pop_filtered (bus, GST_CLOCK_TIME_NONE,
GST_MESSAGE_ERROR | GST_MESSAGE_EOS);
完成我们要的功能后,释放整个管道,防止资源泄露。整个管道可以有容器统一处理,所以不需要每个元件都去释放。同时glib实现的GObject是用引用计数实现的资源回收,而且GstElement继承自GInitiallyUnowned,所以元件默认是没有人引用的。容器可以完美的释放元件。
gst_object_unref (bus);
gst_element_set_state (pipeline, GST_STATE_NULL);
gst_object_unref (pipeline);
以上就是一个基本的GStreamer项目。接下来我们看看GStreamer有哪些常用元件。
处理文件的输入,输出
网络源文件输入
测试媒体数据生成
视频适配
音频适配
多线程
过滤器
调试
作者:通往心的路
链接:https://www.jianshu.com/p/550ea698c053
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。