您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > GStreamer+010修订版
GStreamer中文站翻译(已停止更新)感谢“GStreamer中文社区”的辛勤付出。根据互联网收集整理,参考Gstreamer0.10.6stablerelease从新编辑。感谢我的辛勤付出。疏漏之处在所难免Fixbugs:ll0l00.ll000l@gmail.com(l:字母;0:数字)目录1.序言1.1.GStreamer是什么?1.2.谁需要读这个手册?1.3.预备知识1.4.本手册结构第2章动机和目标2.1.当前问题2.1.1.大量的代码复制2.1.2.“一个目标”媒体播放器/媒体库2.1.3.没有统一的插件管理机制2.1.4.拙劣的用户感2.1.5.网络透明度的规定2.1.6.与WindowsTM的产品还存在差距2.2.设计目标2.2.1.结构清晰且威力强大2.2.2.面向对象的编程思想2.2.3.灵活的可扩展性能2.2.4.支持插件以二进制形式发布2.2.5.高性能2.2.6.核心库与插件(core/plugins)分离2.2.7.为多媒体数字信号编解码实验提供一个框架3.基础概念介绍3.1.元件(Elements)3.2.箱柜(Bins)和管道(pipelines)3.3.衬垫(Pads)4.初始化GStreamer4.1.简易初始化4.2.使用GOption接口来初始化5.元件(Elements)5.1.什么是元件?5.1.1.源元件5.1.2.过滤器(Filters),转换器(convertors),分流器(demuxers),整流器(muxers)以及解码器(codecs)5.1.3.接收元件5.2.创建一个GstElement对象5.3.使用元件作为GObject对象5.4.深入了解元件工厂5.4.1.使用工厂元件来得到一个元件的信息5.4.2.找出元件所包含的衬垫5.5.链接元件5.6.元件状态6.箱柜(bin)6.1.什么是箱柜6.2.创建一个箱柜6.3.自定义箱柜7.总线(bus)7.1.如何使用一个总线7.2.消息类型8.衬垫(Pads)及其功能8.1.衬垫8.1.1.动态衬垫8.1.2.请求衬垫8.2.衬垫的功能8.2.1.分解功能8.2.2.特性与值8.3.衬垫功能的用途8.3.1.功能应用于元数据8.3.2.功能应用于过滤器8.4.精灵衬垫9.缓冲取(Buffers)和事件(Events)9.1.缓冲区9.2.事件10.你的第一个应用程序10.1.第一个Helloworld程序10.2.编译运行helloworld.c10.3.结论11.位置跟踪(Tracking)与位置偏移(Seeking)11.1.询问:得到一个流的长度或位置11.2.事件:位置查找12.元数据(Metadata)12.1.读取元数据12.2.写入标签13.接口13.1.URI接口13.2.Mixer接口13.3.Tuner接口13.4.色彩平衡(ColorBalance)接口13.5.属性探测(PropertyProbe)接口13.6.X覆盖(XOverlay)接口14.GStreamer中的时钟14.1.时钟提供者(providers)14.2.从时钟(Clockslaves)15.动态控制参数15.1.开始15.2.控制参数(parametercontrol)的设定16.线程(Threads)16.1.什么情况下你想强制一个线程?16.2.时序安排(Scheduing)的GStreamer17.自动插件(Autoplugging)17.1.识别流的MIME类型17.2.媒体流类型检测17.3.动态管道插件(Plugging)18.管道(Pipeline)控制18.1.数据探测18.2.手动增加或删除一个管道中的数据18.2.1.新增或捕获数据18.2.2.强制格式18.2.3.示例程序18.3.在你的应用程序中嵌入静态元件(staticelement)19.组件(Components)19.1.Playbin19.2.Decodebin19.3.GstEditor20.XML在GStreamer中的应用20.1.将GstElements的信息转换成XML20.2.从XML文件加载一个GstElement对象20.3.新增自定义XML标签到核心XML数据中I.介绍Gstreamer是一个非常强大而且通用的流媒体应用程序框架。Gstreamer所具备的很多优点来源于其框架的模块化:Gstreamer能够无缝的合并新的插件。但是,由于追求模块化和高效率,使得Gstreamer在整个框架上变的复杂,也同时因为复杂度的提高,使得开发一个新的应用程序显得不是那么的简单。这个指南试图帮助你了解Gstreamer的框架(version0.10.3.1)以方便你在GStreamer框架的基础上做开发。第一章节将重点关注如何开发一个简单的音频播放器,通过对整个过程的讲解,力图使你能够理解有关GStreamer的一些概念。在之后的章节中,我们将讨论一些关于媒体播放(playback)控制的高级问题,这些问题包括了录音、录象和编辑等等。第1章.序言本章将从技术的角度来描述本手册的总体结构。1.1.GStreamer是什么?GStreamer是一个创建流媒体应用程序的框架。其基本设计思想来自于俄勒冈(Oregon)研究生学院有关视频管道的创意,同时也借鉴了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是开放给程序员使用的---当程序员需要使用其他的插件来编写他所需要的应用程序的时候可以使用它。1.2.谁需要读这个手册?本手册是从一个程序开发人员的角度来描述GStreamer的:它叙述了如何利用GStreamer的开发库以及工具来编写一个基于GStreamer的应用程序。对于想学习如何编写插件的朋友们,我们建议你去参考插件编写指南(PluginWritersGuide)。1.3.预备知识为了更好的理解本手册的内容,你应该具备基本的C语言基础。由于GStreamer一直采用GObject编程模式,所以本手册也假定你已经理解了GObject的基本概念。你可能还需要一些GTK+和GDK的知识,这方面的知识你可以参照EricHarlow的书DevelopingLinuxApplicationswithGTK+andGDK。另外,当你读完本手册后,请读一下GStreamerPluginWriter'sGuide。当然,你还需要关注一下其它的GStreamer文档。1.4.本手册结构为了帮助你更好的学习本手册,我们将本手册分为几个大的部分,每一部分阐述了一个在GStreamer应用程序开发过程中特殊而又有用的话题。如下所示:PartI---GStreamer应用程序开发手册(0.10.9.1)给你一个关于GStreamer总的概况叙述。PartII---GStreamer应用程序开发手册(0.10.9.1)阐述GStreamer应用程序开发的基本概念。本章结束后,你将可以使用GStreamer来开发你自己的音频播放器。PartIII---GStreamer应用程序开发手册(0.10.9.1)我们将继续讨论一些有关GStreamer深层次的主题,这些主题告诉了我们为什么GStreamer能在众多的竞争者当中脱颖而出。我们将使用动态参数和动态接口来讨论应用程序中管道的交讯问题,我们还将讨论线程同步、时钟同步、以及其他同步问题。这些问题的讨论不仅向你讲述如何使用GStreamer的API,而且还将告诉你一些基于GStreamer应用程序开发过程中所经常遇到的问题的解决办法,通过这些知识的学习使你更加深刻的理解GStreamer的基本概念。PartIV---GStreamer应用程序开发手册(0.10.9.1)我们将进入GStreamer的高级编程领域。你不需要对GStreamer所有的细节都了解清楚,但是基本的GStreamer概念仍然是需要的。我们将讨论XML、playbin、autopluggers等话题。PartV---GStreamer应用程序开发手册(0.10.9.1)你将学习到一些有关GStreamer与GNOME、KDE、OS、X或者Windows集成的知识,当然你还将学习到一些有关调试和如何处理常见问题的方法。通过这些知识的学习,将更好的方便你使用GStreamer.第2章.动机和目标从历史的角度来看,Linux在多媒体方面已经远远落后于其他的操作系统。Microsoft'sWindows和Apple'sMacOS它们对多媒体设备、多媒体创作、播放和实时处理等方面已经有了很好的支持。另一方面,Linux对多媒体应用的综合贡献比较少,这也使得Linux很难在专业级别的软件上与MSWindows和MacOS去竞争。GStreamer正是为解决Linux多媒体方面当前问题而设计的。2.1.当前的问题我们描述了当今Linux平台下媒体处理的一些典型问题。2.1.1.大量的代码复制对于那些想要播放一个声音文件的Linux用户来说,他们必须搜索各种声音播放器来播放不同格式文件,而在这些播放器中,大部分的都一遍又一遍地重复使用了相同的代码。对于那些想在应用程序中嵌入视频剪辑的Linux开发人员来说,他们必须要用粗略的hacks来运行外部的视频播放器,因为没有一套可用的库提供给开发人员来创建可定制的播放器。2.1.2.“一个目标”媒体播放器/媒体库典型的MPEG播放器可以播放MPEG视频和音频,多数的播放器实现了完整的底层构造来达到他们的唯一目标:播放。没有一套有效的机制可以提供对于音频和视频数据过滤和效果处理,更没有制定在视频或音频数据中添加滤波器或特殊效果的任何规定。如果你希望将MPEG-2视频流转为AVI文件,那么你的最佳选择是,将所有的MPEG-2解码算法从播放器分离出来,并复制到你的AVI编码器中,因为这类算法不能简单的在应用程序之间共享。开发人员曾经尝试着创建一个可以处理多种媒体类型的库,但由于缺乏通用的API,所以如何集成就成了重要的工作了。因为在集成的过程中,我们需要关注一些特殊的媒体类型(avi文件,libmpeg2,...),而集成这些媒体类型文件需要一个统一的接口。GStreamer允许将这些库与通用的API一起打包,这样就简化了集成和复用。2.1.3.没有统一的插件管理机制典型的播放器对于不同的媒体类型会有不同的插件,两个媒体播放器会实现各自不同的插件机制,所以编解码器不能方便的交换。每一个典型的媒体播放器的插管理件系统是具有其特定应用程序的需求。缺少统一的插件机制,已经严重阻碍了二进制编解码器的发展,因为没有一家公司希望将代码移植到不同的插件机制。GStreamer当然也采用自己的插件系统,它为插件开发者
本文标题:GStreamer+010修订版
链接地址:https://www.777doc.com/doc-5342 .html