- 浏览: 498195 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (185)
- job (15)
- linux/windows/unix/bash/shell (31)
- JAVA/J2EE/spring/hibernate/struts (30)
- VC/C++ (48)
- mysql/postgresql (6)
- php/jsp/asp/pear (1)
- FMS/flex/openlaszlo/red5/openmeetings (34)
- apache/tomcat/ftp/svn (6)
- xen/vm/Hadoop/cloudcompute (6)
- visual studio/eclipse/zendstudi/ant (8)
- others (1)
- windows异常处理 __try __except (1)
- (1)
- matlab (4)
- android (0)
最新评论
-
hongzhounlfd:
很透彻,很详细
依赖注入和控制反转 -
jefferyqjy:
谢谢~言简意赅~很明了!
依赖注入和控制反转 -
elderbrother:
太好了,谢谢
依赖注入和控制反转 -
east_zyd_zhao:
终于搞明白了
依赖注入和控制反转 -
Dremeng:
完美,一看就懂理解透彻
依赖注入和控制反转
摘要:
本文先简述了JMF发展的历史,后对JMF的基本构架做了综述。对重要的类和接口都有详细的介绍。
关键字:JMF(java media framework)、具有时域约束关系的媒体数据
正文:
JMF是SUN公司开发的应用编程接口(API),它为java的应用处理具有时域约束关系的数据提供了一种简单而统一的结构。
一、历史
JMF由最早的1.0版本发展到现在的2.1.1版本,对多媒体数据的处理和控制能力逐渐增强。JMF1.0是由Sun Microsystems, Inc.Silicon Graphics Inc.和Intel Corporation共同开发的,主要功能局限于多媒体数据的回放。JMF2.0是由Sun Microsystems, Inc.和IBM共同开发,并增加了多媒体数据的捕获、传输及代码转换功能。在最新的JMF2.1.1中包含了很多新特色和优化,如改进的RTP API,对H.263/1998 (RFC 2429)的支持, Direct Audio渲染器和捕获器,对Java编译器的性能提升等。
二、JMF的特色
Java Media Framework (JMF)为具有时域约束关系的数据的各种处理,如获取、处理、传送提供了整一的体系和消息协议。JMF可以支持绝大多数的标准多媒体数据类型,如 AIFF, AU, AVI, GSM, MIDI, MPEG, QuickTime, RMF 和 WAV.为了发挥JAVA平台的优势,JMF坚持传递给开发者“Write Once, Run Anywhere”的理念。JMF提供了通用的跨平台的JAVA API以访问底层的媒体框架。JMF应用能衡量底层的处理系统的计算能力,从而使开发者轻易编写出可移动的针对具有时域约束关系数据的应用。
JMF的高层体系(如下图)中,高层的API用于数据的处理;而低层的API提供了对自定义的处理部件和扩展的无缝整合。这样的设计使得开发者既能快速的开发出面向时域约束关系数据的应用,同时对未来的应用和新的媒体应技术具有极大的灵活性和扩展性。
在JMF中特定时刻的获取是通过时间对象获得的。支持JMF的类通过使用CLOCK跟踪媒体数据对象中的特定时刻。CLOCK接口定义了基本的计时和同步操作。CLOCK使用TimeBase记录时间,TimeBase提供的数据仅是当前时刻且基于系统时钟。时钟对象通过TimeBase的起始时间、媒体的起始时间即回放比率计算当前的时间。公式为:MediaTime = MediaStartTime + Rate(TimeBaseTime - TimeBaseStartTime)。
管理器(manager)使得接口的新的实现与原有的类无缝的整合。JMF使用四种管理器:Manager用于创造播放器、处理器、数据源和数据池,PackageManager,用于记录包含JMF类的包,CaptureDeviceManager,用于记录可用的采集设备和PlugInManager,用于记录实用的PlugIn。
JMF使用事件(event)汇报机制使得基于JMF的程序获得当前多媒体处理系统的状态并对由媒体数据引起的错误做出调整。JMF对象可在需要的时候触发MediaEvent事件。对应于不同对象的MediaEvent事件,JMF定义了对应的Listener接口。要想获得某事件的提示,需要在触发此事件的对象中调用addlistener函数。
DataSource封装了媒体数据的地点和发布媒体数据的协议及软件。一旦获取,特定的DataSource不能被重用封装其他媒体对象。JMF的数据资源可以按照传输初始化方式(how data transfer is initiated)分为两类,一是Pull Data-Source是由客户发起数据传输,典型的协议比如HTTP和FILE;另一类是Push Data-Source相对应的是由服务器发起的数据传输。Push Data-sources包括广播媒体,多播媒体及VOD。
Control类提供了设置和查询对象属性的机制。Controller objects, DataSource,objects, DataSink objects, and JMF plug-ins都拥有相对应的控制接口。下图是GainControl接口的示意图:
GainControl可以调整媒体回放的音量,当然,音量改变是一种媒体事件,因而GainControl可以触发GainChangeEvent事件。Control接口可以将控制功能提供给最终用户,比如播放器既提供视频部件也提供控制板部件。当然开发者也可以自定义GUI部件,通过注册自定义的GUI部件为播放器实体的ControllerListener,便可实现对播放器实体状态的监听与响应。
高级的开发者和技术提商可通过主要两种方法对JMF功能进行扩展,一是用自定义的处理单元(plug-ins)替换标准的处理单元;二是直接实现Controller, Player, Processor, DataSource或DataSink接口。
在JMF中,表现(presentation)过程是由Controller接口控制的。Controller定义基本的状态并为对象定义控制、实现、捕获媒体对象的功能。一个控制器含有多种的控制器特有的媒体事件(MeidaEvent)用于标识本身状态的改变。通过控制器监听接口接收控制器传来的事件。JMF API具有两类的控制器:播放器(player)和处理器(processor)。控制器一般也不用于重用。
处理器对媒体数据的处理分为几个阶段:(如下图所示)
首先要对数据进行去多路化(demultiplexing),媒体数据内的多种轨迹(track)会被抽取分离。前处理是应用特效算法处理抽取出的轨迹。转换代码可以转换媒体对象的格式。后处理是指对编码后的数据应用特效算法。最后为多路化使得不同的轨迹融合为单一的媒体文件。这些不同的处理过程在JMF中是由不同的plug-in实现的。
处理器的具体创建过程如下。在处理器进入realizing状态之前,具有两个附加的准备状态:configuring和configured。当配置被调用时,处理器进入configuring状态,进行与DataSource联络、去多路化和识别输入数据格式的操作。当与DataSource的相连并识别出数据格式后,处理器进入configured状态。当Realize被调用后,处理器进入realized状态。此时处理器被完全创建了。
媒体采集器件在JMF中抽象为DataSource。比如一个具有采集实时媒体数据能力的仪器可以被抽象为PushDataSource。对于具有多路媒体的数据流,DataSource可以获得与之相对应的SourceStream。
DataSink用于从数据源读取数据并将其呈递到某目的地,一般来说不是表现(presentation)设备。DataSink对象是由管理器(manager)使用数据源创造的,它通过DataSinkEvent通告其状态。
Java媒体架构(JMF)是一个令人激动的通用的API,它允许Java开发者用许多不同的方法处理媒体。本指南主要通过使用工作的例子提供一个JMF的一些主要的特征的概述。阅读完本指南后,你将会明白JMF体系结构中的主要播放功能。你同样能正确的使用JMF,使用现存的例子和可为更多特殊功能扩展的源代码。
本指南包含着以下主题:
· 下载和安装JMF
· 主要的JMF类以及它们在JMF体系结构中的应用
· 播放本地的媒体文件
· 为媒体的存取和操作制作以和图形用户界面(GUI)
· 通过网络传播媒体
· 通过网络接收媒体
几乎所有的媒体类型的操作和处理都可以通过JMF来实现。全面的讨论JMF所提供的所有特征已经超过了本指南的范围,我们将使用三个简单的媒体应用程序来学习此框架的构建模块。通过这个方法,本指南将为你未来学习和实施更多特殊的应用提供准备。
我应该使用此指南吗?
本指南会带你学习使用JMF工作的基础。为完成这些,我们会创建三个的独立工作的例程序。每个例子都会建立前一个例子的基础上,显示JMF功能性的不同方面。
在本指南中的例子假定你曾经使用过并且已经熟悉了Java程序语言。除了Java核心和JMF的类之外,我们会使用一些Java AWT和Swing类(用于创建GUI),也会有一些Java网络类(用于在网络中传输媒体)。对GUI和网络类一些熟悉有助于你更快的明白观点和这里的例子,但并非是阅读本指南必须的。
我们将学习的例程序如下
· 一个简单的音频播放器(JMF的HelloWorld应用):这个字符界面的播放器通过在命令行中简单的输入媒体文件的名字就可以播放大多数的音频类型。此音频播放器的演示大体上显示了JMF的特有的类。
· 一个图形界面的媒体播放器:我们将使用JMF内置的接口组件来建立图形界面,所以在此练习中必须有一些图形界面的编程经验。这个媒体阅览器演示使用了一些Java AWT和Swing类来为用户显示图形组件。
· 一个媒体广播应用:此应用程序允许一个本地媒体文件通过网络传播。此程序能灵活的使媒体只传输到指定的网络节点,或者传输到一个子网络中的所有节点。此演示使用了一些Java的网络APIs来在网络中传输媒体。
作为第三个练习的一部分,我们将修改图形界面的播放器,让其能接收并且播放媒体。
跳至23页观看Resources,文章,指南,和其他参考书目的列表,这会帮助你学习到更到关于此指南包括的主题。
安装需求
要运行此指南中的例程序,你需要如下的工具和组件:
· Java 2 平台,标准版,编译和运行演示程序
· Java媒体框架,版本2.1.1a或者更高
· 一块已经安装并且配置号的适当的声卡
· 一台或者多台测试机器
· 演示的源代码文件在mediaplayer.jar中
最后的一个演示应用显示了JMF在网络中的应用。如果需要,此演示能运行在一个独立的机器上,使用此机器即是传输方也是接收方。可是要观察到在网络中使用JMF的所有功能,你仍然需要至少两台联网的机器。
在23页中的Resources可下载Java 2平台,完整的源代码文件,以及其他一些完成本指南所需要的工具。
下载安装文件
将JMF安装到你的计算机中的第一步是在JMF的主页中下载安装文件,它同样包括了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文件。
第二节. 一个简单的音频播放器
浏览
在本节中,我们将进行创建一个简单的音频播放器的第一个练习。本例将介绍Manager类和Player接口,中两个都是建立大多数基于JMF应用的重要部分。
本例的功能目标是在字符界面下播放本地的音频文件。我们将学习此源代码,并了解每一行所做的任务。完成本节后,你将会有一个基于JMF的可播放包括MP3, WAV, AU等多种音频文件的演示程序。
在本练习后的源代码分类种可查询文件SimpleAudioPlayer.java。
引入必要的类
SimpleAudioPlayer类中包括了一些调用,在其前几行中需要引入所有必要的类:
import javax.media.*;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.net.MalformedURLException;
发表评论
-
剖析Android消息机制
2011-10-26 15:56 1042剖析Android消息机制 在Android中,线程内部或者 ... -
Chapter 6 Exceptions(JAVA EXCEPTION IN NATIVE CODE)
2011-09-26 09:53 1500Contents | Prev | Next | Index ... -
JNI编程中如何传递参数和返回值。
2011-09-14 17:51 1794首先要强调的是,native方法不但可以传递Java的基本类型 ... -
Windows Mobile与Android应用开发对比
2011-09-06 11:44 1297Windows Mobile在经历过最初的Wince系列,po ... -
android和JNI经典blog.doc
2011-09-01 15:29 1753Android JNI调用 2011-02-24 1 ... -
java中的jar关联SRC调试
2011-07-31 21:28 1114我现在的方法是: 打开后看到的是.class文件,然后点ch ... -
android 调用C++的so
2011-07-08 18:36 4399第一步:开发环境的安 ... -
JAVA环境变量配置和详解
2011-07-08 13:46 1215你知道Java环境变量如何配置吗,这里和大家分享一下,主要包括 ... -
数据库试题
2010-12-23 20:05 3583www.zhrtvu.net/oldpage/depart ... -
观察者模式
2010-11-21 19:04 994观察者模式:在对象之间建立一对多的关系,这样一来,当一个对象改 ... -
Apache MINA
2010-11-01 21:04 1085Apache MINA是一个网络应用程序框架,用来帮助用户简单 ... -
JMX
2010-11-01 21:03 1126百科名片 JMX(Java Management ... -
依赖注入和控制反转
2010-10-25 10:57 29130依赖注入和控制反转 ... -
jrdesktop
2010-10-14 15:32 1530jrdesktop(Java Remote Desktop)是 ... -
Apache MINA
2010-10-14 10:28 1064Apache MINA是一个网络应用程序框架,用来帮助用户简单 ... -
XDoclet
2010-10-14 09:38 928XDoclet XDoclet是一个开源项目,可以从这里 ... -
log4j
2010-10-14 09:37 982Log4j是Apache的一个开放源代码项目,通过使用Log4 ... -
Jakarta项目
2010-10-14 09:35 1135Jakarta项目 Apache基金旗下的开源Java项目社 ... -
slf4j
2010-10-14 09:31 1098slf4j-logo SLF4J不是具 ... -
jUINT
2010-10-14 09:23 1366JUnit是由 Erich Gamma 和 Kent Beck ...
相关推荐
个人整理的Java Media Framework API (JMF)的API,按Java6 API的风格整理
Java Media Framework(JMF)是Java平台上用于处理多媒体数据的核心框架。这个2.1.1e版本是一个较早但仍然广泛使用的发行版,主要用于开发能够播放、捕获、处理和控制音频、视频以及其它时间同步媒体的应用程序。...
JMF(java media framework)帮助文档
Java Media Framework(JMF)API指南是一份详细阐述如何在Java平台上处理多媒体内容的重要文档。这份PDF指南旨在帮助开发者理解并有效地利用JMF来开发多媒体应用程序,如播放、捕获、处理音频和视频数据。以下是关于...
Java Media Framework (JMF) 是一个Java平台上的多媒体处理API,它允许开发者处理各种媒体类型,包括音频和视频。本文档是一份基础教程,由Eric Olson撰写并由pawenwen业余时间翻译,旨在为初学者提供JMF的入门知识...
Java Media Framework(JMF)是Java平台上的一个多媒体处理框架,它允许开发者处理音频、视频以及复杂的媒体流。本教程将带你深入理解JMF的基本概念、工作原理以及如何在实际项目中应用它。 JMF的核心功能包括播放...
Java Media Framework(JMF)是Java平台上用于处理多媒体数据的一个框架。这个下载包包含了与`java.media`相关的组件,主要用于开发能够播放、捕获、处理和流化音频、视频的应用程序。下面将详细介绍JMF的核心功能、...
### Java Media Framework (JMF) 简介 Java Media Framework(简称JMF)是Sun Microsystems为Java平台提供的一套多媒体框架,它使得开发者能够轻松地处理音频、视频和其他形式的流媒体数据。JMF提供了丰富的API接口...
Java Media Framework (JMF) API 指南是Java开发者在处理多媒体内容时的重要参考资料。JMF 是一个可扩展的平台,用于播放、捕获、处理和操纵音频、视频和其他时间同步的数据流。这个API提供了丰富的功能,使得开发...
Java Media Framework(JMF)是SUN Microsystems开发的一个开源框架,用于在Java应用程序中处理多媒体内容,如音频、视频和图像。它为开发者提供了一种跨平台的方式来播放、捕获、处理和流式传输多媒体数据。JMF源...
目前最新的JMF2.1.1e,java media framework全网只有这个下载分数最低,直接从官网下载的exe文件,解压后直接安装配置环境变量就可以使用了,而且本人为你们添加了MP3的插件,你们可以直接调用mp3解码器进行播放器的...
Java MP3播放器是利用Java Media Framework (JMF) API来实现的一种软件工具,它允许开发者在Java应用程序中集成音频播放功能,特别是针对MP3格式的音频文件。JMF是Sun Microsystems开发的一个开源框架,主要用于处理...
这些是我在学习JMF,也就是java多媒体时用过的资料,因为我觉得这方面的资料很缺少,就当我学习的时候,根本都找不到我想要的,只有英文的文档,这里是我的一些学习笔记,和一些别人发表过的文档,希望对大家有用吧...
Java Media Framework(JMF)是Java平台上用于处理多媒体数据的一个框架,它允许开发人员创建、播放、捕获和操纵各种媒体资源,包括音频、视频和流媒体内容。本项目是基于JMF构建的一款视频音频播放软件,适用于Java...
Java 媒体框架(Java Media Framework,JMF)是Java平台上的一个核心API,用于处理多媒体数据,如音频、视频等。这个框架允许开发者创建能够播放、捕获、控制和处理多种媒体格式的应用程序。JMF提供了一个灵活的架构...
mysql以下是对“JAVA多媒体开发指南”这段介绍的另一种说法,确保字数少于450字: 本资源文件是一份详尽的Java多媒体开发指南,旨在为开发者提供全面的Java环境下进行多媒体应用开发的指导。无论您是初涉Java多媒体...
### Java Media Framework (JMF) 基础教程概述 #### 一、关于本教程 本教程主要介绍Java Media Framework(简称JMF),这是一款功能强大且多用途的应用程序编程接口(API),允许Java开发者以多种方式处理媒体数据...
Java Media Framework(JMF)是Java平台上用于处理多媒体数据的核心框架。这个压缩包"JMF.rar"包含了关于javax.media的相关文档,特别是对于开发者来说,它提供了深入理解如何在Java环境中集成音频、视频以及时间...