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

JMF示例(一)

 
阅读更多
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->importjava.applet.Applet;
importjava.awt.
*;
importjava.awt.
event.*;
importjava.lang.String;
importjava.net.URL;
importjava.net.MalformedURLException;
importjava.io.File;
importjava.io.IOException;
importjava.util.Properties;
importjavax.media.
*;

importcom.sun.media.
*;

/**
*ThisisaJavaAppletthatdemonstrateshowtocreateasimple
*mediaplayerwithamediaeventlistener.Itwillplaythe
*mediacliprightawayandcontinuouslyloop.
*
*<!--SampleHTML
*<appletcode=TVAppletwidth=587height=510>
*<paramname=filevalue="sun.avi">
*</applet>
*-->
*/
publicclassTVAppletextendsAppletimplementsControllerListener
{
privateStringfileToPlay="";//要播放的文件(完整的路径名称)
//mediaPlayer
Playerplayer=null;//播放器
//componentinwhichvideoisplaying
ComponentvisualComponent=null;//可视组件
//controlsgain,position,start,stop
ComponentcontrolComponent=null;//控制组件
//displaysprogressduringdownload
ComponentprogressBar=null;//进度条
longCachingSize=0L;
Panelpanel
=null;
PanelvPanel
=null;
intcontrolPanelHeight=0;
Image[]showmeImage
=null;
Image[]zoomImageUp
=null;
Image[]zoomImageDn
=null;
CPanelcPanel
=null;
ZoomButtonzoomButton;

final
int[]VLEFT={59,120};
final
int[]VTOP={33,67};
final
int[]VRIGHT={59+175,120+351};
final
int[]VBOTTOM={173,67+287+11};
final
int[]WIDTH={176,352};
final
int[]HEIGHT={138,288};

final
intHALF=0;//小屏
finalintFULL=1;//全屏

inttSize=0;

/**
*Readtheappletfileparameterandcreatethemedia
*player.
*/
publicvoidinit()
{

setLayout(
null);
setBackground(Color.white);

cPanel
=newCPanel();
add(cPanel);

//Figureoutwhatsizetouse
//Theapplettagtakesanoptionalparameter"SIZE"whosevalue
//canbe"half"or"full"
//Eg.<paramname=sizevalue=half>

StringszSize
="full";//getParameter("SIZE");
//屏幕一般是1024*768
if(Toolkit.getDefaultToolkit().getScreenSize().getWidth()>800)
tSize
=1;
else
tSize
=0;

if(szSize!=null)
{
if(szSize.toLowerCase().equals("full"))
tSize
=1;
elseif(szSize.toLowerCase().equals("half"))
tSize
=0;
}

cPanel.setBounds(VLEFT[tSize],VTOP[tSize],WIDTH[tSize],HEIGHT[tSize]);
//设置播放器上部分的窗口矩阵的位置

//Gettheimages
showmeImage=newImage[FULL+1];
zoomImageUp
=newImage[FULL+1];
zoomImageDn
=newImage[FULL+1];

showmeImage[HALF]
=getImage(getDocumentBase(),"ShowMeS2.jpg");
showmeImage[FULL]
=getImage(getDocumentBase(),"ShowMeS.jpg");
zoomImageUp[HALF]
=getImage(getDocumentBase(),"InUp.gif");
zoomImageDn[HALF]
=getImage(getDocumentBase(),"InDn.gif");
zoomImageUp[FULL]
=getImage(getDocumentBase(),"OutUp.gif");
zoomImageDn[FULL]
=getImage(getDocumentBase(),"OutDn.gif");
addZoomButton();

//URLforourmediafile
URLurl=null;

this.fileToPlay="d://rr.mp3";
FilefileToPlay
=newFile(this.fileToPlay);
try
{
//Createanurlfromthefilenameandtheurltothe
//documentcontainingthisapplet.
if((url=fileToPlay.toURL())==null)
Fatal(
"Can'tbuildURLfor"+this.fileToPlay);
//Createaninstanceofaplayerforthismedia
try
{
player
=Manager.createPlayer(url);//创建播放器
}
catch(NoPlayerExceptione)
{
System.
out.println(e);
Fatal(
"Couldnotcreateplayerfor"+url);
}
//Addourselvesasalistenerforaplayer'sevents
player.addControllerListener(this);//为播放器事件增加监听者

}
catch(MalformedURLExceptione)
{
Fatal(
"InvalidmediafileURL!");
}
catch(IOExceptione)
{
Fatal(
"IOexceptioncreatingplayerfor"+url);
}
}

/**
*Startmediafileplayback.Thisfunctioniscalledthe
*firsttimethattheAppletrunsandevery
*timetheuserre-entersthepage.
*/

publicvoidstart()
{
if(player!=null)
player.realize();
}

/**
*Stopmediafileplaybackandreleaseresourcebefore
*leavingthepage.
*/
publicvoidstop()
{
if(player!=null)
{
player.stop();
player.deallocate();
}
}

publicvoiddestroy()
{
player.close();
}

publicvoidpaint(Graphicsg)
{
if(showmeImage[tSize]!=null)
g.drawImage(showmeImage[tSize],
0,0,this);
super.paint(g);
}

publicsynchronizedvoidreSize()
{
cPanel.setBounds(VLEFT[tSize],VTOP[tSize],WIDTH[tSize],HEIGHT[tSize]);
if(visualComponent!=null){
Dimensionsize
=visualComponent.getPreferredSize();
intwidth=size.width;
intheight=size.height;

while(true){
//Scaletofit
if(width>WIDTH[tSize]||height>HEIGHT[tSize]){
width
/=2;
height
/=2;
}
elseif(width<WIDTH[tSize]&&height<HEIGHT[tSize]){
if(width*2<=WIDTH[tSize]&&height*2<=HEIGHT[tSize]){
width
*=2;
height
*=2;
}
else
break;
}
else
break;
}
visualComponent.setBounds((WIDTH[tSize]
-width)/2,
(HEIGHT[tSize]
-height)/2,
width,height);
}

if(controlComponent!=null){
controlComponent.setBounds(VLEFT[tSize],VBOTTOM[tSize],
WIDTH[tSize],
24);
controlComponent.invalidate();
}

remove(zoomButton);
addZoomButton();
repaint();
}

publicvoidaddZoomButton()
{
zoomButton
=newZoomButton(zoomImageUp[tSize],zoomImageDn[tSize],1-tSize);
add(zoomButton);
zoomButton.setBounds(showmeImage[tSize].getWidth(
this)-24,showmeImage[tSize].getHeight(this)-24,24,24);
}

/**
*ThiscontrollerUpdatefunctionmustbedefinedinorderto
*implementaControllerListenerinterface.This
*functionwillbecalledwheneverthereisamediaevent
*/
publicsynchronizedvoidcontrollerUpdate(ControllerEventevent)
{
//Ifwe'regettingmessagesfromadeadplayer,
//justleave
if(player==null)
return;

//WhentheplayerisRealized,getthevisual
//andcontrolcomponentsandaddthemtotheApplet
if(eventinstanceofRealizeCompleteEvent)
{
if((visualComponent=
player.getVisualComponent())
!=null){
cPanel.add(visualComponent);
}

if((controlComponent=
player.getControlPanelComponent())
!=null){

add(controlComponent);
controlComponent.setBounds(VLEFT[tSize],VBOTTOM[tSize],
WIDTH[tSize],
24);
controlComponent.invalidate();
controlComponent.repaint();
}
reSize();
player.prefetch();

}
elseif(eventinstanceofEndOfMediaEvent)
{
//We'vereachedtheendofthemedia;rewindand
//startover
player.setMediaTime(newTime(0));
player.prefetch();
}
elseif(eventinstanceofControllerErrorEvent){
player
=null;
Fatal(((ControllerErrorEvent)
event).getMessage());
}
elseif(eventinstanceofPrefetchCompleteEvent){
if(visualComponent!=null){
reSize();
}
player.start();
}
elseif(eventinstanceofSizeChangeEvent){
reSize();
}
}

voidFatal(Strings)
{
//Applicationswillmakevariouschoicesaboutwhat
//todohere.Weprintamessageandthenexit
System.err.println("FATALERROR:"+s);
thrownewError(s);//Invoketheuncaughtexception
//handlerSystem.exit()isanother
//choice.

}

/*************************************************************************
*INNERCLASSES
************************************************************************
*/

publicclassCPanelextendsPanel
{
publicCPanel()
{
super();
setBackground(Color.black);
setLayout(
null);
}
}

publicclassZoomButtonextendsComponent
{
Imageup,down;
intnewSize;

booleanmouseUp
=true;

publicZoomButton(Imageup,Imagedown,intnewSize)
{
this.up=up;
this.down=down;
this.newSize=newSize;
setSize(
24,24);
addMouseListener(
newMouseAdapter()
{
publicvoidmousePressed(MouseEventme)
{
mouseUp
=false;
repaint();
}

publicsynchronizedvoidmouseReleased(MouseEventme)
{
mouseUp
=true;
TVApplet.
this.tSize=ZoomButton.this.newSize;
reSize();
}
});
}

publicvoidpaint(Graphicsg)
{
if(mouseUp)
g.drawImage(up,
0,0,this);
else
g.drawImage(down,
0,0,this);
}
}

}


分享到:
评论

相关推荐

    JMF摄像头视频采集示例

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

    java的JMF播放音乐示例

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

    java jmf 例子

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

    Jmf捕获摄像头的示例

    总的来说,JMF捕获摄像头的示例是一个了解Java中多媒体处理的好起点,特别是对于那些需要在老版本Java环境中工作的开发者。然而,随着技术的进步,考虑使用更新的库和框架可能会带来更好的性能和兼容性。

    JMF_demo.rar

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

    利用JMF进行多媒体编程

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

    JMF_基础教程

    #### 一、Java媒体架构(JMF)简介 - **定义**: JMF(Java Media Framework)是一种广泛使用的API,旨在帮助Java开发者以多种方式处理多媒体数据,包括音频、视频和图像等。 - **目标**: 通过提供一系列高级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提供了一种标准的方式来集成各种媒体资源,包括音频、视频和流媒体内容。这个压缩包文件可能包含了一些关于JMF的文档、教程、示例代码或者API参考,帮助用户理解和使用这个框架。 JMF的核心功能主要包括以下几个...

    sun官网JMF包

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

    Java_JMF的使用

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

    JMF(Java媒体框架)

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

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

    JMF是Sun Microsystems开发的一个Java API,用于处理多媒体数据,如音频、视频等。通过本指南的学习,读者将能够掌握JMF的基本结构,并学会如何利用JMF来创建自己的多媒体应用程序。 **学习目标**:掌握JMF的基础...

    jmf_mp3_plugin

    Java Media Framework (JMF) 是一个开源的Java平台框架,用于处理多媒体数据,包括音频和视频。MP3插件是JMF的一个扩展,允许程序在Java环境中播放、处理和操作MP3音频文件。"jmf_mp3_plugin"的标题和描述暗示了这是...

    jmf rtp 传输视频例子

    在描述中提到的"本机测试只能一个传一个接并展示,除非多个摄像头",这意味着这个示例可能是一个简单的点对点视频传输应用。在单个主机上运行时,可能只能同时支持一个发送者和一个接收者,这可能是因为JMF的实现...

    jmf播放器_java

    总的来说,"jmf播放器_java"是一个简单的示例,展示了如何使用Java和JMF库来构建多媒体播放器。虽然它的功能有限,但对于学习JMF和多媒体处理的初学者来说,是一个很好的起点。然而,在实际项目中,考虑使用更现代和...

    JMF2.1.1 For Windows

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

    JMF教程和深入理解

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

    jmf.rar_JMF api_JMF A_JMF API_jmf_jmf.jar a

    文档通常会包含示例代码,帮助开发者理解和学习如何在实际项目中应用JMF。 3. **www.pudn.com.txt**: 这个文件可能是一个链接或者引用来源,可能是从Pudn.com这个网站下载的资源。Pudn.com是一个分享技术文档和资料...

Global site tag (gtag.js) - Google Analytics