Gstreamer基础知识教程

 更新时间:2022年07月21日 11:09:20   作者:代码不好读啊  
由于deepstream是基于gstreamer的,所以要想在deepstream上做拓展,需要对gstreamer有一定的认识,以下主要介绍Gstreamer整体框架和Gstreamer基础概念,需要的朋友可以参考下

由于deepstream是基于gstreamer的,所以要想在deepstream上做拓展,需要对gstreamer有一定的认识。以下主要介绍Gstreamer整体框架和Gstreamer基础概念。

一、Gstreamer整体框架

gstreamer是一个用于开发流式多媒体应用的开源框架。本身这个框架是为了更好的处理音视频而设计开发的,但gstreamer不限于处理音视频,只要是有明显的数据流特征的应用,gstreamer都能很好的应用。

gstreamer的整体功能核心是pipeline框架以及用于扩展功能的插件:

1、pipeline用于安排数据流图,明确数据流处理过程。通过gstreamer多媒体数据协商机制和同步机制,pipeline能够很好的地处理流式数据。

2、插件用于扩展功能,开发者可以灵活利用已有插件,而且还可以自定义特定功能插件。

               

二、Gstreamer基础概念

Gstreamer的基础概念有如下四个,了解这四个概念是我们将Gstreamer玩起来的前提

1、Elements

Elements是一个pipeline中的基本组成功能实体,通过将不同功能的elements连起来,就可以实现一个数据流处理功能。如图所示,通过将source filer sink三种element连起来,可以实现对pipeline中传输数据格式的过滤。

element主要有三种:

(1) source element,主要是作为一个pipeline中的source节点,是数据源。source element只有src pad,即只有输出口。

(2) sink element ,作为pipline的end节点 。sink element 只有sink pad,即只有输入口。

(3) common element,作为pipline中的中间数据处理单元,既有sink pad,也有src pad,通常有:Filters, convertors, demuxers, muxers and codecs等

2、pad

pad是element的输入和输出,作为协商链接和数据传输用,链接只能是两个pad之间的,每个Pad都可以限定支持的数据格式。当两个不同Pad之间的格式匹配,两个Pad就可以进行链接,并传输数据。

3、bin和Pipeline

bin是element的一个集合,bin中的element理应互联,从而使bin也能提供某种功能,由于bin是element的子类,所以所有的element的操作,bin几乎都继承了。

pipeline是一个完整的流式数据处理流程,可以看成一个顶级的bin。pipeline如下图所示

           

4、通信

Gstreamer为应用提供了几种通信机制:

(1)buffer 用于element之间数据传递,buffer中包含的是媒体数据,buffer的传输方向永远是从src pad 到sink pad的,即向下传输。

(2) event element之间或者application到element的信息传输,包含的是控制数据。event既可以向下也可以向上传输。

(3)message 由element向application传输,用于传输 errors,tags,state changes, buffering state, redirects等信息。

(4)queries 通常由application向pipeline发送,用于请求一些持续时间和播放点等信息。queries的应答是同步的。element也可以使用queries来向相邻element请求相应的信息

这边只做简单的介绍,详细的可以查阅Gstreamer 官方用户手册

https://gstreamer.freedesktop.org/documentation/index.html

到此这篇关于Gstreamer基础知识教程的文章就介绍到这了,更多相关Gstreamer基础知识内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C语言中printf的两种输出对齐方式

    C语言中printf的两种输出对齐方式

    C语言中左对齐是C语言的默认输出方式,右对齐是一种特殊的输出方式,左对齐和右对齐都对应着一个已知的输出宽度,输出的字符串根据字符串的长度在宽度上进行补充,补充字符是空格,在使用printf函数输出时,需要在格式字符串中使用%-*s和%*s的格式来分别表示
    2024-02-02
  • C语言实现桌面贪吃蛇小游戏

    C语言实现桌面贪吃蛇小游戏

    这篇文章主要介绍了C语言实现桌面贪吃蛇小游戏,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • Java C++ 算法题解leetcode1608特殊数组特征值

    Java C++ 算法题解leetcode1608特殊数组特征值

    这篇文章主要为大家介绍了Java C++ 算法题解拓展leetcode1608特殊数组特征值实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • Qt连接数据库并实现增删改查操作

    Qt连接数据库并实现增删改查操作

    这篇文章主要为大家详细介绍了Qt如何连接数据库并实现增删改查等基本操作,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-09-09
  • 关于C++虚函数与静态、动态绑定的问题

    关于C++虚函数与静态、动态绑定的问题

    这篇文章主要介绍了C++虚函数与静态、动态绑定,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-10-10
  • C++类的特种函数生成机制详解

    C++类的特种函数生成机制详解

    这篇文章主要给大家介绍了关于C++类特种函数的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2021-09-09
  • C++内嵌汇编示例详解

    C++内嵌汇编示例详解

    这篇文章主要介绍了C++内嵌汇编,本文的所有代码是在我自己的VS2008中测试的,由于环境的差别,不能保证能在所有的编译器上运行,需要的朋友可以参考下
    2022-01-01
  • C++中关键字 override 的简析

    C++中关键字 override 的简析

    这篇小文来聊聊 C++中的关键字 override,它的含义其实两句话就说完了,但为了叙述的完整性,让我们从虚函数说起。感兴趣的小伙伴可以跟着小编一起学习下面文章内容
    2021-09-09
  • C语言数据结构中堆排序的分析总结

    C语言数据结构中堆排序的分析总结

    堆是计算机科学中一类特殊的数据结构的统称,通常是一个可以被看做一棵完全二叉树的数组对象。而堆排序是利用堆这种数据结构所设计的一种排序算法。本文将通过图片详细介绍堆排序,需要的可以参考一下
    2022-04-04
  • C++索引越界的解决方法

    C++索引越界的解决方法

    本文主要介绍了C++索引越界的解决方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08

最新评论