📄 javamf.txt
字号:
│SetHale │N‘,宜Re目i贺dEllljr │le时 │1e副 │]。蒯 │
├──────────────┼──────────────────┼──────────┼──────────┼───────────┤
│ge全V isuaJC帅p0lle;It │N。出e习izedEll℃r │leg公 │leg司 │l护即l │
├──────────────┼──────────────────┼──────────┼──────────┼───────────┤
│罗之Control】与ndConp)。en之│NotReali跄龙力℃r │le罗1 │l咧 │l咧 │
├──────────────┼──────────────────┼──────────┼──────────┼───────────┤
│ge1(;ainC‘)n伽l │N以RealiZ巴」Erpor │le娜 │le咧 │卜群l │
├──────────────┼──────────────────┼──────────┼──────────┼───────────┤
│、占tovTime │NotRealizedEI,”.. │le蒯 │Iegal │StopTime撇EI刊[ │
│ │ 一 │ │ │if Prev,‘)usl、叨毛 │
│ │ 一│ │ │ │
├──────────────┼──────────────────┼──────────┼──────────┼───────────┤
│syncstart │从止PrefetchedErn)r │隔tRefetchel」E加r │le缪I │CI说巧taltedEm); │
├──────────────┼──────────────────┼──────────┼──────────┼───────────┤
│阴fl、imeB‘址动毛 │N‘)tReali双妇En份 │l咧 │legal │a优kstarted卜附, │
├──────────────┼──────────────────┼──────────┼──────────┼───────────┤
│dea】1以:ate │legal │le脚 │le咧 │CI贺kstalledE门丫!盆 │
├──────────────┼──────────────────┼──────────┼──────────┼───────────┤
│Add弓沁nm司l叮 │N以ReahZ洲任:n”r │legal │le咧 │C城ksta八e般卿。 │
├──────────────┼──────────────────┼──────────┼──────────┼───────────┤
│RellloveController │NotBe日i双妇El爪〕r │,le蒯 │le咧 │口ock阮玉n以IE朋: │
├──────────────┼──────────────────┼──────────┼──────────┼───────────┤
│Man’IbII、,B, │已兄kstop州Exce西。 │C阮k腼p,叹犯xce如。│C城k3o傅以IExcePti。│I£邵l │
└──────────────┴──────────────────┴──────────┴──────────┴───────────┘
1.1.5调用乃n刃方法
JMF使用下列关于错误和异常的约定:
?当程序调用一个在当前播放器状态下为非法的方法时,将报告Java媒体错误错
误在以下情形中被报告:控制着播放器状态,而所需的操作产生了一个竞争条件-
例如,对处于Started状态的播放器调用某些方法将报告一个错误。在使用这些方
法前,应该确保播放器处于Stop详妇状态。应用程序不会捕获JMF错误,编写良好
的应用程序从不会碰到这些错误。
。当程序调用了一个不能被完成或者在播放器的当前状态下是不能使用的方法时,
将出现Java媒体异常。异常在没有必要控制播放器状态的情形中被报告。例如,
8 假如试图用不兼容的时基来同步两个播放器时,将出现异常。这不是一个错误
因为事先不能判断时基是不兼容的。同样,假如调用一个只适合于处于Started状
态的播放器的方法,而目前播放器正处于Stopped状态时,将出现异常。即使刚刚
启动某个播放器,它也可能会因其他竞争条件而停止,如媒体的结束。
一些JMF方法返回结果值,以指出方法调用的结果。在某些情况下,这些结果并不
是调用方法时所期望的;通过检查返回值,能判断出实际发生了什么。例如,返回值也许
指出:
?实际设定的值。例如,并非所有的播放器都能以5倍于正常速度的速度表现媒
体。如果调用setRate (5 . 0 ),播放器尽最大可能将其速度设置为5.0,并且返回实
际设定的速度。速度可能是5.0,也可能是1.0,这要检查返回值才能发现。
?所需要的信息目前不存在。例如,一个播放器直到播放完媒体流时才知道其持续
时间。如果在播放器播放之前对其调用getDuration方法,getDurat ion返回
DURATION _ UNKNOWN。如果在它播放完之后再调用getDuration,将返回媒体流的
实际持续时间。
1.2范例:生成一个播放媒体文件的小应用程序
该例子程序说明在Java小应用程序中如何产生一个Java媒体播放器,以及如何播故
MPEG电影。这是一个通用的例子,可用来播放其他类型的媒体流。
播放器的可视外观(presentation)和它的控件显示在浏览窗口中小应用程序的表现空
间(presentation space)里。如果在一个Java独立应用程序中产生播放器,那么就得负责创
建显示播放器构件的窗口。
注意:当PlayerApplet解释Java媒体播放器的基本用途时,它没有运行在实际小应用
程序和独立应用程序中所必需的错误处理程序。为求一个更完整的适合于用作模板的范
例程序,请参阅附录A"Java媒体小应用程序”。
1.2.1
概述
在下面HTML文件中,APPLET标志用于激活PlayerAppleto APPLET标记(tag)的
WIDTH和HEIGHT属性用于决定浏览窗口中小应用程序表现空间的大小,PARAM标记指
出被播放的媒体文件。例如,PlayerApplet可用以下程序激活:
<APPLET CODE= ExampleMedia.PlayerApplet
WIDTH=320 HEIGHT=300>
PARAM NAME=FILE VALUE="Astrnrny.mp了>
/APPLET>
每当用户打开一个包含PlayerApplet的Web页面时,该小应用程序自动装人并在特制
的表现空间中运行起来。表现空间包含了播放器的可视构件和默认控件。播放器启动起
来,播放MPEG电影一次。用户可用默认的播放器控件来停止、重启动或重播电影。如果
包含该小应用程序的页面在播放器正播放电影时被关闭了,播放器将自动停止,并释放它
9所占用的资源。
为完成这个功能,PlayerApplet扩展了小应用程序,并实现了Controllerbstener接口
PlayerApplet定义了5个方法:
?ini一为在PARAM标记中传进的文件产生一个播放器,并将PlayerApplet注册为
ControllerUstener,以便它能观察播放器报告的媒体事件。(这将引起PlayerApplet
的ControllerUpdat。方法被调用,只要播放器报告一个事件。)
?start—当PlayerApplet被启动时,启动播放器。
?stop—当PlayerApplet被停止时,终止并重新分配(deallocate)播放器。
.destroy一一一当PlayerApplet被取消时,关闭播放器。
?controllerUpdat一响应显示播放器构件的播放器事件。
1.2.2
代码列表
PlayerApplet.lava:
package ExampleMedia:
import java.applet.关;
import java.awt.
import java.net.
import javax.media.关
public class PlayerApplet extends Applet implements Control lerListener
Player player=null;
public void init(){
setLayout(new BorderLayout());
String mediaFile=get Parameter ("FILE");
try{
URL mediaURL = new URL(getDocumentBase(), mediaFile);
player=Manager.createPlayer(rnediaURL);
player.addControllerListener(this);
}
catch(Exception e){
System.err.pr主ntln("Got exception’‘十e);
public void start()
player.start();
public void stop(){
player.stop();
player.deallocate();
public void destroy(){
player.close();
public synchronized void control lerUpdate(ControllerEvent event){
if (event instanceof Real izeCompleteEvent)}
Component
if((comp
0功p;
player.getVisualComponent())!二null)
10 add ("Center', comp);
主f((COME)二p工ayer.getControlPanelComponent())!二null)
add ("South", comp):
validate();
.2.3初始化applet
当一个Java小应用程序启动时,它的init方法被自动激活。为小应用程序启动做准
备,你得重载init方法。PlayerApplet在init中完成4项工作:
(1)查询小应用程序的FILE参数。
(2)用FILE参数来定位媒体文件,并构造一个描述该媒体文件的URL对象。
(3)通过调用Manager. createPlaye;产生一个播放器。
(4)通过调用addContmllerListener,将该小应用程序注册为新的播放器的控制监听器
(controller listener)。由于被注册为监听器,只要播放器报告一个媒体事件,PlayerApplet的
controllerUpdate方法就会被自动调用。只要其状态一改变,播放器就会报告媒体事件、这
种机制允许控制播放器的状态转换,并确保播放器处于一个能够处理需求的状态。代码
如下:
public void init(){
setLayout(new BorderLayout());
l丫1 .Get the FILE parameter.
St二主ng mediaFile=getParameter("F工LE" );
try{
乃'2 .Create a URL from the FILE parameter. The URL
// class is defined in java.net.
URL mediaURL二new URL(getDocumentBase(),mediaFile);
//3 .Create a player with the URL object.
player二Manager.createPlayer(mediaURL);
// 4.Add PlayerApplet as a listener on the new player.
player.addControllerListener(this);
catch (Exception e){
System. err. print ln("Got exception”+e);
.2.4控制播放器
小应用程序类定义了start和,top方法,它们在包含该小应用程序的Web页被打开或
关闭时被自动调用。为了定义每次的小应用程序启动或停止时发生什么事情,需要重载
start和stop方法。
PlayerApplet实现了start:每当小应用程序启动时,start便启动一个播放器。代码
如下: public void start(){
player.start();
{
同样,PlayerApplet重载了,top,以便终止和重新分配播放器。代码如下:
public void stop()}
player .stop();
player.deallocate();
对播放器的重新分配将释放任何妨碍别的播放器启动的资源。例如,如果播放器使
用某硬件设备表现媒体,那么deallocate将释放该硬件设备,以供别的播放器使用。
小应用程序在退出时调用destroy方法来清除其产生的资源。为关闭播放器,Player-
Applet重载了destroy。播放器执行close方法将释放其所用的所有资源,并将其永远停止
代码如下:
public void destroy(){
player.close();
.2.5响应媒体事件
由于PlayerApplet在init方法中将其注册为ControllerUstener,因此它能接收来自于播
放器的媒体事件。为了响应这些事件,PlayerApplet实现了controllerUpdate方法〔)一旦播
放器报告一个事件,该方法就自动执行。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -