摘要:摘要 在很多情况下,我们需要对GStreamer创建的Pipeline进行调试,来了解其运行机制以解决所遇到的问题。为此,GStreamer提供了相应的调试机制,方便我们快速定位问题。 查看调试日志 使用GST_DEBUG环境变量查看日志 GStreamer框架以及其插件提供了不同级别的日志信息,日 阅读全文
posted @ 2020-01-22 15:44 John.Leng 阅读(1447) 评论(2) 推荐(0) 编辑
摘要:摘要 GStreamer提供了不同的命令行工具用于快速的查看信息以及验证Pipeline的是否能够正确运行,在平时的开发过程中,我们也优先使用GStreamer的命令行工具验证,再将Pipeline集成到应用中。本文将介绍gst-inspect-1.0,gst-discoverer-1.0,gst- 阅读全文
posted @ 2019-11-04 14:38 John.Leng 阅读(2642) 评论(11) 推荐(1) 编辑
摘要:摘要 通常我们的播放引擎需要和GUI进行集成,在使用GStreamer时,GStreamre会负责媒体的播放及控制,GUI会负责处理用户的交互操作以及创建显示的窗口。本例中我们将结合QT介绍如何指定GStreamer将视频输出到指定窗口,以及如何利用GStreamer上报的信息去更新GUI。 与GU 阅读全文
posted @ 2019-10-31 15:16 John.Leng 阅读(2437) 评论(5) 推荐(2) 编辑
摘要:摘要 我们把直接从网络播放一个媒体文件的方式称为在线播放(Online Streaming),我们已经在以往的例子中体验了GStreamer的在线播放功能,当我们指定播放URI为 http:// 时,GStreamer内部会自动通过网络获取媒体数据。在今天的示例中,我们将进一步了解如何处理由网络问题 阅读全文
posted @ 2019-10-30 10:14 John.Leng 阅读(1150) 评论(0) 推荐(0) 编辑
摘要:摘要 在我们前面的文章中,我们的Pipline都是使用GStreamer自带的插件去产生/消费数据。在实际的情况中,我们的数据源可能没有相应的gstreamer插件,但我们又需要将数据发送到GStreamer Pipeline中。GStreamer为我们提供了Appsrc以及Appsink插件,用于 阅读全文
posted @ 2019-09-30 10:48 John.Leng 阅读(4024) 评论(0) 推荐(0) 编辑
摘要:摘要 GStreamer框架会自动处理多线程的逻辑,但在某些情况下,我们仍然需要根据实际的情况自己将部分Pipeline在单独的线程中执行,本文将介绍如何处理这种情况。 GStreamer多线程 GStreamer框架是一个支持多线程的框架,线程会根据Pipeline的需要自动创建和销毁,例如,将媒 阅读全文
posted @ 2019-09-29 16:17 John.Leng 阅读(1643) 评论(0) 推荐(0) 编辑
摘要:摘要 在常见的媒体播放器中,通常可以看到快进,快退,慢放等功能,这部分功能被称为“特技模式(Trick Mode)”,这些模式有个共同点:都通过修改播放的速率来达到相应的目的。 本文将介绍如何通过GStreamer去实现快进,快退,慢放以及单帧播放。 GStreamer Seek与Step事件 快进 阅读全文
posted @ 2019-08-23 18:06 John.Leng 阅读(1577) 评论(0) 推荐(0) 编辑
摘要:摘要 在常见的媒体文件中,通常包含一些数据(例如:歌手,专辑,编码类型等),用于描述媒体文件。通常称这些数据为元数据(Metadata:data that provides information about other data)。我们可以通过这些元数据对媒体进行归类,同时可以在播放的过程中通过界 阅读全文
posted @ 2019-07-31 16:49 John.Leng 阅读(1562) 评论(0) 推荐(0) 编辑
摘要:简介 在多媒体应用中,我们通常需要查询媒体文件的总时间、当前播放位置,以及跳转到指定的时间点。GStreamer提供了相应的接口来实现此功能,在本文中,我们将通过示例了解如何查询时间信息,以及如何进行跳转到指定位置。 GStreamer查询机制 GStreamer提供了GstQuery的查询机制,用 阅读全文
posted @ 2019-07-24 17:45 John.Leng 阅读(2015) 评论(0) 推荐(0) 编辑
摘要:摘要 在以前的文章中,我们了解到了2种播放文件的方式:一种是在知道了文件的类型及编码方式后,手动创建所需Element并构造Pipeline;另一种是直接使用playbin,由playbin内部动态创建所需Element并连接Pipeline。很明显使用playbin的方式更加灵活,我们不需要在一开 阅读全文
posted @ 2019-07-16 13:06 John.Leng 阅读(2580) 评论(0) 推荐(0) 编辑