




已阅读5页,还剩36页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
太原理工大学毕业设计 (论文 )用纸 MP3 播放器的设计与实现 摘 要 声音是信息交流的源头,而有规律的声音可以创造意境,给人以美的享受,当其 与图形界面相互交融的时候,整个世界就被丰富了起来。多媒体技术是以声音为基础, 再加上日益进步的科技还有超前的思维,使得电脑的性能日益提高,与之相关的 Java 技术也不断被改进,虽然在有的方便还有些欠缺,但是音频技术的出现,为 Java 语言 的发展指出了一条更加光明的方向。Java 语言有着占用空间小、可嵌入、跨平台性的 优良特点为 Java 语言的应用提供了很好的平台。 本播放器基于 JMF 设计,运用 Java 语言实现列表的新建与清空。歌曲的添加、删 除、重命名。简单的播放、暂停、歌曲的上一首、下一首切换、并选择播放模式。音 量的调节,歌曲属性的查看等简单功能。能够满足一般需求的简易播放器。 关键词:声音;播放器;JMF ;Java;Eclipse 全套设计加扣全套设计加扣 3012250582 太原理工大学毕业设计 (论文)用纸 Design and implementation of music player Abstract The sound is the source of information interaction and the sound of the rhythm can create the artistic conception, give people the enjoyment of beauty, when the sound and graphical interface blend with each other, the world will be widely riched . Multimedia technology is based on sound, coupled with the increasing progress of science and technology and advanced thinking, making computer performance has improved, Java and related technologies have been improved, although in some convenient also some lack, but audio technology, the development of Java language points a brighter the direction of. The Java language has provided a good platform for application of small space occupation, good characteristics of embedded cross platform for Java language. The player is designed by JMF, using Java language to create a new list and clear the list. Add songs, Delete songs, rename songs. Simple to play, pause, previous track, next track switch songs, and select the play mode. Adjust the volume, song attributes View other simple functions. Easy to meet the general needs of the player. Key words: sound; music player; JMF; Java; Eclipse 太原理工大学毕业设计 (论文)用纸 1 目 录 摘 要. ABSTRACT. 1 引言.1 1.1 项目背景 .1 1.2 技术现状与发展趋势 .2 1.3 ECLIPSE中使用 JMF .2 2 技术背景.4 2.1 JMF 结构.4 2.1.1 定义 JMF.4 2.1.2 JMF 高层结构.7 2.1.3 时间模型 .5 2.1.4 管理器 .8 2.1.5 事件模型 .8 2.1.6 数据模型 .6 2.1.7 控制 .9 2.2 重要实例:PLAYER对象.10 3 系统分析与概要设计.16 3.1 系统分析 .16 3.1.1 可行性分析 .16 3.1.2 需求分析 .16 3.2 什么是音频 .17 3.2.1 音频 .17 3.2.2 常见音频格式 .17 3.3 常见播放器 .19 3.3.1 千千静听 .19 3.3.2 酷狗 .19 3.3.3 QQ 音乐.19 3.4 功能模块设计 .19 4 系统设计实现及关键代码.21 4.1 基本结构 .21 4.2 界面设计 .22 4.3 播放 .22 4.4 菜单设计 .24 4.5 列表设计 .27 5 系统测试.29 5.1 总体功能测试描述 .29 5.2 功能测试的目的与内容 .29 5.2.1 界面测试 .29 5.2.2 播放测试 .33 太原理工大学毕业设计 (论文)用纸 2 5.2.3 菜单测试 .34 5.3 功能测试总结 .37 参考文献.36 结 论.37 致 谢.38 外文文献.39 中文翻译.59 太原理工大学毕业设计 (论文)用纸 3 1 引言 1.1 项目背景 在信息不断变更和交互的时代,听歌已经变得非常流行不光是个人的行为也不再 是局限于本地资源。网络音乐不断流行,随之而来的是网络音乐播放器的火热,很多 的网页或者网站上都提供了很好的比较规范的音乐搜索项目,还有许多知名的音乐网 站提供免费的音乐下载,形成了资源共享的局面,听歌已经不是许多年前只能依靠录 音机或者随身听来实现了。不光如此,国内的国外的歌手的作品也都进入到了网络上 来,所以越来越多的不同风格的音乐在网络上都能够呈现出来。 但是,在网络收费还是较高的情况下,大多数人们还是倾向把音乐文件下载到本 地来听,这样方便在无网络的时候也可以欣赏音乐,故而下载好的音乐文件就必须有 个软件能够使它播放出来,因此,MP3 播放软件的制作就有了比较重要的意义了。 现在存在的多媒体播放器种类繁多,样式也比较新颖,还有就是用各种不同语言和 平台事项的。 Microsoft 公司 1998 年推出了 Visual C+60,它是支持 Win32 平台应用 程序(application)、服务(service)和控件(control)开发的可视化编程的集成 环境。与 VC+50 的最大不同之处是它的帮助功能更强大, MSDN(Microsoft Developer Networking)为包括 VC+60 在内的所有微软的程序产品提供在线帮 助;另外,类的对象的可用成员函数、成员变量及函数的参数类型与个数都能动态 显示在屏幕上,用户无须记住那些复杂而又枯燥乏味的函数名及复杂的参数,这无 疑使得用 VC+编程更加容易。所以 VC60 可谓是 Microsoft 公司的王牌产 品,编程功能强大而赢得广大程序的偏爱。 MP3 是一种音频压缩技术,其全称是动态影像专家压缩标准音频层面 3(Moving Picture Experts Group Audio Layer III) ,简称为 MP3。它被设计 用来大幅度地降低音频数据量。利用 MPEG Audio Layer 3 的技术,将音乐以 1:10 甚至 1:12 的压缩率,压缩成容量较小的文件,而对于大多数用户来说重放 的音质与最初的不压缩音频相比没有明显的下降。它是在1991 年由位于德国埃 尔朗根的研究组织 Fraunhofer-Gesellschaft 的一组工程师发明和标准化的。用 MP3 形式存储的音乐就叫作 MP3 音乐。它能够将 CD 品质的数字录音压缩成极小 的文件,并将其存储在电脑之中。实际上,可以将MP3 文件压缩成比光盘文件小 12 倍的文件。因此大大节省了我们的硬盘空间。 在各类语言中 Java 因为具有如下特性而被人广泛使用成了常用编写程序的语言。 Java 语言是一种纯的面向对象的语言,这使得它与其他语言,如 C 语言的面向过程不 同,大大的提高了代码的封装性和代码的阅读性,是一种思想观念的转变。而且在平 台方面,Java 语言具有相当好的平台无关性,即:一次开发,到处运行。它使用的一 种叫做虚拟机的机制作为中间层来屏蔽平台的差异化。Java 的源程序经过编译产生相 应的类文件,类文件必须通过虚拟机的解释才能够运行。每一种操作系统都有属于自 己的虚拟机机制。故而有很好的可移植性。除此之外,在内存管理方面,Java 在虚拟 机内部实现了垃圾自动回收的功能,能够自动判断内存的使用情况。从而进行合理的 释放。JMF 为多媒体的获取、播放、处理和传输定义了统一的体系结构、消息处理机 制和程序设计接口,提供给开发者一个可以扩展 的并且跨平台的强大的媒体工具。因 而使用 Java 语言开发 MP3 播放器是比较有前瞻性的。 太原理工大学毕业设计 (论文)用纸 4 1.2 技术现状与发展趋势 Java 是由 Sun Microsystems 公司(已被甲骨文收购)于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台的总称。Java 平台由 Java 虚拟机(Java Virtual Machine)和 Java 应用编程接口(Application Programming Interface、简称 API) 构成。Java 应用编程接口为 Java 应用提供了一个独立于操作系统的标准接口,可分 为基本部分和扩展部分。在硬件或操作系统平台上安装一个 Java 平台之后,Java 应 用程序就可运行。现在 Java 平台已经嵌入了几乎所有的操作系统。这样 Java 程序可 以只编译一次,就可以在各种系统中运行。Java 语言吸收了 Smalltalk 语言和 C+语 言的优点,并增加了其它特性,如支持并发程序设计、网络通信、和多媒体数据控制 等。 Java 媒体架构(JMF)是一个通用的 API,它允许 Java 开发者用许多不同的方法处 理媒体。该核心框架支持不同媒体(如:音频输出和视频输出)间的时钟同步。它是 一个标准的扩展框架,允许用户制作纯音频流和视频流。Sun 以四种不同的专用版本 提供 JMF 2.1.1 技术,满足专业开发人员的各类需求,第一个是一个轻便型版本,它 完全采用 Java 语言编写,适用于任何 Java 兼容系统。此外,开发人员还可选择分别 适用于 Solaris、Windows 或 Linux 等操作系统的性能最优化软件包,以提高性能和能 力。 几乎所有的媒体类型的操作和处理都可以通过 JMF 来实现。全面的讨论 JMF 所提 供的所有特征已经超过了本指南的范围,使用几个简单的媒体应用程序来实现此框架 的构建模块。 JMF 软件也是 Java Media 系列软件的一部分。Java Media 系列软件包括 Java 3D、Java 2D、Java Sound 和 Java Advanced Imaging 等 API。采用各种 Java Media API,软件开发商人员就能容易、快速地为他们已有的各种应用程序和客户端 Java 小 程序增添丰富的媒体功能,如流式视频、3D 图像和影像处理等。就是说,各种 Java Media API 发挥了 Java 平台的固有优势,将编写一次,到处运行的能力扩展到了图 像、影像和数字媒体等各种应用领域,从而大大缩减了开发时间和降低了开发成本。 1.3 Eclipse 中使用 JMF 项目属性Java 构建路径库添加外部 jar选择 JMF 安装目录下的 JAR 文 件确定。这样就完成了 JMF 包的导入 安装需求 要运行此指南中的例程序,你需要如下的工具和组件: Java 2 平台,标准版,编译和运行演示程序 Java 媒体框架,版本 2.1.1a 或者更高 一块已经安装并且配置号的适当的声卡 一台或者多台测试机器 演示的源代码文件在 mediaplayer.jar 中 最后的一个演示应用显示了 JMF 在网络中的应用。如果需要,此演示能运行在一 个独立的机器上,使用此机器即是传输方也是接收方。可是要观察到在网络中使用 JMF 的所有功能,你仍然需要至少两台联网的机器。 下载安装文件 将 JMF 安装到你的计算机中的第一步是在 JMF 的主页中下载安装文件,它同样包括了 太原理工大学毕业设计 (论文)用纸 5 JMF 源代码和 API 文档的链接。23 页的 Resources 中有下载 JMF 的链接。 目前,JMF 有 Windows, Solaris, Linux 等版本,以及可运行在任何装有虚拟机的计 算机上一个纯 Java 版本。为了增加性能,你需要下载一个与你操作系统所适应的版本。 任何在一个操作系统 JMF 版本下书写和编译的代码都可以方便的移植到另外的操作系 统上。例如,如果你下载了一个 Solaris 版本的 JMF 并且编译了一个类,这些类就可 以在 Linux 上使用,不会有任何问题。 作为选择,你可以选择下载纯 Java 版本,或者跨平台版本的 JMF。这些版本没有使用 操作系统特有的库文件。如果没有合适的 JMF 版本适合的操作系统,那么跨平台版本 就是一个不错的选择。 安装 JMF 下载完 JMF 安装程序后,双击安装程序的图标。 大部分安装程序都会有个选项,安装本地库到系统目录中;例如,Windows 版本安装 程序会有一个选项“Move DLLs to Windows/System directory.” 。最好将此选项选中, 因为它能确保这些操作系统的库文件能正确的安装 在安装的过程中,你还需要选择项目来更新系统的 CLASSPATH 和 PATH 变量。如果这些 选项被关闭,那么在你编译和运行本指南的例程序的时候就需要在 classpath 中引入 JMF 的 jar 文件。 图 1.1 JMF 引用的库 太原理工大学毕业设计 (论文)用纸 6 2 技术背景 2.1 JMF 结构 2.1.1 定义 JMF JMF 实际上是 Java 的一个类包。JMF 技术提供了先进的媒体处理能力,从而扩展了 Java 平台的功能。 这些功能包括:媒体捕获、压缩、流转、回放,以及对各种主要媒体形式的转换和 编码的支持,如 M-JPEG、H.263、MP3、RTP/RTSP (实时传送协议和实时流转协议)、 Macromedias Flash、IBM 的 Hot Media 和 Beatniks 的 Rich Media Format (RMF)等。 JMF 2.1.1 还支持广受欢迎的媒体类型,如 Quick time、Microsoft AVI 和 MPEG-1 等。 此外,JMF 2.1.1 软件中包括了一个开放的媒体架构,可使开发人员灵活采用各种媒 体回放、捕获组件,或采用他们自己的定制的内插组件。 使用 JMF 工作的基础。为完成这些,我们会创建三个的独立工作的例程序。每个例 子都会建立前一个例子的基础上,显示 JMF 功能性的不同方面。 假定你曾经使用过并且已经熟悉了 Java 程序语言。除了 Java 核心和 JMF 的类之外, 我们会使用一些 Java AWT 和 Swing 类(用于创建 GUI),也会有一些 Java 网络类(用于 在网络中传输媒体)。对 GUI 和网络类一些熟悉有助于你更快的明白观点和这里的例子, 但并非是阅读本指南必须的。 JMF 体系结构 你曾见过了使用 JMF 播放本地媒体文件是多么的容易,现在我们将后退一步,来看 看一幅是如何通过 JMF 创建了如此成熟的基于媒体的应用程序的大的画面,是如何通 过 JMF 创建了如此成熟的基于媒体的应用程序。全面的了解 JMF 体系结构是没有意义 的,本节将给你一个大体的概念,关于高级的 JMF 组件是如何组合起来创建想得到的 东西。 JMF 的组件结构非常的灵活,它的组件一般可以分成三个部分: Input 描述某种被用于在进程休息的时候作为一个输入的媒体。 process 执行某些输入上的活动。一个过程有一个明确的输入和输出。大量的过 程可用, 能被用于一个输入或者一批输入。这些过程能被联系起来,一个过程的输出 被用于另外一个过程的输入。在这种风格中,大量的过程可能被应用于一个输入。 (这 段期间是可选择的我们开始的两个例子没有包含真正的数据过程,只有一个来自 文件的输入和一个通过 Player 的输出。 ) Output 描述了媒体的某些目的地。 从这些描述中,你可以想象到 JMF 组件体系结构听起来就好像在一个典型的立体声 系统或者 VCR 之后。很容易设想到,使用 JMF 就如同打开电视或者在立体声音箱系统 下调节声音的风格。例如,录制喜爱的电视节目的简单的动作能在这些组件的基础中: Input 是电视广播流,在同一个频道运输音频和视频。 Process 是一个记录设备(就是,一个 VCR 或者许多的数字设备)转换模拟或者 数字音频视频广播流成适合复制到磁带或其他媒体上的格式。 Output 是记录已格式化轨迹(音频和视频)到某些类型的媒体上。 JMF 资料处理模式 以下图片说明了 JMF 数据处理模块并对每个类型给出了例子: 太原理工大学毕业设计 (论文)用纸 7 使用此模式,很容易明白我们前面的两个例子,从文件中输入音频和视频并输出到 本地计算机上。在后面的章节中,我们也会谈论一些通过传播和接收音频媒体的 JMF 网络功能。 使用可视化组件 上面的界面方法都返回一个 java.awt.Component 类的实例。没个实例都视可加载到我 们窗体上的可视组件。这些组件都与 Player 有直接的联系,所以在这些组件上的所有 可视元素的处理都会产生 Player 播放媒体后相应的变化。 在我们将这些组件加入到我们的窗体的之前,必须要保证它们不为空。因为并不是所 有的媒体播放器包括每一种可视组件,我们只需添加相关播放器类型的组件。比如, 一般来说一个音频播放器没有可视组件,所以 getVisualComponent()就要返回空。你 不会想在音频播放器窗 体上添加可视组件的。 2.1.2 JMF 高层结 构 图 2.1 传统的多媒体数据处理设备与 JMF 的比较 JMF 高层结构正如图 2 所示,数据源(Data Source)就像一盒磁带一样封装了媒 体数据流,而播放器(Player)提供了像 VCR 一样的机制处理和控制数据。 2.1.3 时间模型 图 2.2 JMF 时间模型 JMF 的时间精准到纳秒级,虽然在 Java 中其他的类也支持纳秒级的时间,但是在 JMF 中,一个时间点一般用 Time 对象来表示。 支持 JMF 时间模型的类必须实现 Clock 才能追踪媒体数据流。Clock 接口定义了 太原理工大学毕业设计 (论文)用纸 8 基本的时间定位盒同步操作,而这些操作在表现媒体数据时是必须的。 Clock 中的数据 media time 表示在媒体流中的当前的位置。流的开头是媒体时间 0,流的最后是媒体时间的最大时间。媒体流的持续时间(Duration)是媒体数据流的 从开始到结束的经历的时间。 2.1.4 管理器 通过使用管理器(Manager)这个对象,JMF 使得用户实现的新的关键接口与已 存在的类无缝对接。管理器模型使用了工厂模式10。 使用 JMF 来完成程序时,我们需要使用 Manager 的 create 方法来构造 Player,Processors,DataSink,DataSource 来为你的应用程序服务。例如如果你式 通过一个输入设备捕获媒体数据,你将会使用 CapturtDeviceManager 来找出哪些设备 是可用的,并且通过这些对象来获取相关信息。 2.1.5 事件模型 图 2.3 JMF 事件模型 JMF 使用一个结构化的事件报告机制来使得应用程序来与当前的媒体的状态来保 持通信。同时它还使得基于 JMF 的程序能够响应媒体驱动的错误状况,比如说资源部 可获得这种情况。当 JMF 对象需要报告当前的情况时,它会抛出 MediaEvent。MediaEvent 由许多特定类型的事件。对于每一个可以抛出 MediaEvent 的对象,JMF 定义了相应的监听者对象。 2.1.6 数据模型 图 2.4 JMF 数据模型 JMF 媒体播放器经常使用 DataSource 来管理媒体内容的转移。DataSource 封装了 太原理工大学毕业设计 (论文)用纸 9 媒体位置,使用的协议等信息,这些信息式用来传输媒体的。 DataSource 是通过 JMF 中的 MediaLocator 或者 URL 来指明的。MediaLocator 与 URL 相似并且能通过一个 URL 构造,但是它与 URL 的区别是即使在相应的协议处理没 被安装的情况下它也能被构造,而 URL 不行。 2.1.7 控制 图 2.5 JMF 控制 JMF 控制提供了一种机制来设置和查询对象的属性。控制器一般提供相应的用户 接口的访问,通过访问来改变对象的属性。许多 JMF 对象都可获得控制器接口,包括 DataSource 对象,DataSink 对象和 JMF plug-ins。 太原理工大学毕业设计 (论文)用纸 10 2.2 重要实例:Player 对象 1.创建一个 Player 对象 通过使用媒体 Manager 来直接创建一个 Player 对象,要显示这个 Player 对象, 你获取这个对象的组件并且将这些组件加到你的 applet 的外观或者应用程序的窗口中。 当你想创建一个新的 Player 对象时,你通过 Manager 的 createPlayer 或者 createProcessor 的方法创建它。Manager 通过使用你指定的媒体的 URL 对象或者 MediaLocator 对象来创建一个合适的对象。URL 对象只有在相关的 URLSteeamHandler 被安装的情况下才能被正确的构造,而 MediaLocator 则没有这个限制。 2.在 Player 对象未识别(Realized)前阻塞 许多可以被 Player 对象调用的方法要求 Player 对象在已被识别(Realized)的 状态。保证当你调用这些方法之前 Player 对象已经被识别的方法是使用 Manager 提供 的 createRealizedPlayer 方法来创建 Player 对象。这个方法提供了一个便捷的方式 在一步就创建并且识别(Realize)一个 Player 对象。当这个方法被调用时,它会阻 塞直到这个 Player 对象被识别。Manager 也提供了一个相同的 createRealizedProcessor 方法来创建一个已识别的 Processor 对象。 注意:阻塞 Player 对象或者 Processor 对象直到被识别可能引起不好的结果。比 如,如果 createRealizedPlayer 在一个 applet 中被调用,Applet.start 和 Applet.stop 将不能打断 Player 对象的构造过程。 3.显示媒体接口组件 Player 对象一般有两种类型的用户接口组件,一个可视化组件和一个控制板组件。 有些 Player 实现可以显示额外的组件,比如说音量控制和下载进度条。 4.显示一个可视化组件 如果有,一个可视化组件就是 Player 对象表现媒体的可视化表示。即使一个音频 播放器也有可能有一个可视化组件,比如说波形显示或者其它生动的特性。 要显示 Player 对象的可视化组件,你: (1)通过调用 getVisualComponent 得到组件。 (2)将它加到 applet 的外观表示或者应用程序的窗口中。 你可以通过它的可视化组件访问 Player 对象的的显示属性,如它的 x,y 坐标。 Player 组件的布局受到 AWT 布局管理器的控制。 5.显示控制面板组件 Player 对象通常有一个控制板允许用户控制媒体的表示。比如说,一个 Player 对象可能一个有开始按钮,结束按钮,暂停按钮和一个用来调控音量的滑动条与其关 联。 每一个 Player 对象提供一个默认的控制板。要显示这个默认的控制板: (1)调用 getControlPanelComponent 得到组件。 (2)将返回的组件加到 applet 的外观表示和应用程序的窗口。 如果你选择定义一个定制的用户接口,你可以实现 GUI 组件并且调用正确的 Player 方法来响应用户的动作。如果你将这个定制组件注册成 ControllerListener, 当 Player 对象的状态改变时,你也可以更新这个组件。 6.显示一个增益控制组件 Player 对象的实现支持音频增益调节的 GainControl 接口。GainControl 提供方 太原理工大学毕业设计 (论文)用纸 11 法调节有音频的音量,如 setLevel 和 setMute。如果 Player 对象提供了 GainControl 组件要显示它,你: (1)调用 getGainControl 从 Player 对象获得 GainControl,如果返回为空,则 Player 不支持 GainControl 接口。 (2)在返回的 GainControl 上调用 getControlComponent。 (3)将返回的组件加到 applet 的外观表示或者应用程序的窗口上。 注意 getControls 方法不返回 Player 对象的 GainControl。你只能通过调用 getGainControl 来访问 GainControl。 7.显示一般的控制组件 许多 Player 对象有可以被用户控制的其他的属性。比如说,一个视频 Player 对 象可能允许用户调整亮度和对比度,但是他们不是通过 Player 接口来管理。你可以通 过调用 getControls 来得知一个 Player 对象支持哪些一般的控制。 比如说,你可以调用 getControls 来得知一个 Player 对象是否支持 CachingControl 接口。 8.显示一个下载进度组件 CachingControl 接口是控制的特殊类型,它被 Player 对象实现,能够报告它的 下载进度。CachingControl 提供了一个默认的进度条组件。这个组件会自动的随着下 载进度而更新。要在 applet 中使用默认的进度条: 实现 ControllerListener 接口,并且在 ControllerUpdate 方法中监听 CachingControlEvent。 当你第一次收到一个 CachingControlEvent: (1)当事件到达时调用 getCachingControl 方法得到缓冲控制。 (2)在 CachingControl 上调用 getProgressBar 以得到默认的进度条组件。 (3)将进度条组件加入到你的 applet 外观组件上。 每次你收到一个 CachingControlEvert,检查下载是否已经完成。当 getContentProgress 返回的值与 getContentLength 一样,移除进度条。 当进度条需要更新时,Player 对象抛出一个 CachingControlEvent。如果你实现 你自己的进度条组件,当 CachingControlEvent 被抛出时,你应该能监听这个事件并 且更新进度条。 9.设置播放速率 Player 对象的速率决定媒体时间相对时间基线怎样变化,它定义了当时间基线的 一个单位前进的时候,媒体时间迁移几个单位。Player 对象的速率可以被认为是一个 暂时的刻度因素。比如说,当 Player 开始后,速率为 2.0 代表媒体时间的前进速度是 时间基线时间前进的两倍。 理论上,一个 Player 对象的速率可以被设置为任何值,负值代表反向的播放媒体。 然而,有些媒体的格式依赖于帧,所以反向的播放或者在非标准的速率上播放它是不 可能的,也是不实际的。 要设置速率,你调用 setRate 并且传入一个浮点类型的值作为这个暂时的刻度因 素。当 setRate 被调用时,这个方法返回当前的设置,即使它没被改变。Player 对象 仅保证支持 1.0 的速率。 10.设置开始位置 设置 Player 对象的媒体时间相当于在一个媒体流中设置读取的位置。对于象文件 这样的媒体数据源,媒体时间是有界限的,最大的媒体时间定义为媒体流结束的时间。 太原理工大学毕业设计 (论文)用纸 12 要设置媒体时间,你调用 setMediaTime 并且传入一个 Time 对象,这个对象代表 你想设置的时间。 11.帧定位 有些 Player 对象允许你定位到一个视频的特殊帧。这使得你可以简单的找到开始 位置的特殊帧而不必指明这个位置的精确的时间。支持帧定位的 Player 对象实现了 FramePositioningControl。 要设置帧的位置,你调用 FranePositioningControl 的 seek 方法。当你查找一帧 时,Player 对象的媒体时间的值将会设置成那一帧的开始时间,同时一个 MediaTimeEvent 将会被抛出。 有些 Player 对象可以将媒体时间和帧的位置进行转换。如果支持转换,你可以使 用 FramePositioningControl 的 mapFrameToTime 和 mapTimeToFrame 方法来获得这些 信息。 (支持 FramePositioningControl 的 Player 对象不需要导出这个信息。 )注意在 媒体时间和帧之间不存在一一对应的关系帧是一段持续的时间,所以一些不同的媒 体时间可能会对应同一帧。 12.准备开始 大多数 Player 对象不能立即开始。在播放开始前,某些硬件和软件的状况需要被 满足。比如说,如果一 Player 对象之前从未开始过,则它需要分配缓存来存储媒体数 据。或者如果媒体数据在网络设备上,Player 对象可能需要在下载数据之前建立一个 网络连接。即使 Player 对象以前曾经播放过,缓存区在当前的媒体位置也可能包含无 效的数据。 13.识别(Realizing)和预取(Prefetching)Player 对象 JMF 将一个 Player 对象的准备过程分成两个阶段,识别(Realizing)和预取 (Prefetching) 。在开始一个 Player 对象之前进行识别和预取使得当你调用 start 方 法时能最小化开始播放媒体的时间,并且为用户帮助创建一个响应迅速,具有交互性 的 Player 对象。实现 ControllerListener 接口使得当这些操作发生时你能够控制它。 注意:Processor 在准备过程中引入了第三个阶段,称为配置(Configuring)。在 这个阶段中,Processor 的选项能够被选择以指定 Processor 怎样来操纵媒体数据。 要得到更多的信息,请查阅选择跟踪处理选项。 你调用 realize 方法将 Player 对象进入识别(Realizing)状态并且开始识别过程。 你调用 prefetch 方法将 Player 对象进入预取中(prefetching)状态并初始化预取过 程。Realize 和 prefetch 方法都是异步的并且会立即返回。当 Player 对象完成了要 求的动作时,它会抛出 RealizeCompleteEvent 或者 PrefetchCompleteEvent。Player 对象的状态描述了 Player 对象在这些状态下的动作。 Player 对象在预取状态下准备开始播放,而且它启动反应时间不能再被减少。然 而通过 setMediaTime 设定媒体时间可能使 Player 对象返回到被识别(Realized)状 态并且同时使得启动时延增加。 记住一个在预取完毕的 Player 对象与系统资源相关。因为有些资源,比如说声卡, 可能一次仅仅能被一个程序使用,有一个在预取完毕的 Player 对象生存时可能会阻止 其它 Player 对象开始。 14.获取开始时延 要得到需要多少时间启动 Player 对象,你可以调用 getStartLatency。对于有可 太原理工大学毕业设计 (论文)用纸 13 变开始时延的 Player 对象,getStartLatency 的返回时间将会是最大的可能开始时延。 对于某些媒体类型,getStartLatency 可能会返回 LATENCY_UNKNOWN。 getStartLatency 返回的开始时延可能会因为 Player 对象当前的状态不同而不同。 比如说,在完成了一个预取的动作后,由 getStartLatency 返回的值通常会更小。一 个可以被加入到 Player 对象的 Controller 对象将会返回一个有用的值一旦它被预取 后。 (要得到更多信息,请查阅使用 Player 对象同步控制器(Controllers) 。 ) 15.开始表现 一般你会通过调用 start 方法来开始表现一个媒体流。Start 方法通知 Player 对 象尽可能快的开始表现媒体数据。如果必须,start 方法通过完成识别和预取的操作 使得 Player 对象开始播放。如果 start 方法是被一个已被开始(started)的 Player 对象调用,唯一的效果是一个 StartEvent 将被抛出。 时钟定义了 syncStart 方法以用来同步化。请查阅同步多个媒体流获取更多的信 息。 要使得 Player 对象在指明点开始媒体流: (1)通过调用 setMeidaTime 指明你想开始的媒体流的点。 (2)在 Player 对象上调用 start 方法。 16.停止表现 有四种情况媒体的表现将会停止: (1)当 stop 方法被调用时。 (2)当指定的停止的时间到达时。 (3)当没有更多的媒体数据时。 (4)当被接收的媒体数据相对于可接受的播放速率说太慢时。 当 Player 对象停止时,如果媒体源能被控制,它的媒体时间将被冻结。如果 Player 对象在表现流式媒体,则可能不能冻结媒体时间。在这种情况下,仅仅是媒体 数据的接收被停止数据继续被流式化,媒体时间继续前进。 要立即停止一个 Player 对象,你调用 stop 方法。如果你在一个处于停止 (Stopeed)状态的 Player 对象调用 stop 方法,唯一的效果是 StopByRequestEvent 被抛出。 17.在一个指定的时间停止表现 你可以调用 setStopTime 方法来指明什么时候该停止 Player 对象。Player 对象 在到达指定的停止时间将停止。如果 Player 对象的速率是正值,Player 对象将在媒 体时间大于或者等于停止时间时停止。如果 Player 对象的速率是负值,Player 对象 将在媒体时间小于或者等于停止时间时停止。如果当前的媒体时间已经大于指定的停 止时间,Player 对象将立即停止。 比如说,假定一个 Player 对象的媒体时间是 5.0 并且 setStopTime 设定停止时间 是 6.0、如果 Player 对象的速率是正值,媒体时间正在增加,Player 对象在媒体时间 大于或者等于 6.0 的时候将停止。然而如果 Player 对象的速率是负值,它将反向播放, 这时 Player 对象将会立即停止,因为媒体时间已经超过了停止时间。 (要获取更多关 于 Player 的状态的信息,请查阅设置播放速率。 ) 你也可以在一个停止(Stopped)状态的 Player 对象上调用 setStopTime 方法。 然而你只能设置停止时间在处于已开始(Started)的 Player 对象上,如果停止时间 当前还没有设定。如果已开始(Started)的 Player 对象已经有一个停止时间, setStopTime 抛出一个错误。 太原理工大学毕业设计 (论文)用纸 14 你可以调用 getStopTime 来得到当前已安排的停止时间。如果时钟没有安排的停 止时间,getStopTime 方法将返回 Clock.RESET。要移除停止时间以让 Player 对象持 续的播放直到它到达媒体结束,调用 setStopTime(Clock.RESET)。 18
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 1.1.2 动物细胞的结构与功能-苏教版七年级《生物》上册教学设计
- 水果产地直供模式创新创业项目商业计划书
- 家政服务智能化调度系统创新创业项目商业计划书
- 高效课堂教学设计3篇范文
- 物流配送作业流程及质量控制
- 银行内部审计流程及职责分工
- 2025年学前教育专业儿童社会教育考试真题与答案
- 2025年食品安全答卷试题(附答案)
- 餐饮连锁品牌标准化运营计划
- 学生心理健康教育课程教案集
- 教师师德师风培训专题课件
- 河北美术版小学六年级上册书法练习指导教案
- 检验科质量管理SOP-检验科SOP
- 2024年中国食品包装用衬纸铝箔市场调查研究报告
- 医院医疗质量关键环节与重点部门监管制度
- 2024中国糖尿病合并慢性肾脏病临床管理共识解读
- 培训课件 -王宝顺(泰然)《阳明心学-新时代企业管理的运用》
- 高中英语2024届高考高频词汇(共1801个)
- 装配式建筑装饰装修技术 课件 模块三 装配式吊顶
- 挤压与膨化技术
- 艾媒咨询:2021年中国企业数字化发展研究报告
评论
0/150
提交评论