`
dato0123
  • 浏览: 970634 次
文章分类
社区版块
存档分类
最新评论

JMF示例(二)

 
阅读更多
<!--<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组件使用JMFSwing组件是轻量级组件,而JMF默认使用的是重量级组件(它们可以为高速率的视频使用本地的绘制方法)。

解决方案:

JMF2.0包含了几个不同的视频绘制器,可以强制让播放器使用轻量级组件。示例如下:

Manager.setHint(Manager.LIGHTWEIGHT_RENDERER, new Boolean(true));

这在内部是通过PlugInManager来使其只能使用轻量级绘制器,此后创建的任何播放器都将使用轻量级绘制器。注意的是存在父容器中的组件的双缓存功能应该要开启。

分享到:
评论

相关推荐

    JMF摄像头视频采集示例

    在这个“JMF摄像头视频采集示例”中,开发者为学员提供了一个基础的教程,演示如何利用JMF捕获并显示来自本地摄像头的视频流。 JMF的核心功能在于提供了一个接口,使得开发者可以方便地访问和控制多媒体设备,如...

    java的JMF播放音乐示例

    在“java的JMF播放音乐示例”中,我们看到一个应用,该应用能够搜索E盘中的所有MP3文件并提供播放功能。这个示例对于初学者来说是一个很好的起点,它展示了如何利用JMF来处理音频文件。 首先,我们需要理解JMF的...

    java jmf 例子

    `myjmf`可能是一个自定义的JMF实现或者扩展,而`jmfDemo`则可能是一个演示如何使用JMF的示例程序。通常,JMF的示例会展示如何初始化媒体处理器,加载媒体文件,控制播放,以及处理播放事件等。 在JMF中,`javax....

    Jmf捕获摄像头的示例

    二、JMF与摄像头捕获 JMF通过注册系统中的媒体设备,如摄像头,来实现视频捕获。在Java程序中,我们可以创建一个`CaptureDevice`对象来表示摄像头,并使用`Processor`对象来处理摄像头捕获到的数据。 三、捕获...

    JMF_基础教程

    #### 二、JMF的主要功能和用途 - **功能**: - 播放本地媒体文件。 - 创建图形用户界面(GUI)以控制媒体播放。 - 通过网络传输和接收媒体。 - 处理各种类型的媒体数据。 - **用途**: - 开发多媒体应用程序。 ...

    JMF_demo.rar

    JMF_demo.rar 文件包含了一系列与JMF相关的资源,包括示例代码、安装程序、API文档以及使用指南,方便开发者学习和使用JMF进行多媒体应用开发。 首先,`Java Media Framework (JMF) API播放.exe` 是一个可执行文件...

    利用JMF进行多媒体编程

    Java多媒体框架(JMF)是Java平台上的一个强大工具,用于开发处理音频、视频和其它多媒体内容的应用程序。JMF提供了丰富的API,使得开发者无需深入理解底层复杂的多媒体处理技术,就能构建功能丰富的多媒体应用。 ...

    jmf基础教程

    本教程旨在为初学者提供一个入门的起点,通过几个实际的示例展示 JMF 的基本用法。 ### 1. 下载和安装 JMF 首先,你需要下载适合你操作系统(如 Windows, Solaris, Linux)的 JMF 版本。推荐选择与操作系统匹配的...

    JMF.zip_JMF W_Java 播放器_hookqq_jmf_jmf-2_0-spec

    "JMF.zip_JMF W_Java 播放器_hookqq_jmf_jmf-2_0-spec"这个压缩包包含了一个基于Java开发的媒体播放器示例,适用于初学者学习和理解JMF的用法。 JMF的核心是其组件模型,它支持多种媒体格式,包括音频、视频和流...

    JMF的一些资料

    这个压缩包文件可能包含了一些关于JMF的文档、教程、示例代码或者API参考,帮助用户理解和使用这个框架。 JMF的核心功能主要包括以下几个方面: 1. **多媒体支持**:JMF支持多种音频和视频格式,如MP3、WAV、MPEG...

    Java_JMF的使用

    播放器示例代码中可能包括创建一个视频捕获窗口,初始化CaptureDeviceInfo和MediaLocator来指定视频捕获设备,以及处理媒体数据流。此外,可能还会涉及到Buffer和BufferedImage的使用,Buffer用于接收媒体数据,而...

    JMF(Java媒体框架)

    4. **测试安装**:运行示例程序或者自己编写的简单程序,验证JMF是否正确安装并工作。 在实际项目中,开发者可能还需要关注性能优化、错误处理、多媒体数据的编码解码等问题。同时,由于JMF的更新相对较慢,可能...

    JMF教程详解及简单例子分析

    #### 二、环境准备与安装 1. **软件需求**: - Java2平台标准版(J2SE)2.1.1a及以上版本。 - 需要下载并安装包含JMF库的`mediaplayer.jar`文件。 - 其他必要的Java API文档。 2. **JMF安装步骤**: - 下载JMF...

    sun官网JMF包

    7. **示例代码**:下面是一个简单的JMF播放音频文件的示例: ```java import javax.media.Manager; import javax.media.MediaLocator; import javax.media.Player; public class JmfPlayer { public static ...

    JMF教程和深入理解

    在JMF的子文件中,可能会包含实际的代码示例,这些示例展示了如何创建一个多线程的JMF应用程序。通过这些实例,你可以看到如何在不同线程中启动Player,以及如何处理线程间的通信和协作。你可能还会找到关于错误处理...

    JMF2.1.1 For Windows

    4. **示例代码**:JMF通常会附带一些示例程序,帮助开发者快速理解如何使用框架,例如播放媒体文件、捕获音频或视频等。 5. **兼容性问题**:由于JMF相对较老,可能会遇到与新版本Java不兼容的问题,需要确认JMF版本...

    java JMF的配置方法

    #### 二、JMF简介 JMF全称为Java Media Framework,它提供了一组用于处理音频、视频和其他形式的流媒体数据的API。JMF可以处理各种格式的媒体数据,并支持实时播放和流媒体传输等功能。通过JMF,开发者无需深入了解...

    JMF多媒体api汉化

    Java Media Framework (JMF) 是一个开源的API,由Sun Microsystems开发,用于在Java应用程序中处理多媒体内容,如音频、视频和同步数据流。JMF为开发者提供了在Java环境中播放、捕获、处理和控制多媒体数据的能力。...

    jmf_mp3_plugin

    5. **示例代码**:可能提供了一些简单的示例,展示如何在Java程序中使用这个MP3插件。 在实际使用中,开发者需要将这个插件集成到他们的项目中,通常是通过将相关的库文件添加到项目的类路径中,并按照文档指示进行...

    JMF.rar_jmf_jmf 源码

    1. **基本播放示例**:展示如何使用JMF播放本地媒体文件或网络流媒体。 2. **录制与回放**:学习如何利用JMF捕获并存储媒体数据,然后进行回放。 3. **多线程处理**:理解在多线程环境中如何正确管理和同步JMF组件...

Global site tag (gtag.js) - Google Analytics