没有合适的资源?快使用搜索试试~ 我知道了~
gstreamer 插件開發
5星 · 超过95%的资源 需积分: 12 13 下载量 40 浏览量
2014-03-13
17:01:14
上传
评论
收藏 516KB DOC 举报
温馨提示
gstreamer 插件開發 GStreamer 插件开发指南 (0.10.9.1)
资源推荐
资源详情
资源评论
GStreamer 插件开发指南 (0.10.9.1)
I. 介绍
是一个用来创建流媒体应用程序的非常强大和通用的框架。 框架的许多优点
来源于它的模块性 : 可以无缝地接纳新的插件模块。但是由于模块性和强大的功能通常
以极高的复杂性为代价(例如 ),编写一个新的插件并不总是一件简单的事。
本手册旨在帮助你了解 的框架 版)以便你能够开发新的插件来扩展当前的功能。
本手册通过用 语言开发一个示例插件──一个音频过滤器──来定位大多数问题。然而,接下来的
部分会通过编写其它类型的插件引入另一些问题,在本手册的结尾介绍了一些 的
绑定。
目录
前言
是什么?
谁应该读该指南
预备知识
该指南的结构
基本知识
元件( )和插件( )
衬垫( ! )
数据( " ),缓冲区( # )和事件( $ )
缓冲区分配
%&%
类型( % ' )和属性
基本类型
Chapter 1. 前言
1.1. GStreamer 是什么?
是一个创建流媒体应用程序的框架。其基本设计思想来自于俄勒冈()研究生学院
有关视频管道的创意*同时也借鉴了 " +, 的设计思想。
的开发框架使它有可能被用来编写任何类型的流媒体应用程序。基于 的程序
开发框架使得编写任意类型的流媒体应用程序成为了可能。在编写处理音频、视频或者两者皆有的应
用程序时* 可以让你的工作变得简单。 并不受限于音频和视频处理*它能够处
理任意类型的数据流。管道的设计对于一般应用的滤镜(-)绰绰有余。这使得 成为
一个优秀的框架,它甚至可以用来设计出对延时有很高要求的高端音频应用程序。
最显著的用途是在构建一个播放器上。 已经支持很多格式的文件了*包
括.%*/01 *%2/*0&*3 +4 *! 等等。从这个角度看* 更象是
一个播放器。但是它主要的优点确是在于.它的可插入组件能够很方便的接入到任意的管道当中。这个
优点使得利用 编写一个万能的可编辑音视频应用程序成为可能。
框架是基于插件的*有些插件中提供了各种各样的多媒体数字信号编解码器*也有些提供了
其他的功能。所有的插件都能够被链接到任意的已经定义了的数据流管道中。 的管道能够
被 5& 编辑器编辑*能够以 6%7 文件来保存。这样的设计使得管道程序库的消耗变得非常少。
核心库函数是一个处理插件、数据流和媒体操作的框架。 核心库还提供了一
个 &*这个 & 是开放给程序员使用的222当程序员需要使用其他的插件来编写他所需要的应用程序的
时候可以使用它。
1.2. 谁应该读该指南?
该指南叙述了如何为 编写新的模块。本指南针对以下几种人:
那些想给 增加新的数据处理方法的人。例如,可能有人想创建一个新的可见的工
具222数据类型转换器,或者新的编码器或者解码器。
那些想支持新的输入输出设备的人。例如:某人可能会想增加将数据输出到新的视频输出系统
或从一个数码相机或耳机中读取数据的功能。
那些想通过任何方法扩展 的人。你必须事先了解插件系统是如何工作的,这样你才
能知道插件系统对其它代码有什么限制。读完了该手册,你也许会因为插件可以做如此多的事
而感到惊讶。
如果你只是想使用 的已有功能,或者只想使用那些基于 程序,那么你可以不
用再看下去了。如果你只关注与使用现有的插件去便写新的程序──现在有许多这样的插件──你也
许想看的是
《
GStreamer
应用程序开发手册》
如果你只是想获得那些基于 的程序的帮助,
那么你应该查看那些程序的用户手册。
1.3. 预备知识
该指南假定你已经稍微了解了 的基本工作原理。你也许希望首先阅读
《
GStreamer
应用
程序开发手册》
,以便获得对 编程概念的了解。另外,不要忘了查看
网站 上
的已有文档。
为了理解这份手册,你必须对 语言有一个基本的了解。因为 是基于 18+ 编程模型,
所以本指南假定你也已经对 18+
编程有了一个基本的了解。你或许也想看一下 +9,: 的
《
Developing Linux Applications with GTK+ and GDK
》
一书。
1.4. 该指南的结构
为了帮助你驾驭这份指南,我们将其分为几个大的部分。每一部分致力于一个特定的 插件
开发相关的广泛概念。该指南的所有部分按照以下顺序组织:
编写一个插件 ── 介绍插件的结构,并用一个音频滤镜作为演示。
这一部分涵盖了编写一个插件的所有基本步骤,例如将 注册到 并进行一
些初步设置以便能和相邻的 互传数据。讨论以一个示例程序开始,该程序创建一些基
本的结构并在构建样板一节中注册一个 。接着,你将在 '*';
和
'<
中学会怎样通过一段代码得到一个基本的滤镜插件。
随后,在增加参数和 '=
中,我们将演示如何使用 18+ 使 在程序中可配
置,以及怎样使你的程序和 交互。下一步,你将学习如何快速的创建一个测试程序来
测试你在 '
所学的所有知识。这里只涉及一些应用程序开发的基本知识,要想对此有
一个全面的了解,请查看应用程序开发手册。
高阶滤镜概念 ── 插件开发的高级特性信息。
通过对初步知识的学习,你应该能够创建一个有很好的特性的音频或视频过滤器插件了。然而,
为插件编写者提供了更多的东西。这一部分的章节包含了一些更高级的主题。例如
调度, 的类型定义,时钟,接口和标签。因为这些特性是针对特定应用的
(''2'+ -+),你可以按任何顺序阅读它们,它们大多不依赖于其他章节的知识。
在该部分的第一章不同的调度模式 我们将解释一些 调度的基本知识。这部分不会很深
入,只是一种介绍性的阐述为什么那些东西会那样工作。如果你对 的内部感兴趣,
请阅读这一章。接下来,我们将这一知识运用于另一种类型的数据传输 ';:不同的调
度模式基于环路的(7'21!)元件将让你能对其输入速率有更多的控制。这些在编写
> 或 !> 时是很有用的。
下一步,我们将在 '
中讨论 媒体标识。你将学到怎样定义新的媒体类型
及得到 内部的标准媒体类型列表。
在下一章,你将学习 ?2'! 和 2'! 的概念,这些 '! 都是动态创建的,
或者是因为应用程序的需要(?),或者是因为媒体类型的要求( ),这些
都将在 '
中叙述。
接着,在 ',将解释 中的时钟概念。如果你的 中需要同步音
视频,你必须知道这些信息。
接下来的几章,我们将讨论应用程序和 进行交互的高级方法。之前,我们在添加参数
和 '=
中学会了如何通过 18+ 的方法来完成这一功能。我们将在 ';
中讨
论动态参数,这是一种预先定义 行为的方法。下一步,我们会在 '@
中学习
到接口的方方面面。接口是个非常特别的东西2应用级元件的特定方式,基于 18+ 的
&A+ 之上。最后,你将在 '=
中学到 是怎样处理元数据的。
在最后一章,'
中,将讨论 的事件机制。一方面,事件也是应用程序和
间交互的方法,例如定位事件。另一方面,事件也是 间进行交互的一种方法,
例如, 可以通过事件传递媒体流断开的状况,在管道内转发标签等等。
创建特殊类型的元件 ── 编写其它类型的插件
由于前两部分以一个音频过滤器为例,所介绍的概念可以运用到过滤器插件的开发中。同时许
多概念也可以运用到 +* 4 和 ' 等其它类型的插件中。这一部分讨论编
写其他特定类型的插件会碰到的问题。本章开始将焦点集中在可以使用基类(2!1
+)编写的 上。接下来,在 写一个
">
或
*写一个
B22
元件
或
%>
和写一个管理器中,讨论编写特殊的元件。
附录 ── 关于插件开发的进一步信息
附录中包含一些不适合在手册的其它章节讲述的信息,这些大部分还没有完成。
手册的剩余部分总揽了 插件开发中的基本概念,涵盖的内容包括元件( )和插
件( ) *衬垫*数据( " ),缓冲区( # )和事件( $ ) 和 类型和属性。如果你
已经熟悉了对这一部分,你可以将之当作一次回顾,或者直接跳到编写一个插件。
正如你所见,我们有许多的东西需要学习,让我们就此开始吧!
通过扩展 创建复杂的 ,这样可以创建包含其它插件的插件。
通过在类型侦测函数('!+A+ )中加入新的 类型,可以让你的插件处理
全新的媒体类型。
Chapter 2. 基础概念介绍
本章介绍 的基本概念。掌握了这些基本概念将有助于你解决在扩展 时遇到的
问题。关于这些概念的更详尽的解释请参考 GStreamer
应用程序开发指南
;这些基本概念放在这儿
主要是为了帮助你回顾一遍。
2.1. 元件和插件
元件是 的核心。在插件的开发中,一个
元件
就是继承于
的一个对象。元件
在与其他元件连接时提供了如下一些功能 :例如,一个源元件为一个流提供数据,一个滤镜元件对流
中的数据进行操作。没有了元件, 只是一堆概念性的管道,没有任何东西可供连接 。
已经自带了一大堆元件,但是我们仍然可以编写额外的元件。
然而,仅仅写一个新的元件并不够,为了使 能够使用它,你必须将元件封装到一个
插件
中。
一个插件是一块可以加载的代码,通常被称为共享对象文件(!18+-)或动态链接库
(! + 4! 1)。一个插件中可以包含一个或若干 。为简单起见,本手册
主要涉及只包含一个 的插件。
滤镜
是一类处理流数据的重要插件。数据的生产者和消费者分别被称为 source 和 sink 元件。
箱柜
(
Bin
)
元件可以包含其它的元件。箱柜的主要职责是调度它包含的元件并使得数据流更平滑。
热插拔
(
autoplugger
)
元件是另一种箱柜,它可以动态的加载其它元件,并将它们连接起了形成一个可以
处理两个任意流的滤镜。
充斥着插件的概念,即使你只使用到一些标准的包。核心库中只有少量基本函数,其它
所有的功能都由插件来实现。一个 6%7 文件被用来保存所有注册的插件的详细信息。 这样,使用
的程序可以只在需要时加载插件,而不必事先全部加载。插件也只在需要它们的元件时才
被加载。
查阅 GStreamer
库索引
来获取
和
的当前实现细节。
2.2. 衬垫(Pads)
在 中,
衬垫
是用来在元件间协商连接和数据流的。衬垫可以看作元件间互相连接的 “接口”,
数据流通过这些接口流入流出元件。! 具有特殊的数据处理能力:衬垫可以限制通过它的数据类型。
只有当两个衬垫允许通过的数据类型兼容时才可以将它们连接起来。
也许打一个比方可以有助于理解这些概念。衬垫类似于物理设备上的 '8+4。想象一个包含
功放,"0" 播放器和一个视频投影仪器的家庭影院系统。将投影仪和 "0" 播放器相连是允许的,因
为这两个设备具有兼容的 $ !8+4。而要将投影仪和功放连起来也许就行不通了,因为它们之间的
8+4 不同。 中的衬垫具有和家庭影院系统中的 8+4 相同的功能。
大部分情况下,所有在 中流经的数据都遵循一个原则。数据从 的一个或多个
源
衬垫
流出,从一个或多个 sink
衬垫
流入。源和 4 元件分别只有源和 4 衬垫。
查阅 GStreamer
库索引
来获取 !
的当前实现细节。
2.3. 数据,缓冲区和事件
中的所有数据流被分割成一块一块的,并从一个元件的源衬垫传到另一个元件的 4 衬
垫。
数据
就是用来承载一块一块数据的数据结构。
数据包含以下的重要组成部分:
一个类型域标识该数据的准确类型(+*+*)。
一个指示当前有多少元件引用缓冲区的引用计数器。当计数器的值为 时,缓冲区将被销毁,
内存被释放(更详细的细节看下面)。
当前存在两种数据类型:事件(+)和缓冲区(+)。
缓冲区可以包含两个相连接的 '! 所能处理的任何数据。通常,一个缓冲区包含一块音频或视频数据
块,该数据块从一个元件流向另一个元件。
缓冲区同样包含描述缓冲区内容的元数据(!)。一些重要的元数据类型有:
一个指向缓冲区数据的指针。
一个标识缓冲区数据大小的整型变量。
一个指示缓冲区的最佳显示时间的时间戳。
事件包含两个相连的衬垫间的流的状态的信息。只有事件被元件显式地支持时它们才会被发送,否则
核心层将(尝试)自动处理事件。举例来说,事件会被用来表示一个时钟中断,媒体流的结束或高速
缓冲区(++)需要刷新。
事件结构可能会包含如下的成员:
一个用来标明事件类型的子类型。
事件类型相关的其他部分。
事件将在 '
一章中广泛讨论。在那之前,只会涉及
流结束(
EOS
)
事件,该事件通常在文
件结束时发出,标识流的结束。
查阅 GStreamer
库索引
来获取 % 18+*#
和 $
的当前实现细节。
2.3.1. 缓冲区的分配
缓冲区是一块可以存放各种数据的内存。缓冲区的内存一般用 +()函数分配。这样虽然很方便,
但不总是最高效,因为数据经常需要被显式的拷入缓冲区。
有些特殊的元件创建指向特殊内存的缓冲区。例如,-+元件通常会(使用 '())将一个文件
映射到应用程序的地址空间,并创建指向那个地址范围的缓冲区。这些由 -+ 创建的缓冲区具有和
剩余63页未读,继续阅读
资源评论
- zhouwei_7340180942015-08-05是gstreamer插件开发的中文翻译,可能是水平不够,感觉讲的有点抽象,看完后还是有点没法下手。
jiahao_chen
- 粉丝: 0
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 01-【管理制度】-37-人力资源管理制度汇编.docx
- 01-【管理制度】-38-化工有限公司人力资源管理制度.docx
- 01-【管理制度】-39-人力资源管理制度(最新版).doc
- 01-【管理制度】-41-人力资源管理制度 .docx
- 01-【管理制度】-40-人力资源管理制度.docx
- 01-【管理制度】-45-人力资源管理制度.doc
- 01-【管理制度】-43-人力资源管理制度全.docx
- 01-【管理制度】-46-公司人力资源部管理制度.docx
- 01-【管理制度】-48-人力资源管理制度体系修订方案.docx
- 01-【管理制度】-49-人力资源管理制度.docx
- 01-【管理制度】-51-企业公司员工培训管理人力资源管理制度.docx
- 01-【管理制度】-50-房地产公司人力资源管理制度.docx
- 01-【管理制度】-53-公司人力资源部管理制度.docx
- 01-【管理制度】-54-人力资源管理制度汇编.docx
- 01-【管理制度】-55-《XX集团公司人力资源管理制度汇编》.doc
- 01-【管理制度】-57-xx集团人力资源管理制度汇编..docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功