• 迅为IMX8MM开发板Yocto系统使用Gstarwmra(一)


    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


    更多内容:公众号关注迅为电子

  • 相关阅读:
    CI持续集成系统环境--Gitlab+Gerrit+Jenkins完整对接
    解惑|你是否为容器监控操碎了心?
    4 使用smartcar进行仿真
    1 简单的ROS机器人仿真
    1 rbx1 Kinetic 安装和测试
    2020.4.13 Resources
    2. dwa_local_planner_params.yaml 参数意义
    robotics
    PCL 点云处理
    C++异常处理解析
  • 原文地址:https://www.cnblogs.com/liyue3/p/15992673.html
Copyright © 2020-2023  润新知