gstreamer :开源的多媒体框架库

更新时间:2024-09-21 05:16

GStreamer是一个开源的多媒体框架库,基于管道设计,可以将各种媒体处理系统链接在一起,完成复杂的工作流程。它支持多种媒体处理组件,包括简单的音频回放、音频和视频播放、录音、流媒体和音频编辑等。

GStreamer的设计目标是简化音/视频应用程序的开发,已经能够处理多种格式的多媒体数据,如MP3、Ogg、MPEG1、MPEG2、AVI、Quicktime等。GStreamer可以在多种操作系统上运行,如BSD、OpenSolaris、AndroidMac OSIOS、Windows和OS/400等。GStreamer是免费的开源软件,遵循LGPL-2.1或更高版本的条款,并托管在freedesktop.org上。

历史发展

GStreamer由Erik Walthinsen于1999年创立,核心设计思想来自俄勒冈研究所的一个研究项目。Wim Taymans随后加入了该项目,并在系统的许多方面大大扩展了它。自那时以来,许多其他软件开发人员也做出了贡献。第一个重大发布是0.1.0,它于2001年1月11日宣布。不久之后,GStreamer获得了第一个商业支持者。

在2001年底,他们聘请了Erik Walthinsen,开发了将GStreamer嵌入较小(手机级)设备的方法。RidgeRun的另一名员工Brock A. Frazier设计了GStreamer的标志。RidgeRun后来陷入财务困境,不得不裁员,包括Erik Walthinsen。GStreamer的进展基本上没有受到影响。

该项目发布了一系列重大版本,0.2.0于2001年7月发布,0.4.0于2002年9月发布,0.8.0于2004年3月发布。在此期间,该项目还改变了其版本策略,而最初的发布只是新版本,后来中间数字开始表示发布系列。这意味着该项目发布了一系列0.6.x和0.8.x版本,旨在在这些发布系列内保持二进制兼容。在此期间,Erik Walthinsen在很大程度上放弃了GStreamer的开发,转而专注于其他事业。

所有的发布系列,该项目都面临困难。每个系列在Linux社区中并不受欢迎,主要是因为稳定性问题和与竞争项目(如Xine、MPlayer和VLC Media Player)相比严重缺乏功能。该项目还面临领导层的缺乏,因为自Erik Walthinsen离开后,项目负责人Wim Taymans基本上停止了参与。

2004年,成立了一家新公司Fluendo,希望使用GStreamer编写流媒体服务器Flumotion,并为GStreamer提供多媒体解决方案。在此期间,Fluendo聘请了大部分核心开发人员,包括Wim Taymans,并吸引了诺基亚英特尔等公司的支持,将GStreamer提升到专业水平并推动社区采用。

在Wim Taymans重新掌舵的情况下,GStreamer的核心进行了重新设计,成为当前的0.10.x系列,该系列于2005年12月首次发布(0.10.0)。自那时以来,它一直保持API和ABI兼容性。

有了一个新的稳定核心,2006年,GStreamer变得越来越受欢迎,被媒体播放器(包括Totem、Rhythmbox和Banshee)使用,随后还有更多的应用程序。它还被诺基亚摩托罗拉德州仪器飞思卡尔、Tandberg和英特尔等公司采用。

2007年,大部分核心GStreamer开发人员离开了Fluendo,包括GStreamer维护者Wim Taymans,他与其他GStreamer老将一起共同创立了Collabora Multimedia,而其他人则加入了Sun Microsystems、Oblong Industries和Songbird。

2012年6月至2014年8月,Collabora和Fluendo还将GStreamer 0.10作为多平台SDK分发,放在第三方网站gstreamer.com上(而不是gstreamer.freedesktop.org上的上游社区项目)。该目标是为应用程序开发人员提供一个在Windows、Mac OS X、iOS和Android上功能相同的SDK。sdk计划旨在促进GStreamer项目的商业采用,因为它提供了一个标准化的入口点,可以使用GStreamer开发多媒体应用程序,而无需自行构建整个平台。SDK的用户还可以从该SDK的文档、教程和特定于该SDK的说明中受益。

GStreamer 1.0于2012年9月24日发布。1.x系列可以与GStreamer 0.10并行安装,提供了许多优于0.10系列的架构优势。一般来说,GStreamer 1.0为以下方面带来了显著改进:支持嵌入式处理器,降低功耗,将工作卸载到专用硬件单元(如DSP);使用GPU进行硬件加速的视频解码/编码;零拷贝内存管理(避免CPU和GPU之间不必要的往返),以获得更好的性能和更低的功耗;动态管道;API和代码清理。

除了技术上的改进,1.x系列还通过新的发布版本方案进行了定义。正如GStreamer路线图所解释的那样,所有1.x.y版本都带有-1.0 API版本后缀,并具有稳定的API/ABI。API/ABI只能通过新的主要发布系列(即2.x)来打破;然而,目前没有2.0发布系列的计划。在那之前,新的版本编号方案可以用来预测每个发布的预期用途。路线图引用了一些例子:

1.0.0、1.0.1、1.0.2、1.0.3稳定发布和后续bug修复发布。

1.1.0、1.1.1、1.1.2、1.1.3预发布,导致1.2.0的开发版本。

1.2.0、1.2.1、1.2.2、1.2.3稳定发布和后续bug修复发布。

1.3.0。

1.4.0等等。

2013年3月,GStreamer项目维护者发布了一份声明,澄清了0.10系列不再维护的事实。该声明重申了GStreamer项目愿意帮助应用程序和插件开发人员迁移到新技术,并暗示那些仍然认为切换到1.x系列不可能的人可以寻求各种咨询公司的帮助。

