ardupilot开发 --- Gstreamer 篇

1. Gstreamer

官方文档:GStreamer: a flexible, fast and multiplatform multimedia framework

1.1 在Ubuntu上安装gstreamer

apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio

1.2 一些概念

  • 什么是视频流Stream
    Playing media straight from the Internet without storing it locally is known as Streaming
  • GStreamer是一个用于处理多媒体流的框架。媒体从“source”元素(媒体数据来源)传播到“sink”元素(媒体数据使用者),通过一系列执行各种任务的中间元素element。所有相互连接的元素的集合被称为“管道”pipeline。除了source元素和sink元素,其他元素统称为 filter 元素。
  • playbin是一个特殊的element
    playbin它既是source元素,又是sink元素,是一个完整的管道。在内部,它会自动创建并连接了播放媒体所需的所有元素,因此您手动配置element。
  • bin是一个容器元素。你可以将多个元素添加到bin中。由于bin本身就是一个元素,所以可以像处理其他元素一样处理bin,Bin允许您将一组已链接好的elements组合为一个logical element,这样你可以不再处理单个元素,只处理一个元素,即bin。我们将看到,当你要构建复杂的管道时,这是非常强大的,因为它可以将管道分解成更小的块。
    在这里插入图片描述

1.3 解析

  • gst-launch-1.0是调试工具,一般在shell中使用;构建程序时候一般使用gst_parse_launch()函数;

  • 一个特殊的element:playbin
    playbin它既是source元素,又是sink元素,是一个完整的管道。在内部,它会自动创建并连接了播放媒体所需的所有元素,因此您手动配置element。playbin支持所有可以的媒体数据来源,包括本地文件file、http、https、rtsp流等等。例如:

  • 自动配置一个完整的pipeline就使用playbin元素,那么如何手动配置一个完整的pipeline呢?
    通过实例化每个元素并将它们全部链接在一起,手动构建一个管道。
    通过这个过程可以了解以下知识点:

    • 什么是GStreamer element以及如何创建它。
    • 如何将element相互连接(link)。
    • 如何自定义element的行为。
  • 如何监视管道的错误情况并从GStreamer消息中提取信息。

  • pipeline的基本结构
    在这里插入图片描述
    example:
    在这里插入图片描述

  • 创建一个元素,如:
    source = gst_element_factory_make (“videotestsrc”, “source”);
    sink = gst_element_factory_make (“autovideosink”, “sink”);
    第一个参数是 element 的类型,
    一些常用的element类型:basic-tutorial-14-handy-elements
    所有可用的element:plugins
    第二个参数是element实例的名称;

  • pipeline是一个特殊的bin,所有适用于bin的用法都适用于pipeline

  • 向pipeline添加element
    逐个添加:gst_bin_add()
    添加多个:gst_bin_add_many()

  • 将pipeline中的所有element一次连接起来:gst_element_link()

  • element本质上是一个GObject(C++对象?),具有属性property
    对于可写属性,可以自定义这些property的值;对于可读属性可以读取:
    g_object_set() 如:g_object_set (source, “pattern”, 0, NULL);
    g_object_get()
    查看某元素的所有属性名称和值,可以使用调试工具:gst-inspect-1.0
    或者在element的所属文档介绍中查看,如videotestsrc元素的文档doc_videotestsrc就可以查看它所有的属性。

  • bus、pad、capabilities、Buffers、Events
    参考:Building an Application

  • 元素支持哪些媒体格式?元素的Pad Capabilities有什么作用?
    Pad Capabilities简称pad caps;
    简而言之:pad caps 是决定了哪些格式的媒体数据可以流经某element
    pads 是根据Pad templates创建的,Pad templates有助于创建几个类似的pad,由相同Pad templates创建的两个pad才可以链接起来,不然后链接失败。
    Capabilities examples:
    在这里插入图片描述

  • 如何将应用程序的数据注入管道?如何将数据从管道中提取回应用程序?
    注入:appsrc
    提取:appsink

  • GStreamer工具
    GStreamer提供了一套工具,从方便到绝对必要:

    • 如何从命令行构建和运行GStreamer管道,而不使用C语言
    • 如何找出可用的GStreamer元素及其功能。
    • 如何发现媒体文件的内部结构。
gst-launch-1.0
gst-inspect-1.0
gst-discoverer-1.0

创建、调试管道:
gst-launch-1.0
查看元素、pad、caps:
gst-inspect1.0
查看某个文件、rtsp视频流、http文件包含哪些媒体类型,需要哪些元素,了解哪些容器和编解码器被用于制作媒体,以及需要在管道中放入哪些元素才能播放媒体:
gst-discoverer-1.0
discoverer tool

  • 16
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值