C语言多媒体框架GStreamer入门和概述

 更新时间:2022年07月21日 10:58:20   作者:dvlinker  
这篇文章主要介绍了C语言多媒体开源框架GStreamer,本文总结了多媒体框架GStreamer一些基本概念及流程,希望能给使用GStreamer开源库的朋友提供一个借鉴或参考,需要的朋友可以参考下

一.概述

在音视频领域接触最多实现的方案通常是通过ffmpeg(PC和sever端居多)或者硬件厂家的的SDK实现特定硬件的编解码功能(机顶盒,电视等嵌入式设备)。这里我们介绍一个在国内不太常用的解决方案----gstreamer媒体库

二.Gstreamer 的特点:

gstreamer跟ffmpeg一样,也是一个媒体框架,可以实现采集,编码,解码,渲染,滤镜等一条龙的媒体解决方案。

  • 跟ffmpeg一样,也是有命令行工具进行测试验证。同时还可以通过代码框架直接封装命令来做工程开发,这一点ffmpeg是不具备的,ffmpeg需要学习API才能做工程开发,就算你会ffplay.exe或ffmpeg.exe验证某些需求,但要集成到代码,需要学习API来实现。而gstreamer只要知道的命令行实现方式,就可以马上命令行集成到代码中进行使用,当然你想代码优雅一点或者你是熟手也可以使用API来实现。
  • Gstreamer是glib实现的,跨平台的实现,windows,linux,androd,ios,macos官方原生支持,而且官方发布了windows,linux,androd,ios包,如果没有特别需求,可以直接拿发布包集成使用。而ffmpeg想支持android,ios,就需要自己做交叉编译了。
  • Gstreamer采用插件实现方式,根据业务需要可以灵活裁剪插件,可以将发布包做的非常小,特别适合在嵌入式和移动端等应用领域,而ffmpeg比较大,在嵌入领域需要自己做代码级裁剪。
  • Gstreamer 采用glib实现,用C语言来实现面向对象思维,完全不是标准C++那一套逻辑,由于要跨平台,原生的系统API都是适配封装了一套,甚至自己实现队列,MAP,容器,协程,线程,异步操作,不熟悉glib 的API话,代码理解比较困难,用惯了C++,STL,boost,感觉得这是gstream最让人反感的一点,不合主流,搞的我又要学一套API。
  • Gstreamer采用插件管理各个模块,软件框架比较复杂,采用了异步,协程编程模型,进一步增加了理解难度。

一言蔽之,与ffmpeg相比,gstreamer用起来简单,但二次开发难度大,因为框架,异步,协程等没有像ffmpeg 代码用起来那么直接和简单。而ffmpeg要理解API才能使用,用起来比较费劲,好在代码理解比较容易,不过容易和简单只是相对的,用久了深入了就容易了。

三.Gstreamer源码下载地址:

Index of /src ,

由于gstreamer采用插件方法,可以根据需要安装自己需要插件,包含很多插件库。但最以下2个库是必须的。

核心库:gstreamer    支持gstreamer核心框架的

基本库:gst-plugins-base  支持gstreamer最基本功能

在开发阶段建议还安装gst-plugins-good库(常用稳定的库),后面根据业务需要再做裁剪或者安装其他库。

四.Gstreamer二进制发布库:

Download GStreamer

包含windows,android,ios,macos的发布库下载,其中Linux版本在各个Linux发行版本的包安装管理器中下载

下载安装后以下目录(windows为例) :

其中exe就是命令行工具,dll库就是相关插件。

五.Gstreamer命令行显示

下面是命令播放视频文件的命令

gst-launch-1.0.exe playbin uri=file:///D:\\videos\\hevcdemo.ts

如果我们需要D3D 渲染采用d3dsink

gst-launch-1.0 filesrc location=D:\\videos\\test.ts ! decodebin  ! d3dvideosink

如我们需要opengl渲染采用glimagesink

gst-launch-1.0 filesrc location=D:\\videos\\test.ts ! decodebin  ! glimagesink

总之gstreamer插件丰富,用起来灵活,简单,后面再具体展开。

到此这篇关于gstreamer(一)入门和概述的文章就介绍到这了,更多相关C语言多媒体框架GStreamer内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C语言每日练习之进制转换

    C语言每日练习之进制转换

    这篇文章主要介绍了C语言进制转换,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-11-11
  • 一步步从底层入手搞定C++引用与内联函数

    一步步从底层入手搞定C++引用与内联函数

    内联函数是代码插入到调用者代码处的函数,内联函数通过避免被调用的开销来提高执行效率,下面这篇文章主要给大家介绍了关于如何从底层入手搞定C++引用与内联函数的相关资料,需要的朋友可以参考下
    2023-03-03
  • C++学习之如何进行内存资源管理

    C++学习之如何进行内存资源管理

    与java、golang等自带垃圾回收机制的语言不同,C++并不会自动回收内存,这往往会导致内存泄漏和内存溢出等问题,所以掌握C++中的内存管理技巧和工具是非常重要的,本文就来和大家详细讲讲
    2023-05-05
  • C++的静态类型检查详解

    C++的静态类型检查详解

    这篇文章主要为大家详细介绍了C++的静态类型检查,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • C语言float内存布局示例详解

    C语言float内存布局示例详解

    这篇文章主要为大家介绍了C语言float内存布局示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • C++实现简单推箱子小游戏

    C++实现简单推箱子小游戏

    这篇文章主要为大家详细介绍了C++实现简单推箱子小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-08-08
  • C语言实现电话簿项目

    C语言实现电话簿项目

    这篇文章主要为大家详细介绍了C语言实现电话簿项目,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12
  • C语言用递归函数实现汉诺塔

    C语言用递归函数实现汉诺塔

    大家好,本篇文章主要讲的是C语言用递归函数实现汉诺塔,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • 一篇文章带你了解C语言--数据的储存

    一篇文章带你了解C语言--数据的储存

    这篇文章主要介绍了C语言数据的存储和取出详细讲解,作者使用图文代码实例讲解,有感兴趣的同学可以学习研究下,希望能给你带来帮助
    2021-08-08
  • 利用Matlab制作一款3D版2048小游戏

    利用Matlab制作一款3D版2048小游戏

    2048作为一款经典的小游戏,相信很多人都玩过吧?但是3D版的2048不知道有没有人玩过呢?本文将用Matlab制作一个3D版的2048小游戏,快跟随小编一起动手试一试吧
    2022-02-02

最新评论