1.2版本增加了对DASH自适应流媒体、JPEG 2000图像、VP9和Daala视频以及WebP的解码支持。

1.14版本于2018年3月19日发布,增加了对WebRTC、AV1、英伟达 NVDEC和安全可靠传输等的支持。

1.22版本于2023年1月23日发布,增加了对AV1的改进支持,以及对HLS、DASH和微软 Smooth Streaming的自适应比特率流媒体的支持。

应用简介

GStreamer 是 GNOME 桌面环境下用来构建流媒体应用的多媒体框架(framework),其目标是要简化音/视频应用程序的开发,目前已经能够被用来处理像 MP3、Ogg、MPEG1、MPEG2、AVI、Quicktime 等多种格式的多媒体数据。

GStreamer是一个开源的多媒体框架库。利用它,可以构建一系列的媒体处理模块,包括从简单的ogg播放功能到复杂的音频(混音)和视频(非线性编辑)的处理。

应用程序可以透明的利用解码和过滤技术。开发者可以使用简洁通用的接口来编写一个简单的插件来添加新的解码器或滤镜。

GNOME桌面环境是GStreamer的重度用户,自GNOME 2.2版本以来一直包含GStreamer,并鼓励GNOME和GTK应用程序使用它。其他项目也使用或支持它,如Phonon媒体框架和Songbird媒体播放器。它还用于WebKit浏览器引擎。GStreamer还在Jolla手机、Palm Pre、Tizen和诺基亚 770、N800、N810、N900和N9互联网平板电脑上运行Maemo操作系统等嵌入式设备中。除了源代码发布外,GStreamer项目还为Android、iOS、OSX和Windows提供二进制构建。LIGO实验室利用GStreamer来模拟和分析引力波数据。GStreamer接口称为GstLAL。

GStreamer通过将许多处理元素连接成管道来处理媒体。每个元素由插件提供。元素可以分组到容器中,进而形成分层图。元素通过端口进行通信。一个元素上的源端口可以连接到另一个元素上的接收端口。当管道处于播放状态时,数据缓冲区从源端口流向接收端口。端口使用能力来协商将要发送的数据类型。

GStreamer插件提供了对各种文件格式、协议和多媒体编解码器的支持。通过gst-libav插件,GStreamer还提供了对100多种压缩格式(包括MPEG-1、MPEG-2、MPEG-4、H.261、H.263、H.264、RealVideo、MP3、WMV等)的透明支持。

应用特点

GStreamer是一个创建流媒体应用程序的框架。其基本设计思想来自于俄勒冈(俄勒冈大学)研究生学院有关视频管道的创意, 同时也借鉴了DirectShow的设计思想。

GStreamer的程序开发框架使得编写任意类型的流媒体应用程序成为了可能。在编写处理音频、视频或者两者皆有的应用程序时, GStreamer可以让工作变得简单。GStreamer并不受限于音频和视频处理, 它能够处理任意类型的数据流。管道设计的方法对于实际应用的滤波器几乎没有负荷, 它甚至可以用来设计出对延时有很高要求的高端音频应用程序。

GStreamer最显著的用途是在构建一个播放器上。GStreamer已经支持很多格式的文件了, 包括: MP3、Ogg/Vorbis、MPEG-1/2、AVI、Quicktime、 mod等等。从这个角度看,GStreamer更象是一个播放器。但是它主要的优点却是在于它的可插入组件能够很方便的接入到任意的管道当中。这个优点使得利用GStreamer编写一个万能的可编辑音视频应用程序成为可能。

GStreamer框架是基于插件的, 有些插件中提供了各种各样的多媒体数字信号编解码器,也有些提供了其他的功能。所有的插件都能够被链接到任意的已经定义了的数据流管道中。GStreamer的管道能够被GUI编辑器编辑, 能够以XML文件来保存。这样的设计使得管道程序库的消耗变得非常少。

GStreamer核心库函数是一个处理插件、数据流和媒体操作的框架。 GStreamer核心库还提供了一个API, 这个API是开放给程序员使用的---当程序员需要使用其他的插件来编写他所需要的应用程序的时候可以使用它。

技术概述

应用功能

插件

GStreamer使用插件架构,将大部分功能实现为共享库。GStreamer的基本功能包含用于注册和加载插件的函数,以及以基类形式提供所有类的基础类。插件库会动态加载以支持各种编解码器、容器格式、输入/输出驱动程序和效果。当首次需要时,插件可以被半自动步枪安装。为此,发行版可以注册一个后端,将功能描述解析为软件包名称。个别发行版可能会进一步对这些插件进行分类:例如,Ubuntu将“坏家伙”和“丑家伙”组合到“宇宙”或“多宇宙”组件中。此外,还有一个GStreamer FFmpeg插件(出于历史原因称为gst-libav),它扩展了支持的媒体格式数量。

视频加速

GStreamer支持多种SIP块进行视频编解码器的硬件加速,如PureVideo、UVD、QuickSync Video、TI Ducati等。这需要设备驱动程序的支持,驱动程序提供一个或多个接口,如VDPAU、VAAPI、分布式编解码引擎或DXVA,供终端用户软件访问此硬件并将计算卸载到它上面。OpenMAX IL包装插件gst-omx可以在GStreamer中使用Video Coding Engine,例如在树莓派上实现。德州仪器SoC上的SIP核心也可以通过GStreamer访问:gst-dmai、gst-openmax、gst-dsp。GNOME视频\u003e= 2.28.0和GStreamer\u003e= 0.10.26自2010年起支持VDPAU和VAAPI。GStreamer还支持broadcom Crystal HD。

参考资料

免责声明
隐私政策
用户协议
目录 22
0{{catalogNumber[index]}}. {{item.title}}
{{item.title}}
友情链接: