![](https://img-blog.csdnimg.cn/20190927151124774.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Gstreamer基础课程
文章平均质量分 75
学习笔记
李尔阳
这个作者很懒,什么都没留下…
展开
-
基础课程11:调试工具
有时事情不会按照预期进行,从总线(如果有的话)检索到的错误消息不能提供足够的信息。幸运的是,GStreamer附带了大量调试信息,这些信息通常会提示问题可能是什么。本教程展示了:如何从GStreamer获取更多调试信息。如何将自己的调试信息打印到GStreamer日志中。如何获得管道图(pipeline graphs)原创 2023-01-30 16:57:02 · 814 阅读 · 0 评论 -
基本课程10:GStreamer tools
这些工具在GStreamer二进制文件的bin目录中。用户需要移动到该目录才能执行它们,因为它没有被添加到系统的PATH环境变量中(以避免过度污染它)。只需打开一个终端(或控制台窗口),并转到您的GStreamer安装的bin目录(再次阅读安装GStreamer部分以找到我们的位置),然后您就可以开始输入入本教程中给出的命令。为了允许在同一个系统中同时存在多个版本的GStreamer,这些工具是版本化的,即在它们的名称后面附加一个GStreamer版本号。原创 2023-01-30 16:55:18 · 1857 阅读 · 0 评论 -
基础课程9:媒体信息获取
暂时保留原创 2023-01-30 16:54:21 · 94 阅读 · 0 评论 -
基础课程8:Short-cutting the pipeline
应用程序可以通过多种方式与GStreamer管道的数据流进行交互。本教程描述的是最简单的一个,因为它使用的是专门为这个目的而创建的元素。用于向GStreamer管道中注入应用数据的元素是appsrc,用于将GStreamer数据提取回应用的对应元素是appsink。为了避免混淆名称,请从GStreamer的角度考虑:appsrc只是一个常规的source,它神奇地提供了从天而降的数据(实际上是由应用程序提供的)。原创 2023-01-30 16:53:35 · 90 阅读 · 0 评论 -
基础课程7:多线程与Pad可获得性
GStreamer是一个多线程框架。这意味着,在内部,它会根据需要创建和销毁线程,例如,从应用程序线程解耦流媒体。此外,插件也可以为自己的处理创建线程,例如,视频解码器可以创建4个线程,以充分利用4核CPU。最重要的是,在构建管道时,应用程序可以明确指定分支(管道的一部分)运行在不同的线程上(例如,让音频和视频解码器同时执行)。这是使用queue成员完成的,工作原理如下。sink pad只是将数据放入队列并返回控制权。在另一个线程上,数据被出队列并推送到下游。原创 2023-01-30 15:01:05 · 313 阅读 · 0 评论 -
基础课程6:媒体格式和Pad功能
如前所示,Pads允许信息进入和离开元素。然后,Pad的Capabilities功能(或简称Caps)指定了哪些类型的信息可以通过Pad传递。例如,“分辨率为320x200像素,每秒30帧的RGB视频”,或“每个音频样本为16位,5.1通道,每秒44100个样本”,或甚至像mp3或h264这样的压缩格式。pad可以支持多种功能(例如,一个视频sink可以支持不同类型的RGB或YUV格式的视频),功能可以指定为范围(例如,一个音频sink可以支持每秒1到48000个样本的采样率)。原创 2023-01-30 12:32:28 · 417 阅读 · 0 评论 -
基础课程5:GUI toolkit integration
暂时保留原创 2023-01-30 10:34:12 · 137 阅读 · 0 评论 -
基础课程4:查询媒体时间和控制播放时间
/** * (1)GstQuery是向一个element或者pad询问一些信息的机制。 * 在这个例子中我们会问pipeline是否支持跳转功能(实时流是不支持跳转功能的) * 如果支持跳转功能,那么在播放10s之后跳转到另一个位置。 * (2)在前面的教程中,我们一旦建立pipeline并运行后,我们就是在等待ERROR或者EOS消息, * 这个例子中我们修改这部分,改成定时唤醒并查询pipeline当前播放的位置并在屏幕上显示出来。*/#include <gst/gst.h>原创 2021-09-08 11:30:24 · 320 阅读 · 0 评论 -
基本课程3:动态构建GStreamer管道
1 代码#include <gst/gst.h>/* Structure to contain all our information, so we can pass it to callbacks *//* 这里存下了所有需要的局部变量,因为本教程中会有回调函数,使用struct比较方便 */typedef struct _CustomData{ GstElement *pipeline; GstElement *source; GstElement *convert;原创 2021-09-08 11:24:27 · 916 阅读 · 0 评论 -
基本课程2: 基本概念
1 代码#include <gst/gst.h>intmain (int argc, char *argv[]){ GstElement *pipeline, *source, *sink; GstBus *bus; GstMessage *msg; GstStateChangeReturn ret; /* Initialize GStreamer */ gst_init (&argc, &argv); /* Create the e原创 2021-09-08 09:32:52 · 201 阅读 · 0 评论 -
一、基础教程 Hello World 扩展Bus(GMain循环)
1 概述 BUS(总线)是一个简单的系统,拥有自己的线程机制将一个管道线程的消息分发到一个应用程序当中。总线的优势是:当使用GStreamer的时候,应用程序不需要线程识别,即便GStreamer已经被加载了多个线程。 每个管道默认包含一个总线,所以应用程序不需要再创建总线。应用程序只需要在总线上设置一个类型于对象的信号处理器的消息处理器。当主循环运行的时候,总线将会轮询这个消息处理器是否有新的消息,当消息采集到后,总线将呼叫相应的回调函数来完成任务。 上一章节官方提供的例程使用的gst阻塞函数原创 2021-09-08 09:09:24 · 313 阅读 · 0 评论 -
基础教程1:Hello World
1 代码#include <gst/gst.h>intmain (int argc, char *argv[]){ GstElement *pipeline; GstBus *bus; GstMessage *msg; gboolean terminate = FALSE; /* Initialize GStreamer */ /* 这是必须第一个执行的Gstreamer命令 * 初始化所有内部结果 * 检查可用的插件 * 执行外部传入的命令原创 2021-09-07 20:26:39 · 332 阅读 · 0 评论