音频播放器软件的设计与实现_毕业论文(编辑修改稿)内容摘要:

AU) 通过 Java Sound 的服务供应商接口 ( SPI) 可以进行扩展 JMF: 添加对音频、视频和其它基于时间的数据的支持 提供多种媒体格式的同步和控制功能 当前没有与任何 JDK 一起提供 本身支持许多音频格式 ( AIFF、 WAV等 ) 以及 MPEG 和其它格式 包含可扩展的编码器/解码器媒体支持 第 2 章 关于 JMF 技术 4 JMF 常用类 JMF 的常用类包括以下几个: ● 数据源( DataSource) ● 媒体定位器( MediaLocator) ● 播放器( Player) ● 处理器( Processor) ● 数据池( DataSink) ● 数据格式( Format) ● 管理器( Manager) 数据源( DataSource) 在 JMF 中, DataSource 对象就是数据源,它可以是从采集设备获得的数据,也可以是一个多媒体文件,也可以是从互联网上下载的数据流。 对于 DataSource对象,一旦你确定了它的位置和类型,对象中就包含了多媒体的位置信息和能够播放该多媒体的软件信息。 当创建了 DataSource 对象后,可以将它送入 Player对象中,而 Player 对象不需要关心 DataSource 中的多媒体是如何获得的,以及格式是什么。 媒体定位器( MediaLocator) DataSource 通常用两种方式来定义,媒体定位器( MediaLocator)或 URL( Universal Resource Locator)。 MediaLocator 类似于 URL,并 且可以由 URL 来构造,即使在没有安装相应的协议处理机制的情况下,也能构造 MediaLocator(在 Java,只有在系统上安装了 URL 协议的处理机制的情况下,才能构造一个URL)。 MediaLocator 用来定位采集设备、本机的媒体文件、网络上的媒体文件以及 网络 RTP 流。 播放器( Player) 第 2 章 关于 JMF 技术 5 如 图 21 所示, 播放器( Player) 对象将音频、视频数据流作为输入,然后将数据流输出到音箱或屏幕上,就像播放器读取 DV 带中的数据,然后将音频信号送到音箱上,视频数据送到屏幕上一样。 图 21 JMF 播放器( Player)模型 Player 对象有多种状态, JMF 中定义了 Player 有六种状态,如图 22 所示。 在正常情况下 Player 对象需要经历每个状态,然后才能播放多媒体。 下面是对这些状态的说明。 图 22 播放器的状态转换图 ● Unrealized:在这种状态下, Player 对象已经被实例化,但是并不知道它需要播放的多媒体的任何信息。 ● Realizing:当调用 realize( )方法时, Player 对象的状态从 Unrealized 转变为 Realizing。 在这种状态下, Player 对象正在确定它需要占用哪些资源。 ● Realized:在这种状态下 Player 对象已经确定了它需要哪些资源,并且也知道需要播放的多媒体的类型。 ● Prefetching:当调用 prefetch( )方法时, Player 对象的状态从 Realized 变为 Prefetching。 在该状态下的 Player 对象正在为播放多媒体做一些准备工作,其中包括加载多媒体数据,获得需要独占的资源等。 这个过程被称为预取第 2 章 关于 JMF 技术 6 ( Prefetch)。 ● Prefetched:当 Player 对象完成了预取操作后就到达了该状态。 ● Started:当调用 start( )方法后, Player 对象就进入了该状态并播放多媒体。 当一个播放器从一个状态转换到另一个状态时,它将产生 TransitionEvent事件(详细请看 事件模型)。 通过 ControllerListener 接口,你的程序可以确定播 放器在什么状态并作出相应的反应。 使用这种 事件 报告机制,你可以在调用播放器的方法前确定播放器是否在其适当的状态。 为了避免混乱情况,在一个播放器所有状态下,不是所有的方法都能被调用的。 如果你在一个播放器对象的当前状态下,调用了一个非法的方法,播放器对象将抛出异常或错误。 处理器( Processor) 处理器( Processor)对应的接口是 Processor。 在 JMF API 中 Processor接口继承了 Player 接口。 Processor 同样可以用来播放媒体数据。 它 是一种特殊的播放器,它可以 对输入媒体流进行过程控制。 处理器支持所有播放器拥有的播放控制功能。 如 图 23 所示, 除了将媒体数据传送至播放终端外,处理器可以将媒体数据输出至一个数据源( DataSource),使用 Processor 的 getDataOutput( )方法实现,此数据源可以作为其它的播放器的数据源,或是通过其它的处理器对其进行进一步操作控制,或将其作为数据池( DataSink)的参数,利用数据池或存储到一个文件,或传送到网络中去。 图 24 处理器模型 如图 24 所示,除了在播放器中提到了的 6 种状态以外,处理器对象还包括 两种新的状态。 这两种状态是在 Unrealized 状态之后,在 Realizing 状态之前。 ● Configuring:当调用 configure( )方法后,处理器对象进入该状态。 在该状态下处理器对象连接到数据源并获取输入数据的格式信息。 第 2 章 关于 JMF 技术 7 ● Configured:当完成数据源连接,获得输入数据格式的信息后,处理器对象就处于 Configured 状态。 图 24 处理器的状态转换图 数据池( DataSink) 数据池( DataSink) 用来读取数据源( DataSource)的媒体数据和输出到特定的目的地 ——这里的目的地不同于以上所说的如音箱或屏幕。 一个特定的DataSink 或把数据输出到一个文件,或通过网络传输数据,或进行 RTP 广播。 像 Player 一样, DataSink 对象以 DataSource 作为参数,通过管理器( Manager)来构造。 数据格式( Format) 在 JMF 架构中, 数据格式 ( Format) 对象中保存了媒体的格式( format)信息。 它并不包括编码参数和全局时间信息。 只是描述了该格式的编码名称和数据类别。 Format 的子类包括 AudioFormat 和 VideoFormat 类, VideoFormat又有六个子类: H261Format、 H263Format、 IndexedColorFormat、 JPEGFormat、RGBFormat 和 YUVFormat 类 [4]。 在 AudioFormat 中,描述了音频格式的属性,如采样频率、每次采样的数据位数等等。 在 VideoFormat 中则描述了视频数据的类型如 等。 图 25 表示 JMF 对音频格式和视频格式的定义: 第 2 章 关于 JMF 技术 8 图 25 JMF 的媒体数据格式 管理器( Manager) JMF 提供了下面四种管理器 ( Manager) : ● Manager: Manager 相当于两个类之间的接口。 例如当你需要播放一个DataSource 对象,你可以通过使用 Manager 对象 createPlayer( )方法创建一个 Player 对象来播放它。 使用 Manager 对象可以创建 Player、 Processor、 DataSource和 DataSink 对象。 ● PackageManager:该管理器中保存了 JMF 类注册信息。 ● CaptureDeviceManager:该管理器中保存了截取设备的注册信息。 ● PlugInManager:该管理器中保存了 JMF 插件的注册信息。 事件模型 JMF 利用事件报告机制来使基于 JMF 的程序获知媒体系统当前的状态,从而使程序能够对相应状态的改变作出相应的操作。 在任何时候,当一个 JMF对象需要报告当前的状态,它将发出一个 MediaEvent 事件。 MediaEvent 的子类包括 ControllerEvern, DataSinkEvent, GainChangeEvent, RTPEvent。 对于任何一个能发送 MediaEvent 的 JMF 对象而言, JMF 都定义了一个相应的侦听接口 (listener interface)。 为了能在某一 MediaEvent 事件发生时得到相应的通知,必须实现适当的侦听接口以及在对应的类体中重写该接口中处理第 2 章 关于 JMF 技术 9 MediaEvent 事件的方法体,并通过调用 addListener 方法来接收此 MediaEvent事件。 如 图 26 所示, JMF 中的 Controller 对象,例如播放器( Player)和处理器( Processor),以及 Control 对象,例如 GainControl 都可以发出 MediaEvent 事件。 ( Player 和 Processor 继承于 Controller 类) 图 26 JMF 的事件模型 图 27JMF Controller 事件 第 2 章 关于 JMF 技术 10 图 27 列出了所有 的 Controller 事件, ControllerEvent由 Controller(如 Player或 Processor)产生,可分为三类:改变通知( change notification),关闭事件( closed event),状态转变事件( transition event): 1 .改变通知事件如 RateChangeEvent , DurationUpdateEvent ,FormatChangeEvent 表明一些 Controller 的属性的改变。 2.状态转变事件可以使你的程序对 Controller 对象的状态转变作出反应。 Player 当从一个状态转为另一状态时都会产生 transition events。 3.当 Controller 关闭时,它将产生关闭事件。 第 3章 系统架构和功能模块设计 11 第 3 章 系统架构和功能模块设计 MVC 模式概述 MVC 架构是“ ModelViewController”的缩写,即将“模型 视图 控制”作为应用程序构成的三要素。 Event(事件)导致 Controller 改变 Model 或 View,或者同时改变两者。 只要 Controller 改变了 Models 的数据或者属性,所有以来的 View 都会自动更新。 类似的,只要 Controller 改变了 View, View 会从潜在的 Model 中获取数据来刷新自己。 相应地,本软件也同样使用 MVC 思想指导设计,做到模块细化,分工明确,模块间逻辑顺序清晰的三大目标。 流程如图 31 所示 图 31 系统目标 对于 音频 播放器,必须给用户提供最简单的操作和最完善的功能。 至少应该能够对 音频文件 进行播放、暂停、停止、 音量和进度 拖放操作等。 除了最基本的操作以外,优秀的播放器还提供了许多附加的功能来突出显示该媒体播放器的特色,例如本播放器的歌词实时显示。 在这样的情况下,对播放器的设计目标要求有如下功能的实现: ◆ 用户界面窗口的控制功能:播放器主窗口控制、播放列表窗口的控制和歌词显示窗口的控制; 第 3章 系统架构和功能模块设计 12 ◆ 媒体文件的播放控制功能:开始播放、暂停播放、停止播放和拖动播放等; ◆ 媒体文件的管理功能 :添加歌曲、添加目录,删除歌曲、清空列表、保存列表和装载列表; ◆ 音频文件信息显示功能:将音频文件的基本信息呈现给用户,同时用户自己可以设置一些信息。 系统功能模块 概要 设计 本软件同样采用 MVC 的设计模式,做到控制,信息与视图的相互分离,同时相互间有联系紧密,互相调用,互为条件与依赖。 故将系统分为五大模块进行构建,分别是 用户界面模块 播放控制模块 播放信息模块 播放列表 控制 模块 歌词控制模块 其相互关系如 图 32所示 用户请求事件 用户请求事件 视图信息更新 视图信息更新 更新信息 读取信息 更新信息 读取信息 读取信息 更新信息 播放信息模块 用户界面模块 播。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。