`
linsl
  • 浏览: 72028 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

【转】利用JMF进行多媒体编程 (一)

    博客分类:
  • java
阅读更多

Java媒体框架(JMF)使你能够编写出功能强大的多媒体程序,却不用关心底层复杂的实现细节。JMF API的使用相对比较简单,但是能够满足几乎所有多媒体编程的需求。在这篇文章中,我将向你介绍如何用很少的代码就编写出多媒体程序。 

Java多媒体框架(JMF)中包含了许多用于处理多媒体的API。它是一个相当复杂的系统,完全了解这个系统可能需要花上几周的时间,但是这篇文章将主要介绍JMF的几个核心接口和类,然后通过一个简单的例子向你展示如何利用该接口进行编程。 

JMF目前的最新版本是2.1Sun通过它向Java中引入处理多媒体的能力。下面是JMF所支持的功能的一个概述: 

 可以在Java Applet和应用程序中播放各种媒体文件,例如AUAVIMIDIMPEGQuickTimeWAV等文件。 

 可以播放从互联网上下载的媒体流。 

 可以利用麦克风和摄像机一类的设备截取音频和视频,并保存成多媒体文件。 

 处理多媒体文件,转换文件格式。 

 向互联网上传音频和视频数据流。 

 在互联网上广播音频和视频数据。 
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 中对应播放器的接口是PlayerPlayer对象将音频/视频数据流作为输入,然后将数据流输出到音箱或屏幕上,就像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又有六个子类:H261FormatH263FormatIndexedColorFormat JPEGFormatRGBFormatYUVFormat类。 

6.管理器 

JMF提供了下面四种管理器: 

 Manager Manager相当于两个类之间的接口。例如当你需要播放一个DataSource对象,你可以通过使用Manager对象创建一个Player对象来播 放它。使用Manager对象可以创建PlayerProcessorDataSourceDataSink对象。 

 PackageManager:该管理器中保存了JMF类注册信息。 

 CaptureDeviceManager:该管理器中保存了截取设备的注册信息。 

 PlugInManager:该管理器中保存了JMF插件的注册信息。 

创建一个Player对象

JMF编程中,最常见的工作就是创建一个Player对象。你可以通过Manager类的 createPlayer()方法创建Player对象。Manager对象使用多媒体的URLMediaLocator对象来创建Player对象。 当你获得了一个Player对象后,你可以通过调用getVisualComponent()方法得到Player对象的图像部件 Visual Component,在图像部件上可以播放多媒体的图像)。然后将图像部件加入到应用程序或Applet的界面上。Player对象还包 含一个控制面板,在上面可以控制媒体的播放、停止和暂停等。 
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->

Player类中的很多方法只有在Player对象处于Realized 状态下才会被调用。为了保证Player对象已经到达了该状态,你需要使用ManagercreateRealizePlayer()方法来获得 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/98Windows NT 4.0, Windows2000 WindowsXP 

 JDK1.1.6或以上的Windows版本。 

 JMF类和动态库 

Windows下安装JMF2.1 

下载了JMF2.1以后,运行jmf-2_1_1b-windows-i586.exe。该程序会将JMF2.1安装到你指定的目录下。当安装成功后,你 需要确认一下安装程序正确设定了CLASSPATHPATH环境变量。在CLASSPATH中需要包含jmf.jarsound.jar;在PATH 中需要包含JMF动态库的路径。 

JMFRegistry

如果你希望使用视频和音频截取的设备,你需要 确认安装了这些设备的驱动程序。除此之外,你还需要运行JMFRegistry应用程序。JMFRegistry可以向JMF注册新的数据源、媒体处理 器、插件、视频和音频截取设备,然后你才能够在你的程序中使用它们。你只需要运行一次JMFRegistry就能注册系统中所有的视频和音频截取设备。 

当你运行了JMFRegistry后,会弹出如图所示的窗口: 

<!--[if !supportLineBreakNewLine]-->

“Capture Devices”标签,然后按下“Detect Capture Devices”按钮,程序将自动检测出系统中的视频和音频截取设 备。在左边的类表框中会列出所有检测到的设备的名称。在图一中我们看到JMFRegsitery发现了JavaSound audio capture vfw:Logitech USB Video Camera:0vfw:Microsoft WDM Image Capture (Win32): 1。单击某个设备可以看到该设备支持的视频或音频格式。如果JMFRegistry无法检测到设备,有可能是没有正常安装设备的驱动程序。 

分享到:
评论

相关推荐

    利用JMF进行多媒体编程

    总的来说,JMF为Java开发者提供了一套强大的多媒体编程工具,通过理解和掌握其核心概念和API,可以轻松创建各种多媒体应用程序,满足不同需求。然而,由于JMF的复杂性,开发者需要投入一定的时间学习和实践,以便...

    jmf多媒体播放.zip

    标题“jmf多媒体播放.zip”和描述中的信息表明,这个压缩包包含与Java Media Framework (JMF) 相关的资源,用于多媒体播放。JMF是Java平台上的一个开源框架,它允许开发者处理和播放音频、视频等多种媒体格式。下面...

    JMF编程应用

    ### Java中利用JMF的多媒体编程 #### 摘要 Java作为一种广泛应用于互联网环境下的编程语言,在多媒体处理方面有着独特的优势。Java Media Framework(JMF)为开发者提供了一个强大的平台,使得开发者能够轻松地创建...

    java利用JMF框架实现视频传输的完整代码

    在“java利用JMF框架实现视频传输的完整代码”这个资源中,我们主要会探讨以下几个核心知识点: 1. **Java Media Framework (JMF)** JMF 是Sun Microsystems为Java开发的多媒体框架,它提供了处理音频、视频和实时...

    JMF.rar_JMF应用编程大全教程_html_java 初学_jm_jmf P2P

    你可以学习如何利用JMF实现P2P中的媒体数据交换和同步。 **学习资源** 在"www.pudn.com.txt"这个文件中,可能包含了更多关于JMF的资源链接,如相关的论坛讨论、其他教程或者示例代码,这些都可以作为深入学习的...

    Java中利用JMF编写摄像头拍照程序.rar_JMF 摄像头_java 摄像头_jmf_拍照_摄像头

    尽管JMF有一定的学习曲线,但它仍然是理解Java多媒体编程的一个重要切入点。开发者需要熟悉JMF的API,理解如何查找、控制和处理来自摄像头的数据,才能成功实现这样的程序。同时,也要注意随着技术的发展,选择更...

    基于JMF的MP3播放器

    【基于JMF的MP3播放器】是一款利用Java Media Framework(JMF)技术开发的音频播放软件,专注于播放...通过了解JMF的工作原理和播放器的基本操作,用户可以更好地享受音乐,同时也能学习到Java多媒体编程的相关知识。

    JMF2.1 下载 最新版本*(只有安装包)

    JMF2.1 Java媒体框架(JMF)使你能够...它是一个相当复杂的系统,完全了解这个系统可能需要花上几周的时间,但是这篇文章将主要介绍JMF的几个核心接口和类,然后通过一个简单的例子向你展示如何利用该接口进行编程。

    Java中利用JMF编写摄像头拍照程序实例

    ### Java中利用JMF编写摄像头拍照程序实例 #### 背景与介绍 在现代软件开发中,多媒体处理是一项非常重要的技术。Java Media Framework (JMF) 是Sun Microsystems推出的一个强大的多媒体开发框架,它允许开发者在...

    基于JMF的播放器 多功能 源码

    开发者可以参考此源码来学习如何利用JMF进行多媒体处理,也可以在此基础上进行扩展和优化。 【描述】JMF多媒体播放器源码实现了多种功能,包括但不限于: 1. **文件格式支持**:JMF能够处理多种多媒体文件格式,如...

    jmf的jar包

    ”意味着开发者只需将 JMF 的 `.jar` 文件添加到项目的类路径(classpath)中,就能利用 JMF 的功能进行多媒体开发。这里的 "lib" 通常是指库文件夹,开发者将 JMF 的 `.jar` 放入此文件夹或指定其路径,以便编译器...

    jmf jar包下载

    开发者只需要将.jar文件导入到他们的项目类路径中,就可以利用JMF提供的API来实现各种多媒体功能。这包括播放音频和视频文件,支持不同的编码格式,以及进行媒体的捕获和处理。 JMF的核心组件包括: 1. **Media ...

    JMF中文API及相关文档

    包含文件:1.Java Media Framework 基础教程.doc;2.java的媒体架构(JMF).docx;3.jmf基础.docx;4.Java中利用JMF的多媒体编程.pdf;5.jmf-2_1_1e-windows-i586.exe;6.JMFAPI_CN.html(不错的)

    JMF使用问题总结

    Java Media Framework(JMF)是Java平台上用于处理多媒体数据的一个框架,它允许开发人员创建、播放和捕获音频和视频内容。...通过深入学习和实践,开发者可以克服初始的困难,充分利用JMF的特性来开发多媒体应用程序。

    JAVA多媒体开发手册 JMF API

    #### 利用JMF进行多媒体编程 ##### 创建Player对象 在实际开发中,创建`Player`对象是最常见的任务之一。这通常通过`Manager`类的`createPlayer()`方法完成。该方法接受多媒体的URL或`MediaLocator`对象作为参数。...

    JMF资料——官方说明文档、Demo和解决方案

    通过学习这些资料,开发者可以掌握如何利用JMF创建复杂的多媒体应用程序,如在线视频会议、媒体播放器、监控系统等。理解JMF的工作原理和API,以及如何利用其强大的媒体处理能力,将对Java平台上的多媒体编程带来极...

    JMF.rar_java JMF

    Java媒体框架(JMF)使你能够编写...它是一个相当复杂的系统,完全了解这个系统可能需要花上几周的时间,但是这篇文章将主要介绍JMF的几个核心接口和类,然后通过一个简单的例子向你展示如何利用该接口进行编程。&nbsp

    基于Java的远程视频会议系统+多媒体技术(JAVA 多媒体框架JMF),视频和音频用TRP协议传输,用到Socket编程技术

    采用JAVA 编程语言,用eclipse开发平台实现。用到多媒体技术(JAVA 多媒体框架JMF),视频和音频用TRP协议传输,用到Socket编程技术...利用JAVA的这个组件,我们可以方便的处理多媒体文件,并基于RTP协议进行实时传输。

    JMF工程项目

    在工程中,开发者可以利用JMF API读取、播放和控制视频流。源码中可能包含了示例,演示如何加载视频文件,创建播放器,以及控制播放速度、音量等参数。 **5. 开发流程** - **创建JMF Player**: 使用`Manager....

Global site tag (gtag.js) - Google Analytics