gstreamer简介

摘要:
.概述在音视频领域接触最多实现的方案通常是通过ffmpeg(PC和sever端居多)或者硬件厂家的的SDK实现特定硬件的编解码功能(机顶盒,电视等嵌入式设备)。这里我们介绍一个在国内不太常用的解决方案----gstreamer媒体库二.Gstreamer 的特点:gstreamer跟ffmpeg一样,也是一个媒体框架,可以实现采集,编码,解码,渲染,滤镜等一条龙的媒体解决方案。跟ffmpeg一样,也是有命令行工具进行测试验证。同时还可以通过代码框架直接封装命令来做工程开发,这一点ffm

.概述

在音视频领域接触最多实现的方案通常是通过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源码下载地址:

https://gstreamer.freedesktop.org/src/ ,

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

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

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

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

四.Gstreamer二进制发布库:

https://gstreamer.freedesktop.org/download/

包含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简介》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇全局变量global的用法转6iForm开发整理下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

NuGet的安装及初次使用

1、NuGet是什么?NuGet(发音:New-Get)是一个Visual Studio的扩展。在使用Visual Studio开发基于.NET Framework的应用时,NuGet能够令你在项目中添加、移除和更新引用的工作变得更加快捷方便。 2、NuGet的官网地址:http://nuget.codeplex.com/ 3、NuGet的运行环境:...

前后端分离的变化,以及前后端对接需要关注的点

1. 前言 随着互联网的高速发展,前端页面的展示、交互体验越来越灵活,响应体验也要求越来越高,后端服务的高并发、高可用、高性能、高扩展等特性的要求也愈加苛刻,从而导致前后端研发各自专注于自己擅长的领域深耕细作。 然而这带来了新的问题: 前后端的对接界面双方却关注甚少,没有任何接口约定规范情况下各自撸起袖子就是干,导致我们在产品项目开发过程中,前后端的接口联...

一种新型的低代码嵌入式系统开发平台介绍

同样使用梯形图语言编程,嵌入式开发平台的产品和PLC产品相比,优势在哪里?   (机器编程系列文章三) 嵌入君   一、概念介绍 首先介绍下“低代码开发平台”的概念,按照百度百科给出的解释如下:低代码开发平台是无需编码或通过少量代码就可以快速生成应用程序的开发平台。   按照网上给的定义,我认为,使用梯形图编程的PLC工控机的软件开发平台实际上是一种低代码...

转6iForm开发整理

6iForm开发整理实在对象如表格、Sequence、索引等建在本应用对应的用户表空间中,其他对象如视图、别名创建在Apps下,常见错误是新手把表建在APPS下,以后又来建别名,这个时候删除别名时会报对象不存在,而建别名的时候又报对象已存在如果把脚本保存在文件里面,注意一个块比如一个创建视图的语句不要有空行,否则会出现如下情况:把语句拷贝到SQL Windo...

微信小程序实质是什么? Hybrid App

  微信小程序是一种不需要下载安装即可使用的应用,用户扫一扫或者搜一下即可打开应用。微信小程序实质是Hybrid技术的应用。Hybrid App(混合模式移动应用)。 小程序能够更多的可以更多的调用手机本身的功能(如位置信息,摄像头等)。 主要技术:WXML(HTML5)、WXSS(CSS)、JavaScript;开发思路:使用app开发的数据绑定渲染的思...

十年磨一剑 Delphi再传奇

         新年伊始,英巴卡迪诺公司(Embarcadero)就在其官网发布了“激动人心的RAD Studio2018年发展规划”公告(见下图)。公告中指出,将在于2018年发布10.3.X新版本,新版本兼容Ext JS前端开发,支持快速WEB应用软件开发。这是继去年Delphi正式支持64 位 Linux 服务器应用开发之后又一个重大利好消息。英巴...