风暴俱乐部|gstreamer(一)入门概述

一.概述
在音视频领域接触最多实现的方案通常是通过ffmpeg(PC和sever端居多)或者硬件厂家的的SDK实现特定硬件的编解码功能(机顶盒 , 电视等嵌入式设备) 。 这里我们介绍一个在国内不太常用的解决方案----gstreamer媒体库
风暴俱乐部|gstreamer(一)入门概述gstreamer
二.Gstreamer 的特点:
gstreamer跟ffmpeg一样 , 也是一个媒体框架 , 可以实现采集 , 编码 , 解码 , 渲染 , 滤镜等一条龙的媒体解决方案 。
1) 跟ffmpeg一样 , gsteamer也是有命令行工具进行测试验证,同时还可以通过代码框架直接封装命令来做工程开发 , 这一点ffmpeg是不具备的 , ffmpeg需要学习API才能做工程开发 , 就算你会ffplay.exe或ffmpeg.exe验证某些需求 , 但要集成到代码 , 需要学习API来实现 。 而gstreamer只要知道的命令行实现方式 , 就可以马上命令行集成到代码中进行使用 , 当然你想代码优雅一点或者你是熟手也可以使用API来实现 。
2) Gstreamer是glib实现的 , 跨平台的实现 , windows,linux,androd,ios , macos官方原生支持 , 而且官方发布了windows,linux,androd,ios二进制包 , 如果没有特别需求 , 可以直接拿二进制发布包集成使用 。 而ffmpeg想支持android,ios , 就需要自己做交叉编译了 。
3) Gstreamer采用插件实现方式 , 根据业务需要可以灵活裁剪插件 , 可以将发布包做的非常小 , 特别适合在嵌入式和移动端等应用领域 , 而ffmpeg比较大 , 在嵌入领域需要自己做代码级裁剪 , 瘦身难度大 。
4) Gstreamer 采用glib实现 , 用C语言来实现面向对象思维 , 完全不是标准C++那一套逻辑 , 由于要跨平台 , 原生的系统API都是适配封装了一套 , 甚至自己实现队列 , MAP , 容器 , 协程 , 线程 , 异步操作 , 不熟悉glib 的API话 , 代码理解比较困难 , 用惯了C++ , STL , boost , 感觉得这是gstream最让人反感的一点 , 不合主流 , 搞的我又要学一套API 。
5) Gstreamer采用插件管理各个模块 , 软件框架比较复杂 , 采用了异步 , 协程编程模型 , 进一步增加了理解难度 。
一言蔽之 , 与ffmpeg相比 , gstream用起来简单 , 但二次开发难度大 , 因为框架 , 异步 , 协程等没有像ffmpeg 代码用起来直接和简单 , 而ffmpeg要理解API才能使用 , 用起来比较费劲 , 好在代码理解比较容易 , 不过容易和简单只是相对的 , 用久了深入了就容易了 。
三.Gstreamer源码下载地址:

由于gstreamer采用插件方法 , 可以根据需要安装自己需要插件 , 包含很多插件库 。 但最以下2个库是必须的 。
核心库:gstreamer 支持gstreamer核心框架的
基本库:gst-plugins-base 支持gstreamer最基本功能
在开发阶段建议还安装gst-plugins-good库(常用稳定的库) , 后面根据业务需要在做裁剪或者安装其他库 。
风暴俱乐部|gstreamer(一)入门概述gstreamer插件库
四.Gstreamer二进制发布库:
包含windows,android,ios,macos的二进制发布库下载 , 其中Linux版本在各个Linux发行版本的包安装管理器中下载
下载安装后以下目录(windows为例) :
风暴俱乐部|gstreamer(一)入门概述gstreamer安装库结构
其中exe就是命令行工具 , dll库就是相关插件 。
五.Gstreamer命令行显示


推荐阅读