Java媒体框架(JMF)使你能够编写出功能强大的多媒体程序,却不用关心底层复杂的实现细节。JMF API的使用相对比较简单,但是能够满足几乎所有多媒体编程的需求。在这篇文章中,我将向你介绍如何用很少的代码就编写出多媒体程序。
Java多媒体框架(JMF)中包含了许多用于处理多媒体的API。它是一个相当复杂的系统,完全了解这个系统可能需要花上几周的时间,但是这篇文章将主要介绍JMF的几个核心接口和类,然后通过一个简单的例子向你展示如何利用该接口进行编程。
JMF目前的最新版本是2.1,Sun通过它向Java中引入处理多媒体的能力。下面是JMF所支持的功能的一个概述:
● 可以在Java Applet和应用程序中播放各种媒体文件,例如AU、AVI、MIDI、MPEG、QuickTime和WAV等文件。
● 可以播放从互联网上下载的媒体流。
● 可以利用麦克风和摄像机一类的设备截取音频和视频,并保存成多媒体文件。
● 处理多媒体文件,转换文件格式。
● 向互联网上传音频和视频数据流。
● 在互联网上广播音频和视频数据。
JMF的结构
为了更好地说明JMF的结构,让我们用立体声音响做一个简单的比喻。当你CD机播放CD唱片的时候,CD唱片向系统提供音乐信号。这些数据是在录音棚中用麦克风和其他类似的设备记录下来的。CD播放机将音乐信号传送到系统的音箱上。在这个例子中,麦克风就是一个音频截取设备,CD唱片是数据源,而音箱是输出设备。
JMF的结构和立体声音响系统非常相似,在后面的文章中,你会遇到下面的这些术语:
● 数据源(Data source)
● 截取设备(Capture Device,包括视频和音频截取设备)
● 播放器(Player)
● 处理器(Processor)
● 数据格式(Format)
● 管理器(Manager)
下面让我们来看一看这些术语到底代表什么意思。
1.数据源
就像CD中保存了歌曲一样,数据源中包含了媒体数据流。在JMF中,DataSource对象就是数据源,它可以是一个多媒体文件,也可以是从互联网上下载的数据流。对于DataSource对象,一旦你确定了它的位置和类型,对象中就包含了多媒体的位置信息和能够播放该多媒体的软件信息。当创建了DataSource对象后,可以将它送入Player对象中,而Player对象不需要关心DataSource中的多媒体是如何获得的,以及格式是什么。
在某些情况下,你需要将多个数据源合并成一个数据源。例如当你在制作一段录像时,你需要将音频数据源和视频数据源合并在一起。JMF支持数据源合并,在后面的例子中我们将提到这一点。
2.截取设备
截取设备指的是可以截取到音频或视频数据的硬件,如麦克风、摄像机等。截取到的数据可以被送入Player对象中进行处理。
3.播放器
在JMF中对应播放器的接口是Player。Player对象将音频/视频数据流作为输入,然后将数据流输出到音箱或屏幕上,就像CD播放机读取CD唱片中的歌曲,然后将信号送到音箱上一样。Player对象有多种状态,JMF中定义了JMF的六种状态,在正常情况下Player对象需要经历每个状态,然后才能播放多媒体。下面是对这些状态的说明。
● Unrealized:在这种状态下,Player对象已经被实例化,但是并不知道它需要播放的多媒体的任何信息。
● Realizing:当调用realize()方法时,Player对象的状态从Unrealized转变为Realizing。在这种状态下,Player对象正在确定它需要占用哪些资源。
● Realized:在这种状态下Player对象已经确定了它需要哪些资源,并且也知道需要播放的多媒体的类型。
● Prefetching:当调用prefectch()方法时,Player对象的状态从Realized变为Prefetching。在该状态下的Player对象正在为播放多媒体做一些准备工作,其中包括加载多媒体数据,获得需要独占的资源等。这个过程被称为预取(Prefetch)。
● Prefetched:当Player对象完成了预取操作后就到达了该状态。
● Started:当调用start()方法后,Player对象就进入了该状态并播放多媒体。
4.处理器
处理器对应的接口是Processor,它一种播放器。在JMF API中,Processor接口继承了Player接口。 Processor对象除了支持支持Player对象支持的所有功能,还可以控制对于输入的多媒体数据流进行何种处理以及通过数据源向其他的Player对象或Processor对象输出数据。
除了在播放器中提到了六种状态外,Processor 对象还包括两种新的状态,这两种状态是在Unrealized状态之后,但是在Realizing状态之前。
● Configuring:当调用configure()方法后,Processor对象进入该状态。在该状态下,Processor对象连接到数据源并获取输入数据的格式信息。
● Configured:当完成数据源连接,获得输入数据格式的信息后,Processor对象就处于Configured状态。
5.数据格式
Format对象中保存了多媒体的格式信息。该对象中本身没有记录多媒体编码的相关信息,但是它保存了编码的名称。Format的子类包括AudioFormat和VideoFormat类,ViedeoFomat又有六个子类:H261Format、H263Format、IndexedColorFormat、JPEGFormat、RGBFormat和YUVFormat类。
6.管理器
JMF提供了下面四种管理器:
● Manager:Manager相当于两个类之间的接口。例如当你需要播放一个DataSource对象,你可以通过使用Manager对象创建一个Player对象来播放它。使用Manager对象可以创建Player、Processor、DataSource和DataSink对象。
● PackageManager:该管理器中保存了JMF类注册信息。
● CaptureDeviceManager:该管理器中保存了截取设备的注册信息。
● PlugInManager:该管理器中保存了JMF插件的注册信息。
在JMF编程中,最常见的工作就是创建一个Player对象。你可以通过Manager类的createPlayer()方法创建Player对象。Manager对象使用多媒体的URL或MediaLocator对象来创建Player对象。当你获得了一个Player对象后,你可以通过调用getVisualComponent()方法得到Player对象的图像部件(Visual Component,在图像部件上可以播放多媒体的图像)。然后将图像部件加入到应用程序或Applet的界面上。Player对象还包含一个控制面板,在上面可以控制媒体的播放、停止和暂停等。
Player类中的很多方法只有在Player对象处于Realized的状态下才会被调用。为了保证Player对象已经到达了该状态,你需要使用Manager的createRealizePlayer()方法来获得Player对象。但是对于start()方法来说,你可以在Player对象到达Prefetched状态之前调用它,它可以自动将Player的状态转换到Started状态。
截取多媒体数据
多媒体数据的截取是JMF程序中另一个非常重要的功能。你可以按照下面的步骤截取数据:
● 通过查询CaptureDevieceManager获得你希望使用的截取设备。
● 获得设备对应的CaptureDeviceInfo对象。
● 从CaptureDeviecInfo对象中获得MediaLocator对象,然后用它创建一个DataSource对象。
● 使用DataSource对象创建Player对象或Processor对象。
● 调用start()方法,开始截取多媒体数据。
你可以使用CaptureDeviceManager对象获得系统中可用的视频和音频截取设备。通过调用getDeviceList()方法你可以获得设备的列表。每个设备都对应一个CaptrueDeviceInfo对象。也可以通过调用CaptureDevieceManager对象的getDevice()方法来获得特定的CaptureDeviceInfo对象。在使用设备截取多媒体数据前,还需要从CaptureDeviceInfo对象中获得设备对应的MediaLocator对象。然后你可以直接使用MediaLocator来构造Player或Processor的实例,也可以用MediaLocator构造一个DataSource对象,然后将DataSource对象送入Player或Processor对象中。最后调用start()方法来截取多媒体数据。
一个JMF例子
当你使用JMF进行编程以前,你需要安装JMF。同时在硬件上也有一些要求。由于本文的代码是在Windows 2000下编写和测试,因此文章中提到的操作系统需要的软件都是与Windows有关的。虽然Java是跨平台的,但是JMF是个例外——并不是所有的平台上都实现了JMF。
硬件和软件要求
硬件方面你需要与SoundBlaster兼容的声卡,芯片最好使用奔腾III以上的芯片。内存最好不小于64MB。同时你需要安装下面的软件:
● Windows95/98,Windows NT 4.0, Windows2000或 WindowsXP。
● JDK1.1.6或以上的Windows版本。
● JMF类和动态库
在Windows下安装JMF2.1
当下载了JMF2.1以后,运行jmf-2_1_1b-windows-i586.exe。该程序会将JMF2.1安装到你指定的目录下。当安装成功后,你需要确认一下安装程序正确设定了CLASSPATH和PATH环境变量。在CLASSPATH中需要包含jmf.jar和sound.jar;在PATH中需要包含JMF动态库的路径。
JMFRegistry
如果你希望使用视频和音频截取的设备,你需要确认安装了这些设备的驱动程序。除此之外,你还需要运行JMFRegistry应用程序。JMFRegistry可以向JMF注册新的数据源、媒体处理器、插件、视频和音频截取设备,然后你才能够在你的程序中使用它们。你只需要运行一次JMFRegistry就能注册系统中所有的视频和音频截取设备。
当你运行了JMFRegistry后,会弹出一窗口:
选择“Capture Devices”标签,然后按下“Detect Capture Devices”按钮,程序将自动检测出系统中的视频和音频截取设备。在左边的类表框中会列出所有检测到的设备的名称。在图一中我们看到JMFRegsitery发现了JavaSound audio capture、vfw:Logitech USB Video Camera:0和vfw:Microsoft WDM Image Capture (Win32):1。单击某个设备可以看到该设备支持的视频或音频格式。如果JMFRegistry无法检测到设备,有可能是没有正常安装设备的驱动程序
分享到:
相关推荐
【标题】"jmf612 原理图和PCB" 提供的是与jmf612芯片相关的电路设计资源,包括原理图(Schematic)和印制电路板(Printed Circuit Board, PCB)设计文件。这些文件通常用于电子工程领域,帮助工程师理解和实现基于...
标题中的“jmf612 SSD原理图 PCB文件.rar”表明这是一个关于固态硬盘(SSD)设计的压缩包,其中包含SSD主板的原理图和PCB布局文件。固态硬盘是现代计算机存储系统中不可或缺的部分,它利用闪存芯片来存储数据,相比...
本文将详细介绍 JMF605 的电路设计原理及其在 DIY 固态硬盘中的应用。 #### 二、电路图解析 根据提供的文档内容,我们可以了解到 JMF605 芯片的一些关键特性及电路设计要点: ##### 1. 主要组件 - **主控芯片**: ...
对于开发者来说,理解 JMF 的工作原理,如如何初始化、播放、捕获媒体,以及如何利用 RTP 和 UDP 实现高效传输,是非常重要的。同时,通过阅读源代码,可以学习到如何将 JMF 集成到实际项目中,以及如何设计和实现一...
`jmf-2_1_1e-windows-i586.exe` 是安装JMF的程序,而`jmf-2_0-spec.zip` 包含了详细的API规范,对于理解JMF的工作原理和开发多媒体应用至关重要。然而,由于JMF的年代较久,现代开发者可能需要寻找更现代的解决方案...
总结,JMF中文开发指导涵盖了从基础概念到高级应用的全方位内容,帮助开发者深入理解JMF的工作原理,熟练运用其API进行多媒体项目的开发。通过学习这份指南,你将能够创建自己的多媒体应用程序,实现播放、处理和...
因此,熟悉JMF的API,理解其工作原理,以及定期查阅官方文档和社区论坛以获取最新信息和解决方案,都是至关重要的。 总之,JMF是一个强大的多媒体处理工具,但使用时需要特别注意解码器的安装和配置。通过深入学习...
标题中的“JMF608MP_2.03.059.rar”指的是一个名为“JMF608MP”的设备或软件的版本号为2.03.059的更新压缩包,文件格式为RAR...同时,了解关于智能卡的工作原理和安全注意事项也是至关重要的,特别是在处理敏感信息时。
基于JMF612高速方案的SSD解决方案原理图 JMF612 为最新SSD高速方案,支持DDR2128Mb~1Gb缓存速度最高超过200MB/S
源代码中的注释通常会解释每一步的目的和工作原理,这对于初学者理解和掌握JMF的API非常有帮助。 `JMFTest2.0.rar` 又是一个压缩文件,可能是JMF的一个更新版本或更复杂的测试套件。这个文件可能包含更多的示例、...
这个压缩包中的“JMF源代码”显然包含了JMF的源文件,对于开发者来说是一个宝贵的资源,特别是对那些想要深入理解JMF工作原理、进行定制开发或者解决特定问题的人员。 JMF是Sun Microsystems开发的,它提供了处理...
Java Media Framework (JMF) 是一个开源的Java平台框架,用于处理音频、视频和多媒體内容。这个"jmf jar包下载"标题指...如果你正准备使用JMF,你需要熟悉其核心组件和工作原理,同时也要权衡其与现代替代品的优缺点。
2. **JMF的工作原理** - JMF通过插件机制来支持不同的媒体格式。每个插件称为一个"Processor",负责解析特定类型的媒体文件。 - 当播放媒体文件时,JMF首先识别文件类型,然后加载相应的Processor来解码数据,最后...
【基于JMF的MP3播放器】是一款利用Java Media Framework(JMF)技术开发的音频播放软件,专注于播放...通过了解JMF的工作原理和播放器的基本操作,用户可以更好地享受音乐,同时也能学习到Java多媒体编程的相关知识。
Java Media Framework (JMF) 是一个开源的API,由Sun Microsystems开发,用于处理多媒体数据,如视频和音频。...学习和理解JMF API可以帮助我们了解多媒体处理的基本原理,同时也为过渡到其他更先进的框架打下基础。
在"JMF.rar_jmf_jmf 源码"这个压缩包中,包含了JMF的源代码以及可能的分析和实例,这对于深入理解JMF的工作原理和进行自定义开发非常有价值。 JMF的核心功能包括: 1. **多媒体播放**:JMF提供了一个接口来播放...
首先,我们需要理解JMF的基本工作原理。JMF提供了一个服务接口,允许开发者注册媒体处理器、捕获设备以及播放器。通过这些接口,我们可以处理不同的媒体格式,包括编码、解码和播放。对于视频传输,JMF提供了对RTP的...
Java Media Framework (JMF) 是一个开源的Java平台框架,用于处理多媒体数据,包括音频和视频。MP3插件是JMF的一个扩展,允许程序在Java环境中...理解其工作原理和使用方法对于开发涉及多媒体处理的Java应用至关重要。
Java Media Framework(JMF)是Java平台上的...通过深入理解JMF的原理和API,开发者可以创建出功能丰富的多媒体应用,满足各种需求。这份“JMF教程”将是你探索JMF世界的一把钥匙,帮助你快速上手并熟练掌握这个框架。