1 Gstreamer 的特点
gstreamer 是一个媒体框架,可以实现采集,编码,解码,渲染,滤镜等一条龙的媒体解决方案。
用命令行工具进行测试验证,还可以通过代码框架直接封装命令来做工程开发,这一点 ffmpeg 是不具备的
Gstreamer 是 glib 实现的,跨平台的实现,windows,linux,androd,ios,macos 官方原生支持,而且官方发布了 windows,linux,androd,ios 二进制包,如果没有特别需求,可以直接拿发布二进制包集成使用。而 ffmpeg想支持 android,ios,就需要自己做交叉编译了。
Gstreamer 采用插件实现方式,根据业务需要可以灵活裁剪插件,可以将发布包做的非常小,特别适合在嵌入式和移动端等应用领域。
Gstreamer 采用 glib 实现,用 C 语言来实现面向对象思维,完全不是标准 C++那一套逻辑,由于要跨平台,原生的系统 API 都是适配封装了一套,甚至自己实现队列,MAP,容器,协程,线程,异步操作,不熟悉 glib 的 API 话,代码理解比较困难
Gstreamer 采用插件管理各个模块,软件框架比较复杂,采用了异步,协程编程模型,进一步增加了理解难度。
gstreamer 用起来简单,但二次开发难度大,因为框架,异步,协程等没有像 ffmpeg 代码用起来直接和简单。
2 gst-inspect-1.0 测试
gstreamer 开发中,一般开发思路为:寻找命令行实现--命令行验证--将命令行集成到代码中---代码工程化。当然如果你要代码更优雅一点,可以用命令行用对应的 API 来实现。本节来总结一下 gstreamer 的常用使用过程。
gst-inspect 可以查看插件或者元素,输入以下命令查看所有元素
gst-inspect-1.0 查看并过滤相关元素,输入以下命令,如下图所示: gst-inspect-1.0 |grep xxxx
查看某一个元素,输入以下命令,如下图所示: gst-inspect-1.0 xxx
输入以下命令查看黑名单元素,通常某些插件的依赖库不存在,gstreamer 会将它列入黑名单,不可使用,通过该命可以追踪某些异常的插件。 gst-inspect-1.0 -b
3 gstreamer 日志级别设置 gst 的日志等级分为 none(0)error(1) warning(2) info(3) debug(4) log(5)。默认 gst 的日志等级为 1,即 error打印,出错时会打印。
1)全局日志级别设置
如果需要更高级别打印,修改环境变量 GST_DEBUG 即可。如需要 warning 级别打印,配置 exportGST_DEBUG=2 ,如图所示,在使用 gstreamer 会有 warning 日志产生。 2)某个插件日志级别设置 set GST_DEBUG=GST_AUTOPLUG:5,GST_ELEMENT_*:4,d3dvideosink:3即自动插件为 5,所有元素默认为 4,d3dvideosink 元素为 3。
3)日志打印函数
日志打印函数 GST_ERROR(),GST_WARNING(),GST_INFO(),GST_LOG()和 GST_DEBUG()宏。它们就像 printf 一样可以接受一些参数并且它们是使用默种类的
4)日志另存为文件,配置环境变量 GST_DEBUG_FILE=文件路径。如:Set GST_DEBUG_FILE = C:\\test.log。日志就重定向到 C:\\test.log 文件里。
5)GST_REGISTRY_UPDATE 环境变量用来查找插件是否更新,即是否重新扫描去更新 cache 内容,将这个环境变量的值设置成”no”,这样 gstreamer 框架在初始化的时候就不会检查 plugin 的更新,这样可以加速启动。
输入以下命令:
Set GST_REGISTRY_UPDATE=”no”4 播放音频和视频
Gplay 是基于 Gstreamer 实现的音视频播放器,他能够自动根据硬件自动选择合适的插件进行音视频播放,运行也十分简单,我们输入以下命令播放 mp4 视频。
gst-play-1.0 /gstreamer/video/1080p_30fps_h265.mp4 我们也可以使用 gst-launch 工具播放音视频,gst-launch 是开发者在开发阶段常用的调试工具,相比Gplay 而言,它更加灵活 我们使用以下命令播放音频,此时我们插上耳机可以听到音乐。
gst-launch-1.0 filesrc location=/gstreamer/audio/test.mp3 ! id3demux ! queue ! mpegaudioparse ! decodebin !
audioconvert ! audioresample ! pulsesink
我们输入以下命令播放视频(没有音频播放)
gst-launch-1.0 filesrc location=/gstreamer/video/1080p_30fps_h265.mp4 typefind=true ! \
video/quicktime ! aiurdemux ! queue max-size-time=0 ! vpudec ! imxvideoconvert_g2d ! \
video/x-raw, format=RGB16, width=1024, height=600 ! waylandsink
我们也可以使用 gst-launch 工具播放音视频,gst-launch 是开发者在开发阶段常用的调试工具,相比Gplay 而言,它更加灵活
我们使用以下命令播放音频,此时我们插上耳机可以听到音乐。
gst-launch-1.0 filesrc location=/gstreamer/audio/test.mp3 ! id3demux ! queue ! mpegaudioparse ! decodebin !
audioconvert ! audioresample ! pulsesink
我们输入以下命令播放视频(没有音频播放)
gst-launch-1.0 filesrc location=/gstreamer/video/1080p_30fps_h265.mp4 typefind=true ! \
video/quicktime ! aiurdemux ! queue max-size-time=0 ! vpudec ! imxvideoconvert_g2d ! \
video/x-raw, format=RGB16, width=1024, height=600 ! waylandsink 我们同时播放音频和视频,输入以下命令: gst-launch-1.0 filesrc location=/gstreamer/video/1080p_30fps_h265.mp4 typefind=true ! \
video/quicktime ! aiurdemux name=demux demux. ! queue max-size-buffers=0 \
max-size-time=0 ! vpudec ! imxvideoconvert_g2d ! video/x-raw, format=RGB16, width=1024, \
height=600 ! waylandsink demux. ! queue max-size-buffers=0 max-size-time=0 \
! decodebin ! audioconvert ! audioresample ! pulsesink
更多内容:公众号关注迅为电子
|