在音视频领域接触最多实现的方案通常是通过ffmpeg(PC和sever端居多)或者硬件厂家的的SDK实现特定硬件的编解码功能(机顶盒,电视等嵌入式设备)。这里我们介绍一个在国内不太常用的解决方案----gstreamer媒体库
gstreamer跟ffmpeg一样,也是一个媒体框架,可以实现采集,编码,解码,渲染,滤镜等一条龙的媒体解决方案。
一言蔽之,与ffmpeg相比,gstreamer用起来简单,但二次开发难度大,因为框架,异步,协程等没有像ffmpeg 代码用起来那么直接和简单。而ffmpeg要理解API才能使用,用起来比较费劲,好在代码理解比较容易,不过容易和简单只是相对的,用久了深入了就容易了。
由于gstreamer采用插件方法,可以根据需要安装自己需要插件,包含很多插件库。但最以下2个库是必须的。
核心库:gstreamer 支持gstreamer核心框架的
基本库:gst-plugins-base 支持gstreamer最基本功能
在开发阶段建议还安装gst-plugins-good库(常用稳定的库),后面根据业务需要再做裁剪或者安装其他库。
包含windows,android,ios,macos的发布库下载,其中Linux版本在各个Linux发行版本的包安装管理器中下载
下载安装后以下目录(windows为例) :
其中exe就是命令行工具,dll库就是相关插件。
下面是命令播放视频文件的命令
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插件丰富,用起来灵活,简单,后面再具体展开。