- 浏览: 297791 次
- 性别:
- 来自: 东京
文章分类
最新评论
-
80后的童年2:
企业级分布式搜索平台Solr视频教程网盘地址:https:// ...
企业级搜索引擎Solr使用入门指南 -
springdata_spring:
apache lucene开源框架demo使用实例教程源代码下 ...
Lucene / Solr 开发经验 -
springdata-jpa:
java web开发分页demo源代码下载:http://ww ...
简易java分页标签 -
zjf_sdnu:
兄弟,script写错了
jqGrid初学备注 -
85600367:
你好,请教一个问题。当进行分布式查询时solr无法查询到Luc ...
Lucene / Solr 开发经验
大部分安装程序都会有个选项,安装本地库到系统目录中;例如,Windows版本安装程序会有一个选项“Move DLLs to Windows/System directory.”。最好将此选项选中,因为它能确保这些操作系统的库文件能正确的安装
浏览
本例的功能目标是在字符界面下播放本地的音频文件。我们将学习此源代码,并了解每一行所做的任务。完成本节后,你将会有一个基于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;
除了引入javax.media声明外,以上的代码片断引入了一些创建媒体播放器的输入的声明。
在下面的代码片断中,创建一个公共类SimpleAudioPlayer并举例定义一个Player变量:
public class SimpleAudioPlayer{
private Player audioPlayer = null;
使用JMF获得一个特定媒体文件的Player实例非常简单。Manager类在JMF中如同一个工厂制作许多的特殊接口类型,包括Player接口。因此,Manager类的责任就是创建Player实例,如下例:
public SimpleAudioPlayer(URL url) throws IOException, NoPlayerException, CannotRealizeException
{
audioPlayer = Manager.createRealizedPlayer(url);
}
public SimpleAudioPlayer(File file) throws IOException, NoPlayerException, CannotRealizeException
{
this(file.toURL());
}
· Prefetching
· Realized
· Realizing
· Started
· Unrealized
在 一个如同我们的这样简单的程序中,多功能性的类型并不是很重要。处于这个原因,Manager类也提供了一些创建Realized player的有用方法。调用一个createRealizedPlayer()方法来阻塞调用线程,直到player达到Realized状态。为了调 用一个无阻塞的创建player的方法,我们在Manager类中使用了一个createPlayer()方法。下面的一行代码中创建了一个我们需要在例 程序中使用的
Realized player:
audioPlayer = Manager.createRealizedPlayer(url);
设定一个Player实例的启动或是停止就如同调用Player的一个简单的认证方法,如下所示:
public void play()
{
audioPlayer.start();
}
public void stop()
{
audioPlayer.stop();
audioPlayer.close();
}
最后,这个媒体播放应用程序要包含一个可以从命令提示行中输入命令而调用的main()方法。在此main()方法中,我们将调用创建SimpleAudioPlayer的方法:
File audioFile =
new
File(args[
0
]);
SimpleAudioPlayer player = new SimpleAudioPlayer(audioFile);
在播放音频文件之前的唯一的一些事情就是调用已经创建的音频player的方法play(),如下所示:
player.play();
要停止和清除掉音频player,在main()方法中也应该有如下调用:
player.stop();
通过在命令提示行输入javac SimpleAudioPlayer.java来编译例程序。所创建的文件SimpleAudioPlayer.class在当前工作目录中。然后在命令提示行中键入如下命令来运行例程序:
java SimpleAudioPlayer audioFile
如果编译失败,确认JMF的jar文件已经正确的包含在CLASSPATH环境变量中。
播放视频
如同你将会再本节所见到的,对于视频文件的操作同样有效。JMF有所有媒体文件类型接口的详细资料。
处理视频媒体与音频最大的不同就是,我们必须建立一个能播放视频的显示屏幕。幸运的是,JMF能处理许多的这些资料。如同再上例一样我们会建立一个Player对象,并且使用很多的可视组件来直接从JMF对象中创建我们的可视的媒体浏览器。
本节中,我们将学习两个例程序。In this section, we'll walk through the second example application. 请再后面的练习的源代码分布中查阅MediaPlayerFrame.java。
本例中我们使用的许多概念,类和方法都和第一个例子的类似。建立Player的基本操作大都一样。最大的不同就是我们需要对Player对象专研更深一点,特别当需要从Player获取媒体信息的时候。
在MediaPlayerFrame开始的一行中我们定义了类并扩展自,javax.swing.Jframe类。这就是使媒体播放器如同一个在桌面上的单独窗体的方法。任何客户机程序创建了本媒体播放对象后都可以通过调用Jframe类中定义的show()方法来显示。
下面是一个MediaPlayerFrame正在播放MPEG电影的屏幕截图:
· player.getControlPanelComponent() 是一个操作时间轴的可视组件(包括开始,停止,回放),也包含了一些媒体流的有用信息。
· player.getGainControl().getControlComponent() 是操作音量(增加)的可视组件。getGainControl()方法返回一个GainControl实例,可用于改变节目的增加等级。
在我们将这些组件加入到我们的窗体的之前,必须要保证它们不为空。因为并不是所有的媒体播放器包括每一种可视组件,我们只需添加相关播放器类型的组件。比 如,一般来说一个音频播放器没有可视组件,所以getVisualComponent()就要返回空。你不会想在音频播放器窗体上添加可视组件的。
由 于我们的播放器是非常抽象的,被设计于播放多种不同媒体类型,我们简单的为用户暴露所有的Control对象。如果找到任何扩展的控制集,我们就可使用 getControlComponent()方法来增加相应的可视控件到标签面板上。通过这个办法,用户就可以观察播放器上的所有组件。以下代码片断将所 有的控制对象暴露给用户:
Control[] controls = player.getControls();
for (int i = 0; i < controls.length; i++)
{
if (controls[i].getControlComponent() != null)
{
tabPane.add(controls[i].getControlComponent());
}
}
在我们新的基于GUI的媒体播放器和我们的第一个简单播放器之间最大的不同就是,我们使用一个MediaLocator对象而不是URL来创建Player实例,如下所示:
public void setMediaLocator(MediaLocator locator) throws IOException, NoPlayerException, CannotRealizeException {
setPlayer(Manager.createRealizedPlayer(locator));
}
通过在命令提示行输入javac MediaPlayerFrame.java来编译例程序。在工作目录下将创建一个名为MediaPlayerFrame.class的文件。
在命令提示行中键入如下来运行例程序:
java MediaPlayerFrame mediaFile
要更多的学习本练习中的例子,查看完成的MediaPlayerFrame源代码。
JMF体系结构
· process执行某些输入上的活动。一个过程有一个明确的输入和输出。大量的过程可用, 能被用于一个输入或者一批输入。这些过程能被联系起来,一个过程的输出被用于另外一个过程的输入。在这种风格中,大量的过程可能被应用于一个输入。(这段 期间是可选择的——我们开始的两个例子没有包含真正的数据过程,只有一个来自文件的输入和一个通过Player的输出。)
· Output 描述了媒体的某些目的地。
· Process 是一个记录设备(就是,一个VCR或者许多的数字设备)转换模拟或者数字音频视频广播流成适合复制到磁带或其他媒体上的格式。
· Output 是记录已格式化轨迹(音频和视频)到某些类型的媒体上。
JMF和实时传输协议(RTP)
许 多的友善网络的特征直接建立在JMF中,这些使为客户端程序通过网络传输和接收媒体非常容易。当在一个网络上的一个用户想要接收任何种类的媒体流的时候, 它不需要在观看媒体前等待全部的广播下载到机器上;用户可以实时的观看广播。在流媒体中些提出了这个概念。通过流媒体,一个网络客户端能接收到其他机器上 广播的音频,甚至获取正在发生的实况视频广播。
在IETF RFC 1889中定义了实时传输协议(RTP)。发展在快速和可靠的状态下通过网络传输时间极其敏感的数据,RTP在JMF中用于提供给用户向其他网络节点中传输媒体流的方法。
在本节中,我们将学习我们的最后一个例程序。这里,你将学习到如何传输一个存储在一台机器上的MP3文件到另外的在同一个网络的机器上去。实际的MP3源 文件并不从主计算机上移除,它也不使复制到其他机器上去;事实上它将会转换成能使用RTP传输的文件格式并通过网络发送。一旦被一个客户端接收到,源文件 (现在是RTP信息包的形式)可以再次传输,这一次是在接收机器上可播放的一种格式。
在MediaTransmitter.java文件中源代码查看学习以下练习。
设置处理模式
我们可以在前面的章节中定义的处理模式的基础下来讨论我们的最终的例子。在传输机器上,处理模式看起来像这样:
事实上,MediaTransmitter对象源代码包括了以下三行:
private MediaLocator mediaLocator = null;
private DataSink dataSink = null;
private Processor mediaProcessor = null;
这三个实例变量可以直接映射到前面的处理模式图表,如下:
· mediaProcessor变量是我们的处理器;它将负责转换音频文件从MP3文件模式到一个适合通过RTP协议传输的格式。
· dataSink变量是我们的输出块。
· 当我们建立DataSink时我们需要指定一个MediaLocator,它是DataSink的目的文件。
当我们通过运行DataSink我们的处理过的媒体,它将传输到我们在MediaLocator中指定的地点。
RTP MediaLocator
在 前面的 两个练习中,我们通过从文件中获得的一个URL建立了MediaLocator实例。 在本练习中,我们必须建立一个MediaLocator来描述网络上媒体传播输出流;换句话说,我们必须创建一个能我们的音频传播的目的地的 MediaLocator。一个RTP MediaLocator符合如下规则,看起来就像一个典型的URL:
rtp:
//address:port/content-type
让我们看看上面URL规范的每一段:
· address 是将传输的媒体的地址。以单播的模式传输(一个专用IP地址),地址将会是有意接收的机器的IP地址。以广播的模式传播(到子网中的所有机器),地址将会 是以255作为最后的一块的子网地址。举个例子,如果我再子网中可指定地址为192.168.1和想要传播到子网中的所有节点,我可以指定 192.168.1.255作为地址;这样允许子网中的每个节点监听广播媒体。
· port 必须是被传输者和接收者都允许的一个端口。
· content-type 是媒体流类型。在我们的案子中,这个将会是音频。
下面的一个简单的RTP传播MediaLocator例子会让所有在指定网络中的机器接收到媒体流:
rtp: //192.168.1.255:49150/audio
创建一个处理机
在setDataSource()方法中我们首先要做的就是创建一个Processor实例。
下面的Processor的职责是转换MP3音频媒体为一个RTP来表示:
public void setDataSource(DataSource ds)
评论
发表评论
-
Bean-Managed Transactions
2009-01-19 22:58 1355To control transaction boundari ... -
EJB3.0初学备注
2008-08-31 23:33 1505Session Bean Example @State ... -
JUnit初学备注
2008-08-24 19:32 10791,Create a class for testing,he ... -
简易java分页标签
2007-12-17 15:18 69191,标签的实现类NumenTag.java java 代码 ... -
JSP模板应用指南
2007-12-15 16:48 2024Window 工具包提供了一种典型的布局机制,比如说在一个容器 ... -
用Java Mail发送带图片附件
2007-12-15 16:35 27161,读入图片的方式: 发现网上讲的很多读取图片的方式都不对,按 ... -
Filter对权限和session的控制
2007-12-15 16:26 1815用Filter防止用户访问一些未被授权的资源,比如一个用户未登 ... -
创建Java中的线程池
2007-12-15 16:12 1802线程是Java的一大特性,它可以是给定的指令序列、给定的方法中 ... -
JMF简单示例
2007-12-15 16:08 2067java 代码 import java.awt.*; ... -
在jar中查找类
2007-12-15 16:02 1674java 代码 import java.util.* ... -
Java程序易犯的21种错误
2007-12-15 15:57 10871.Duplicated Code 代码重复几乎 ... -
六种异常处理的陋习
2007-12-15 00:26 1193你觉得自己是一个Java专家吗?是否肯定自己已经全面掌握了Ja ... -
JXTA P2P网络编程技术
2007-12-15 00:24 23341.前言 最近,P2P(Peer-to-Peer)又成为 ...
相关推荐
Java Media Framework(JMF)是Java平台上的一个多媒体处理框架,它允许开发者处理音频、视频以及复杂的媒体流。本教程将带你深入理解JMF的基本概念、工作原理以及如何在实际项目中应用它。 JMF的核心功能包括播放...
个人整理的Java Media Framework API (JMF)的API,按Java6 API的风格整理
### Java Media Framework (JMF) 简介 Java Media Framework(简称JMF)是Sun Microsystems为Java平台提供的一套多媒体框架,它使得开发者能够轻松地处理音频、视频和其他形式的流媒体数据。JMF提供了丰富的API接口...
Java Media Framework (JMF) 是一个Java平台上的多媒体处理API,它允许开发者处理各种媒体类型,包括音频和视频。本文档是一份基础教程,由Eric Olson撰写并由pawenwen业余时间翻译,旨在为初学者提供JMF的入门知识...
Java Media Framework(JMF)API指南是一份详细阐述如何在Java平台上处理多媒体内容的重要文档。这份PDF指南旨在帮助开发者理解并有效地利用JMF来开发多媒体应用程序,如播放、捕获、处理音频和视频数据。以下是关于...
Java Media Framework(JMF)是Java平台上用于处理多媒体数据的核心框架。这个2.1.1e版本是一个较早但仍然广泛使用的发行版,主要用于开发能够播放、捕获、处理和控制音频、视频以及其它时间同步媒体的应用程序。...
### Java Media Framework (JMF) 基础教程知识点概览 #### 一、引言 Java媒体架构(Java Media Framework, JMF)是Sun Microsystems(现已被Oracle收购)开发的一套API,允许开发者轻松地处理多种媒体格式,如音频...
根据2013年7月最新文档制作自用,为备份共享。
### Java Media Framework (JMF) 基础教程概述 #### 一、关于本教程 本教程主要介绍Java Media Framework(简称JMF),这是一款功能强大且多用途的应用程序编程接口(API),允许Java开发者以多种方式处理媒体数据...
Java Media Framework (JMF) API 指南是Java开发者在处理多媒体内容时的重要参考资料。JMF 是一个可扩展的平台,用于播放、捕获、处理和操纵音频、视频和其他时间同步的数据流。这个API提供了丰富的功能,使得开发...
### Java Media Framework (JMF) 指南 #### 关于 JMF Java Media Framework (JMF) 是一个用于处理时间基媒体(如音频、视频)的开发平台。它为开发者提供了一套全面且强大的 API 来进行媒体的捕获、处理、存储以及...
JMF(java media framework)帮助文档
Java Media Framework(JMF)是Java平台上用于处理多媒体数据的一个框架,它允许开发人员创建、播放、捕获和操纵各种媒体资源,包括音频、视频和流媒体内容。本项目是基于JMF构建的一款视频音频播放软件,适用于Java...
Java Media Framework(JMF)是SUN Microsystems开发的一个开源框架,用于在Java应用程序中处理多媒体内容,如音频、视频和图像。它为开发者提供了一种跨平台的方式来播放、捕获、处理和流式传输多媒体数据。JMF源...
目前最新的JMF2.1.1e,java media framework全网只有这个下载分数最低,直接从官网下载的exe文件,解压后直接安装配置环境变量就可以使用了,而且本人为你们添加了MP3的插件,你们可以直接调用mp3解码器进行播放器的...
MP3Java是一个基于Java的项目,它利用Java Media Framework (JMF) 来处理和播放MP3音频文件。这个项目特别适用于那些希望在Java环境中集成MP3播放功能的开发者。让我们深入了解一下Java Media Framework和如何在Java...
Java MP3播放器是利用Java Media Framework (JMF) API来实现的一种软件工具,它允许开发者在Java应用程序中集成音频播放功能,特别是针对MP3格式的音频文件。JMF是Sun Microsystems开发的一个开源框架,主要用于处理...