![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Gstreamer
文章平均质量分 81
Min0401
这个作者很懒,什么都没留下…
展开
-
GstBuffer中data实际的存储地址
GstBuffer中data实际的存储地址前段时间刚开始学Gstreamer,还没学多少就要干活了,最近想用gdb查看GstBuffer的data地址是总很麻烦,要先用gst_buffer_map先获得data,所以就深入的了解了一下GstBuffer中data所存放的地方。下面就和大家分享一下吧!通常我们需要获取GstBuffer的data数据是通过接口gst_buffer_map得到的原创 2017-04-10 14:39:40 · 3411 阅读 · 0 评论 -
GStreamer基础教程06——媒体格式和pad的Capabilities
原文:https://gstreamer.freedesktop.org/documentation/tutorials/basic/index.html译文原文:http://blog.csdn.net/sakulafly/article/details/21299519原码:git clone git://anongit.freedesktop.org/gstreamer/gst-do转载 2017-01-26 22:10:35 · 589 阅读 · 0 评论 -
GStreamer基础教程05——集成GUI工具
原文:https://gstreamer.freedesktop.org/documentation/tutorials/basic/index.html译文原文:http://blog.csdn.net/sakulafly/article/details/21186641原码:git clone git://anongit.freedesktop.org/gstreamer/gst-do转载 2017-01-22 11:37:14 · 455 阅读 · 0 评论 -
GStreamer基础教程04——时间管理
原文:https://gstreamer.freedesktop.org/documentation/tutorials/basic/index.html译文原文:http://blog.csdn.net/sakulafly/article/details/20992879原码:git clone git://anongit.freedesktop.org/gstreamer/gst-do转载 2017-01-22 09:52:43 · 550 阅读 · 0 评论 -
GStreamer基础教程03——动态pipeline
原文:https://gstreamer.freedesktop.org/documentation/tutorials/basic/index.html译文:http://blog.csdn.net/sakulafly/article/details/20936067原码:Git clone git://anongit.freedesktop.org/gstreamer/gst-do转载 2017-01-21 11:37:21 · 787 阅读 · 0 评论 -
GStreamer基础教程02——GStreamer概念
上一个教程演示了如何自动生成一个pipeline。这次我们打算用一个个element来手动搭建一个pipeline。我们这个教程会演示:1. 什么是GStreamer的element以及如何建立一个element2. 如何在element直接建立连接3. 如何客制化element的行为4. 如何监视总线上的错误并获得相关的信息 手动建立Hello World转载 2017-01-19 22:40:33 · 475 阅读 · 0 评论 -
GStreamer基础教程01——Hello World
原文:https://gstreamer.freedesktop.org/documentation/tutorials/basic/index.html译文:http://blog.csdn.net/sakulafly/article/details/19398257目标 对于一个软件库来说,没有比在屏幕上打印出Hello World更近直观的第一印象了。因为我们是在和一个转载 2017-01-19 22:26:48 · 331 阅读 · 0 评论 -
Gstreamer插件教程2.6—编写一个插件(Writing a Plugin):状态是什么?(What are states?)
状态描述了element是否被初始化,是否已经准备好传送数据以及目前是否正在处理数据。Gstreamer中定义了4个状态:GST_STATE_NULLGST_STATE_READYGST_STATE_PAUSEDGST_STATE_PLAYING翻译 2017-02-13 15:36:32 · 359 阅读 · 0 评论 -
Gstreamer插件教程2.9—编写一个插件(Writing a Plugin):构建一个测试应用(Building a Test Application)
你将经常想用尽可能小的设置来测试你新写的插件。通常,gst-launch-1.0是用于测试插件的第一步。如果你还未在Gstreamer的搜索目录上安装你的插件,你将需要设置插件路径。或者设置GST_PLUGIN_PATH变量为包含你插件的目录路径,或者用命令行选项--gst-plugin-path。如果你的插件基于gst-plugin模板,它将类似于gst-launch-1.0 --gst-plugin-path=$HOME/gst-template/gst-plugin/src/.libs TESTPI翻译 2017-02-13 17:36:12 · 633 阅读 · 0 评论 -
GStreamer基础教程07——多线程和Pad的有效性
原文:https://gstreamer.freedesktop.org/documentation/tutorials/basic/index.html译文原文:http://blog.csdn.net/sakulafly/article/details/21318313原码:Git clone git://anongit.freedesktop.org/gstreamer/gst-转载 2017-01-26 23:16:31 · 420 阅读 · 0 评论 -
GStreamer基础教程08——pipeline的快捷访问
目标 GStreamer建立的pipeline不需要完全关闭。有多种方法可以让数据在任何时候送到pipeline中或者从pipeline中取出。本教程会展示: 如何把外部数据送到pipeline中 如何把数据从pipeline中取出 如何操作这些数据介绍 有几种方法可以让应用通过pipeline和数据流交互。本教程讲转载 2017-01-27 16:01:55 · 504 阅读 · 0 评论 -
Gstreamer插件教程3.1—高级概念(Advanced Concepts):需求pads和间或pads(Request and Sometimes pads)
到目前为止,你应该能够创建可以接收和发送数据的filter element。这是Gstreamer所支持的简单模型。但Gstreamer还可以做更多的事!在这接下来的章节,我们将讨论多个高级主题,如时间安排、特殊的pad类型、时钟、事件、接口和标签等更多。这些主题使得应用中使用Gstreamer更简单。直到目前为止,我们只处理了那些一直存在的pads,然而,还有许多pads是只有在某些时候或只有应用程序要求时才被创建的。第一个被称为sometimes pad,第二个被称为request pad。pad的可翻译 2017-02-23 14:41:06 · 1048 阅读 · 0 评论 -
Gstreamer整体分析2——Element状态转变所做的事
在前面的内容中,我们已经分析了Gstreamer在将element添加到pipeline及连接element时所做的事,一般完成了前面的步骤后,我们会设置pipeline的状态为PLAYING,下面我们来分析一下,Gstreamer设置状态时都让element做了些什么事。编写应用程序时,我们会调用gst_element_set_state函数用于设置状态,在源码中,我们可以看到,Gstrea原创 2017-02-27 16:21:58 · 1440 阅读 · 0 评论 -
Gstreamer整体分析2——连接Element
上一部分中,我们已经介绍了编写应用程序时,element的创建及何时加载插件动态库。在此部分中,我们将介绍Gstreamer是如何将element添加到pipeline中,并把它们连接起来的。原创 2017-02-24 18:53:07 · 2743 阅读 · 0 评论 -
GStreamer基础教程13——播放速度
目标 快进,倒放和慢放是trick模式的共同技巧,它们有一个共同点就是它们都修改了播放的速度。本教程会展示如何来获得这些效果和如何进行逐帧的跳跃。主要内容是: 如何来变换播放的速度,变快或者变慢,前进或者后退 如何一帧一帧的播放视频转载 2017-02-04 13:29:01 · 810 阅读 · 0 评论 -
GStreamer基础教程12——流
目标 直接播放Internet上的文件而不在本地保存就被称为流播放。我们在前面教程里已经这样做过了,使用了http://的URL。本教程展示的是在播放流的时候需要记住的几个点,特别是: 如何设置缓冲 如何从打断中恢复(因为失去了时钟)转载 2017-02-04 12:55:10 · 444 阅读 · 0 评论 -
GStreamer基础教程11——调试工具
原文:https://gstreamer.freedesktop.org/documentation/tutorials/basic/index.html译文原文:http://blog.csdn.net/sakulafly/article/details/21559785原码:git clone git://anongit.freedesktop.org/gstreamer/gst-do转载 2017-02-04 11:46:37 · 452 阅读 · 0 评论 -
GStreamer基础教程10——GStreamer工具
原文:https://gstreamer.freedesktop.org/documentation/tutorials/basic/index.html译文原文:http://blog.csdn.net/sakulafly/article/details/21455637原码:git clone git://anongit.freedesktop.org/gstreamer/gst-do转载 2017-02-04 10:47:38 · 482 阅读 · 0 评论 -
GStreamer基础教程09——收集媒体信息
原文:https://gstreamer.freedesktop.org/documentation/tutorials/basic/index.html译文原文:http://blog.csdn.net/sakulafly/article/details/21399039原码:git clone git://anongit.freedesktop.org/gstreamer/gst-do转载 2017-01-28 13:56:40 · 668 阅读 · 0 评论 -
Gstreamer插件教程3.2—高级概念(Advanced Concepts):不同的调度模式(Different scheduling modes)
一个pad的调度模式定义了数据是如何从source pad中接收及发送至sink pad。Gstreamer能够运行两种调度模式,分别称为push和pull模式。Gstreamer支持element能够拥有可以任何方式调度的pad,一个element中的pads并不需要以相同的调度模式运行。目前为止,我们只讨论了_chain()函数运行element,如,在sink pad上设置了chain函数的element将push数据到它的source pad中。我们称这种模式为push模式,因为一个同级的elem翻译 2017-02-23 20:39:28 · 1016 阅读 · 0 评论 -
Gstreamer插件教程2.8—编写一个插件(Writing a Plugin):信号(Signals)
GObject信号可以用来通知应用这object中的特殊事件。然而,可以注意到应用需要明白信号及它的意义,所以如果你正在寻找应用与element交互的通用的方式,信号可能不是你想要找的。但是,在很多情况下,信号是非常有用的。详见GObject文档关于信号的内部介绍。翻译 2017-02-13 16:55:48 · 777 阅读 · 0 评论 -
Gstreamer插件教程2.7—编写一个插件(Writing a Plugin):添加性质(Adding Properties)
控制一个element行为的主要的且最重要的方式是通过GObject性质。GObject性质是在_class_init()函数里定义的。element可以选择实现一个_get_property()函数或一个_set_property()函数。这些函数将在一个应用改变或要求一个性质的值时被通知,然后填充对应性质的值或在内部对需求采取相应的方法改变对应性质的值。你可能想保持一个事例对象的性质的值为当前配置的,此值为你在get和set函数中用到的。注意到GObject不会自动设置你的事例变量的值为默认值,你需要翻译 2017-02-13 16:47:00 · 956 阅读 · 0 评论 -
Gstreamer插件教程2.2—编写一个插件(Writing a Plugin):详解pads(Specifying the pads)
正如前面所说,pad是数据进出element时的端口,这使得pad在element的创建过程中成为非常重要的一步。在boilerplate代码中,我们已经看到了静态pad模板是如何通过element class来注册pad模板的。这里,我们将看到如何创建一个真实的element:用一个_event()-函数来配置一个特殊的格式。还将看到如何注册函数,使得数据流通过element。在element的_init()函数中,你从pad模板中创建的pad已经在_class_init()函数中被注册到element翻译 2017-02-11 19:15:25 · 559 阅读 · 0 评论 -
GStreamer播放教程03——pipeline的快捷访问
目的 《GStreamer08——pipeline的快捷访问》展示了一个应用如何用appsrc和appsink这两个特殊的element在pipeline中手动输入/提取数据。playbin2也允许使用这两个element,但连接它们的方法有所不同。连接appsink到playbin2的方法在后面还会提到。这里我们主要讲述: 如何把appsrc连接到playbin2 如何配置appsrc转载 2017-02-06 10:52:38 · 264 阅读 · 0 评论 -
GStreamer播放教程06——可视化音频
目标 GStreamer有一系列把音频转换成视频的element。他们可以用于科学的目的或者增加音乐播放器的趣味性。本教程展示: 如何允许音频的可视化 如何选择可视化element转载 2017-02-07 10:31:07 · 421 阅读 · 0 评论 -
GStreamer播放教程02——字幕管理
目标 这篇教程和上一篇非常相似,但不是切换音频流,而是字幕了。这次我们会展示: 如何选择选择字幕流 如何引入外部的字幕 如何客制化字幕使用的字体转载 2017-02-06 10:28:42 · 551 阅读 · 0 评论 -
GStreamer播放教程01——playbin的使用
目标 我们前面已经使用过了playbin2这个element,它可以让我们做的很少而实现很多。本教程会展示当这个element的默认设置在一些特殊情形下不符合我们的需求是可以做的一些深度定制,我们会看到: 如何判断一个文件中有多少个流并区分开 如何获得每一个流的信息转载 2017-02-06 09:22:06 · 2414 阅读 · 0 评论 -
GStreamer播放教程05——色彩平衡
目标 亮度,对比度,色度和饱和度都是常见的视频调节参数,也是GStreamer里面设置色彩平衡的参数。本教程将展示: 如何发现可用的色彩平衡通道 如何改变它们转载 2017-02-07 10:12:48 · 352 阅读 · 0 评论 -
GStreamer播放教程04——既看式流
目的 在《GStreamer基础教程——流》里面我们展示了如何在较差的网络条件下使用缓冲这个机制来提升用户体验。本教程在《GStreamer基础教程——流》的基础上在扩展了一下,增加了把流的内容在本地存储。并且展示了: 如何开启既看式下载 如何知道下载的是什么 如何知道在哪里下载 如何限制下载数据的总量转载 2017-02-07 09:31:29 · 421 阅读 · 0 评论 -
GStreamer基础教程16——平台相关的element
原文:https://gstreamer.freedesktop.org/documentation/tutorials/basic/index.html译文原文:http://blog.csdn.net/sakulafly/article/details/21825383原码:git clone git://anongit.freedesktop.org/gstreamer/gst-do转载 2017-02-04 16:04:05 · 396 阅读 · 0 评论 -
GStreamer基础教程15——继承Clutter
目标 Clutter是一个开源的库,用来创建快速、可移植和动态的GUI。GStreamer可以通过cluttersink这个element把clutter集成进来,允许视频像纹理一样使用。本教程会展示: 如何把GStreamer pipeline的视频输出在clutter里面作为纹理来处理转载 2017-02-04 15:50:25 · 318 阅读 · 0 评论 -
GStreamer播放教程07——自定义playbin的sink
目标 通过手动选择音频和视频的sink,playbin2可以进一步定制。这允许使用playbin2的应用在解码后可以自行做最终的渲染和显示。本教程展示了: 如何替换playbin2选择的sink 如何使用一个复杂的pipeline来作为sink转载 2017-02-07 10:55:28 · 985 阅读 · 0 评论 -
GStreamer播放教程08——视频解码的硬件加速
目标 视频的硬件解码近来发展非常快速,尤其是在低功耗的设备上。本教程会讲述一些硬件加速的背景知识并解释一下GStreamer是怎么做的。 悄悄告诉你,如果设置正确地话,我们什么也不用做,GStreamer自动做完这一切的。转载 2017-02-07 11:13:29 · 1873 阅读 · 0 评论 -
GStreamer播放教程09——数字音频传输
目标 本教程展示GStreamer是如何进行数字音频传输的。转载 2017-02-07 11:34:47 · 406 阅读 · 0 评论 -
Gstreamer插件教程2.1—编写一个插件(Writing a Plugin):构建样板(Constructing the Boilerplate)
本章节中,你将学会怎样使用最小的代码量构建一个最基本的新插件。由于从零开始,所以你将需要知道如何获得Gstreamer的模板源。然后,你将学会如何运用一些基本的工具来拷贝且修改一个模板插件,以创建一个新的插件。当你阅读完此章节,了解了下面的例子,你将得到一个功能性的音频过滤器插件,你可以编译此插件并在Gstreamer应用程序中使用它。翻译 2017-02-11 14:41:49 · 1240 阅读 · 0 评论 -
Gstreamer架构理解
原文:http://blog.sina.com.cn/s/blog_6a4c492f0100q8wu.html本文给出了Gstreamer的总体设计。通过阅读本文可以了解Gstreamer的内部工作原理。本文编译自gstreamer源码中的文档,原文在源码中的位置是/gstreamer/docs/design/part-overview.txt。概述Gstreamer是转载 2017-01-22 20:22:29 · 550 阅读 · 0 评论 -
Gstreamer插件教程2.5—编写一个插件(Writing a Plugin):query函数(The query function)
通过query函数,你的element将收到必须被回复的queries。这些queries是一些如播放位置、持续时间等,但是也包含所支持的格式和你的element所支持的时间安排模式。queries能向上游传送,也能够向下游传送,所以你能够在sink pads和source pads中接收到它们。翻译 2017-02-11 20:33:27 · 544 阅读 · 0 评论 -
Gstreamer插件教程2.4—编写一个插件(Writing a Plugin):event函数(The event function)
event函数通知你发生在数据流上的特殊事件(如caps, end-of-stream, newsegment, tags等)。events可以往上游传送,也可以下游传送,所以你即可以在sink pads中,也可以在source pads中收到它们。翻译 2017-02-11 20:19:21 · 412 阅读 · 0 评论 -
Gstreamer插件教程2.3—编写一个插件(Writing a Plugin):chain函数(The chain function)
chain函数是所有数据处理发生的地方。在一个简单的过滤器中,_chain()几乎是线性的函数,所以对于任意一个输入的buffer,都将被输出。下面是一个非常简单的一个chain函数的实现翻译 2017-02-11 19:43:18 · 869 阅读 · 0 评论 -
Gstreamer整体分析1——Element的创建及Plugin的加载
学习Gstreamer断断续续也有一小段的时间了,不仅学习了基础教程和播放教程,同时还开始了翻译Gstreamer插件,但个人觉得对Gstreamer的了解还是比较的浅,特别是在学习和翻译Gstreamer插件的时候,感觉学的东西都是偏局部的,不能很好的串起来,所以,最近开始看Gstreamer的源码,但如果不做笔记的话,又可能会渐渐忘记其内部的工作原理,所以在这里对Gstreamer做一个总体上的分析。此教程不涉及应用的开发(基础教程和播放教程中已介绍),只对Gstramer是如何完成element的创建原创 2017-02-24 16:13:06 · 1905 阅读 · 1 评论