<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->
importjavax.media.*;
importcom.sun.media.ui.*;
importjavax.media.protocol.*;
importjavax.media.protocol.DataSource;
importjavax.swing.*;
importjavax.swing.event.*;
importjava.awt.*;
importjava.awt.event.*;
importjava.net.*;
importjava.io.*;
importjava.util.Vector;
publicclassMDIAppextendsFrame
{
/*************************************************************************
*MAINPROGRAM/STATICMETHODS
*************************************************************************/
publicstaticvoidmain(Stringargs[])
{
MDIAppmdi=newMDIApp();
}
staticvoidFatal(Strings)
{
MessageBoxmb=newMessageBox("JMFError",s);
}
/*************************************************************************
*VARIABLES
*************************************************************************/
JMFramejmframe=null;
JDesktopPanedesktop;
FileDialogfd=null;
CheckboxMenuItemcbAutoLoop=null;
Playerplayer=null;
PlayernewPlayer=null;
Stringfilename;
/*************************************************************************
*METHODS
*************************************************************************/
publicMDIApp()
{
super("JavaMediaPlayer");
//Addthedesktoppane
setLayout(newBorderLayout());
desktop=newJDesktopPane();
desktop.setDoubleBuffered(true);//设置双缓存
add("Center",desktop);
setMenuBar(createMenuBar());
setSize(640,480);
setVisible(true);
try
{
UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
}
catch(Exceptione)
{
System.err.println("Couldnotinitializejava.awtMetallnf");
}
addWindowListener(newWindowAdapter(){
publicvoidwindowClosing(WindowEventwe){
System.exit(0);
}
});
Manager.setHint(Manager.LIGHTWEIGHT_RENDERER,newBoolean(true));
}
privateMenuBarcreateMenuBar()
{
ActionListeneral=newActionListener()
{
publicvoidactionPerformed(ActionEventae)
{
Stringcommand=ae.getActionCommand();
if(command.equals("Open"))
{
if(fd==null)
{
fd=newFileDialog(MDIApp.this,"OpenFile",
FileDialog.LOAD);
fd.setDirectory("/movies");
}
fd.show();
if(fd.getFile()!=null)
{
Stringfilename=fd.getDirectory()+fd.getFile();
openFile("file:"+filename);
}
}
elseif(command.equals("Exit"))
{
dispose();
System.exit(0);
}
}
};
MenuItemitem;
MenuBarmb=newMenuBar();
//FileMenu
MenumnFile=newMenu("File");
mnFile.add(item=newMenuItem("Open"));
item.addActionListener(al);
mnFile.add(item=newMenuItem("Exit"));
item.addActionListener(al);
//OptionsMenu
MenumnOptions=newMenu("Options");
cbAutoLoop=newCheckboxMenuItem("Autoreplay");
cbAutoLoop.setState(true);
mnOptions.add(cbAutoLoop);
mb.add(mnFile);
mb.add(mnOptions);
returnmb;
}
/**
*Openamediafile.
*/
publicvoidopenFile(Stringfilename)
{
StringmediaFile=filename;
Playerplayer=null;
//URLforourmediafile
URLurl=null;
try
{
//Createanurlfromthefilenameandtheurltothe
//documentcontainingthisapplet.
if((url=newURL(mediaFile))==null)
{
Fatal("Can'tbuildURLfor"+mediaFile);
return;
}
//Createaninstanceofaplayerforthismedia
try
{
player=Manager.createPlayer(url);//创建播放器
}
catch(NoPlayerExceptione)
{
Fatal("Error:"+e);
}
}
catch(MalformedURLExceptione)
{
Fatal("Error:"+e);
}
catch(IOExceptione)
{
Fatal("Error:"+e);
}
if(player!=null)
{
this.filename=filename;//保存文件名称
JMFramejmframe=newJMFrame(player,filename);//新建立一个播放窗口
desktop.add(jmframe);
}
}
}
classJMFrameextendsJInternalFrameimplementsControllerListener
{//播放器
Playermplayer;
Componentvisual=null;
Componentcontrol=null;
intvideoWidth=0;
intvideoHeight=0;
intcontrolHeight=30;
intinsetWidth=10;
intinsetHeight=30;
booleanfirstTime=true;
publicJMFrame(Playerplayer,Stringtitle)
{
super(title,true,true,true,true);
getContentPane().setLayout(newBorderLayout());
setSize(320,10);
setLocation(50,50);
setVisible(true);
mplayer=player;
mplayer.addControllerListener((ControllerListener)this);
mplayer.realize();
addInternalFrameListener(newInternalFrameAdapter()
{
publicvoidinternalFrameClosing(InternalFrameEventife)
{
mplayer.close();
}
}
);
}
publicvoidcontrollerUpdate(ControllerEventce)
{
if(ceinstanceofRealizeCompleteEvent)
{
mplayer.prefetch();
}
elseif(ceinstanceofPrefetchCompleteEvent)
{
if(visual!=null)
return;
if((visual=mplayer.getVisualComponent())!=null)
{
Dimensionsize=visual.getPreferredSize();
videoWidth=size.width;
videoHeight=size.height;
getContentPane().add("Center",visual);
}
else
videoWidth=320;
if((control=mplayer.getControlPanelComponent())!=null)
{
controlHeight=control.getPreferredSize().height;
getContentPane().add("South",control);
}
setSize(videoWidth+insetWidth,videoHeight+controlHeight+insetHeight);
validate();
mplayer.start();
}
elseif(ceinstanceofEndOfMediaEvent)
{
mplayer.setMediaTime(newTime(0));
mplayer.start();
}
}
}
问题:如何结合Swing组件使用JMF。Swing组件是轻量级组件,而JMF默认使用的是重量级组件(它们可以为高速率的视频使用本地的绘制方法)。
解决方案:
JMF2.0包含了几个不同的视频绘制器,可以强制让播放器使用轻量级组件。示例如下:
Manager.setHint(Manager.LIGHTWEIGHT_RENDERER,
new Boolean(true));
这在内部是通过
PlugInManager
来使其只能使用轻量级绘制器,此后创建的任何播放器都将使用轻量级绘制器。注意的是存在父容器中的组件的双缓存功能应该要开启。
分享到:
相关推荐
在这个“JMF摄像头视频采集示例”中,开发者为学员提供了一个基础的教程,演示如何利用JMF捕获并显示来自本地摄像头的视频流。 JMF的核心功能在于提供了一个接口,使得开发者可以方便地访问和控制多媒体设备,如...
在“java的JMF播放音乐示例”中,我们看到一个应用,该应用能够搜索E盘中的所有MP3文件并提供播放功能。这个示例对于初学者来说是一个很好的起点,它展示了如何利用JMF来处理音频文件。 首先,我们需要理解JMF的...
`myjmf`可能是一个自定义的JMF实现或者扩展,而`jmfDemo`则可能是一个演示如何使用JMF的示例程序。通常,JMF的示例会展示如何初始化媒体处理器,加载媒体文件,控制播放,以及处理播放事件等。 在JMF中,`javax....
二、JMF与摄像头捕获 JMF通过注册系统中的媒体设备,如摄像头,来实现视频捕获。在Java程序中,我们可以创建一个`CaptureDevice`对象来表示摄像头,并使用`Processor`对象来处理摄像头捕获到的数据。 三、捕获...
#### 二、JMF的主要功能和用途 - **功能**: - 播放本地媒体文件。 - 创建图形用户界面(GUI)以控制媒体播放。 - 通过网络传输和接收媒体。 - 处理各种类型的媒体数据。 - **用途**: - 开发多媒体应用程序。 ...
JMF_demo.rar 文件包含了一系列与JMF相关的资源,包括示例代码、安装程序、API文档以及使用指南,方便开发者学习和使用JMF进行多媒体应用开发。 首先,`Java Media Framework (JMF) API播放.exe` 是一个可执行文件...
Java多媒体框架(JMF)是Java平台上的一个强大工具,用于开发处理音频、视频和其它多媒体内容的应用程序。JMF提供了丰富的API,使得开发者无需深入理解底层复杂的多媒体处理技术,就能构建功能丰富的多媒体应用。 ...
本教程旨在为初学者提供一个入门的起点,通过几个实际的示例展示 JMF 的基本用法。 ### 1. 下载和安装 JMF 首先,你需要下载适合你操作系统(如 Windows, Solaris, Linux)的 JMF 版本。推荐选择与操作系统匹配的...
"JMF.zip_JMF W_Java 播放器_hookqq_jmf_jmf-2_0-spec"这个压缩包包含了一个基于Java开发的媒体播放器示例,适用于初学者学习和理解JMF的用法。 JMF的核心是其组件模型,它支持多种媒体格式,包括音频、视频和流...
这个压缩包文件可能包含了一些关于JMF的文档、教程、示例代码或者API参考,帮助用户理解和使用这个框架。 JMF的核心功能主要包括以下几个方面: 1. **多媒体支持**:JMF支持多种音频和视频格式,如MP3、WAV、MPEG...
播放器示例代码中可能包括创建一个视频捕获窗口,初始化CaptureDeviceInfo和MediaLocator来指定视频捕获设备,以及处理媒体数据流。此外,可能还会涉及到Buffer和BufferedImage的使用,Buffer用于接收媒体数据,而...
4. **测试安装**:运行示例程序或者自己编写的简单程序,验证JMF是否正确安装并工作。 在实际项目中,开发者可能还需要关注性能优化、错误处理、多媒体数据的编码解码等问题。同时,由于JMF的更新相对较慢,可能...
#### 二、环境准备与安装 1. **软件需求**: - Java2平台标准版(J2SE)2.1.1a及以上版本。 - 需要下载并安装包含JMF库的`mediaplayer.jar`文件。 - 其他必要的Java API文档。 2. **JMF安装步骤**: - 下载JMF...
7. **示例代码**:下面是一个简单的JMF播放音频文件的示例: ```java import javax.media.Manager; import javax.media.MediaLocator; import javax.media.Player; public class JmfPlayer { public static ...
在JMF的子文件中,可能会包含实际的代码示例,这些示例展示了如何创建一个多线程的JMF应用程序。通过这些实例,你可以看到如何在不同线程中启动Player,以及如何处理线程间的通信和协作。你可能还会找到关于错误处理...
4. **示例代码**:JMF通常会附带一些示例程序,帮助开发者快速理解如何使用框架,例如播放媒体文件、捕获音频或视频等。 5. **兼容性问题**:由于JMF相对较老,可能会遇到与新版本Java不兼容的问题,需要确认JMF版本...
#### 二、JMF简介 JMF全称为Java Media Framework,它提供了一组用于处理音频、视频和其他形式的流媒体数据的API。JMF可以处理各种格式的媒体数据,并支持实时播放和流媒体传输等功能。通过JMF,开发者无需深入了解...
Java Media Framework (JMF) 是一个开源的API,由Sun Microsystems开发,用于在Java应用程序中处理多媒体内容,如音频、视频和同步数据流。JMF为开发者提供了在Java环境中播放、捕获、处理和控制多媒体数据的能力。...
5. **示例代码**:可能提供了一些简单的示例,展示如何在Java程序中使用这个MP3插件。 在实际使用中,开发者需要将这个插件集成到他们的项目中,通常是通过将相关的库文件添加到项目的类路径中,并按照文档指示进行...
1. **基本播放示例**:展示如何使用JMF播放本地媒体文件或网络流媒体。 2. **录制与回放**:学习如何利用JMF捕获并存储媒体数据,然后进行回放。 3. **多线程处理**:理解在多线程环境中如何正确管理和同步JMF组件...