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
- 常用的element
handy-elements