📄 jmf 翻译.txt
字号:
一个Control提供了用户接口组件。要为一个特定的Control获取默认的用户接口组件,采用方法getControlComponent。这个方法会返回一个awt组件,可以添加到自己的applet或者application程序上。
一个Controller也可以提供用户接口组件。例如,一个Player可以提供一个可视组件和panel组件——想要获取这些组件,可以采用Player的getVisualComponent和getControlPanelComponent方法。
如果不想使用默认的用户接口组件,也可以自己定制,并使用listener事件机制来决定什么时候需要更新。
1.7 扩展性(Extensibility)
可以使用下面两种方式来扩展JMF的功能:
● 实现定制的处理组件(Plug-ins),可以由一个JMF Processor使用的标准处理组件交互。
● 直接实现Control,Player,Processor,DataSource和DataSink。
一旦一个插件在JMF中注册了,它就可以被选作一个支持插件的Processor的处理选项。
2.0 显示(divsentation)
在JMF中,显示过程由Controller接口来处理。Control定义了一个控制,显示,捕获基于时间的多媒体的对象的基本状态和控制机制。它定义了多媒体Controller不同的状态以及不同状态之间转换的控制机制。许多多媒体数据显示之前的操作比较耗时,所以JMF允许程序控制它们。
一个Controller会触发专有的MediaEvent来通知它的状态改变。想要接收来自Controller的事件,需要实现ControllerListener接口。获取想要更多的信息,可以参考Controller Events。
JMF API定义了两种类型的Controller:Player和Processor。一个Player或Processor为一个特殊的数据源创建,一般不能再显示其它的多媒体数据。
2.1 播放器(Player)
一个播放器(Player)处理一个多媒体流的输入流,并且以精确的时间输出显示。一个数据源(DataSource)用来向Player传输输入的多媒体流。输出的目标取决于播放的多媒体的类型。
一个Player对处理过程不提供控制,但支持标号化的用户控制,并且对Clock和Controller放松了操作上的限制。
(1) Player状态
一个Player有六个状态。时钟接口定义了两个基本状态:停止(stopped)和开始(started)。为了实现资源管理,Controller将stopped状态分成五个状态:Unrealized,Realizing,Realized,Prefetching和Prefectched。
在通常的操作中,一个Player必须经过每一个阶段直到Started状态:
●Unrealized:一个Player被初始化,但还未获取播放的内容。
●Realizing:Player决定资料来源需求时。Realizing通常用于从网络上下载多媒体资料。
●Realized:当Player完成Realizing后,即进入Realized状态。至此阶段,已知媒体的需求以及媒体播放类型的资料。它也提供了可视组件和控制,可以连接到系统的其它对象。
●Prefetching:开始准备播放媒体,若播放位置改变,则Player中心配置。
●Prefetched:进入播放状态。
●Started:呼叫start,将Player放到Started状态。当Player对象的标准时间(time-base time)和媒体时间(media time)对应后,开始播放。
当Player的状态变化时,会产生TransitionEvents。ControllerListener接口也可以提供方法,使得获知Player的状态以及相应的做出反应。例如:在一个Player或Processor中呼叫异步的方法时,需要听到合适的Event来确定何时完成该方法。
(2) 在每一个状态中使用的方法
为了避免特殊的事件,并不是所有的方法在每一个状态中都可以使用,下表即为Player的每一个状态中,JMF定义的方法使用说明,若果不合法,会抛出Exception。
方法
Unrealized Player
Realized Player
Prefetched Player
Started Player
addController
NotRealizedError
合法
合法
ClockStartedError
deallocate
合法
合法
合法
ClockStartedError
getControlPanelComponent
NotRealizedError
合法
合法
合法
getGainControl
NotRealizedError
合法
合法
合法
getStartLatency
NotRealizedError
合法
合法
合法
getTimeBase
NotRealizedError
合法
合法
合法
getVisualComponent
NotRealizedError
合法
合法
合法
mapToTimeBase
ClockStoppedException
ClockStoppedException
ClockStoppedException
合法
removeController
NotRealizedError
合法
合法
ClockStartedError
setMediaTime
NotRealizedError
合法
合法
合法
setRate
NotRealizedError
合法
合法
合法
setStopTime
NotRealizedError
合法
合法
StopTimeSetError
if divviously set
setTimeBase
NotRealizedError
合法
合法
ClockStartedError
syncStart
NotPrefetchedError
NotPrefetchedError
合法
ClockStartedError
2.2 处理器(Processor)
Processor也可以用来显示多媒体。一个Processor是一个特殊类型的Player,它提供了对输入多媒体流的处理控制。一个Processor支持所有Player的显示控制。
将多媒体数据传递到显示设备,Processor可以通过DataSource输出媒体数据,,这样就可以由另外的一个Processor或者Player显示,甚至由另一个Processor处理,或者传输到其它的目的地,例如文件。
2.3 显示控制(Presentation Control)
除了由Controller定义的标准显示控制,Player或者Processor也可以提供调整音量的方法。可以通过调用getGainControl对象来实现,一个getGainControl对象在音量需要调整时会触发GainControlEvent。通过实现GainChangeListener接口,可以在需要调整时做出反应。例如,你可能会需要更新一个定制的gain control组件。
其它定制的Control类型会被特殊的Player和Processor对象所支持,提供一些控制行为,显示定制的用户接口组件。通过getControl方法获取这些控制。
例如,CachingControl接口继承了Control,提供了一个显示下载进程栏的控制机制。如果一个Player实现了这个接口,它就可以显示它的下载进程。要找出一个Player是否支持CachingControl,可以采用getControl方法或者getcontrols方法获取所有支持的Control的名单。
标准用户接口组件
一个Player或者Processor一般会提供两个标准用户接口组件,一个可视的组件和一个control-panel组件。可以通过getVisualComponent和 getControlPanelComponent方法获取这些组件。也可以实现定制的用户接口组件,并且用事件聆听机制来决定是否需要更新。
2.4 控制事件(Controller Events)
ControllerEvents提供三种类型的Events:
● 状态更改而触发的Event:例如RateChangeEvent,DurationUpdataEvent,FormatChangeEvent表示Controller的一些属性被修改了。例如,Player提供了RateChangeEvent,当rate被改变时就呼叫setRate。
● TransitionEvent:它允许我们的方程在Controller对象的状态改变时(无论什么状态),都触发TransitionEvent。
● ClosedEvent:ControllerClosedEvent继承ControllerEvent而来,提供关闭功能;ControllerErrorEvent继承ControllerClosedEvent,当程序发生错误时,可以让响应错误,并将错误造成的影响降低到最低。
3.0 处理(Processing)
一个处理器(Processor)是一个将数据源作为输入,对多媒体数据采取一些用户定义的处理,并输出处理后的多媒体数据的播放器(Player);
一个Processor可以输出数据到显示设备,或者到数据源。如果数据输出到数据源,那么这个数据源可以用来作为另一个Processor或者Player的输入。
多媒体数据的处理过程分为下面几个阶段:
● Demultiplexing:分析输入的数据流,如果数据流中包含了多个tracks,则将之分离。例如,QuickTime可以分离成音频和视频。无论是否包含了多重的数据,都会自动执行Demultiplexing。
● Pre-Processing:预处理,对输入的数据流中的tracks做特效的运算处理。
● Transcoding:转码;压缩——解压缩。
● Post-Processing:对解码的tracks做特效的运算处理。
● Multiplexing:将多重的tracks合并成一个单一的数据流。例如:将分离的视频和音频合并成单一的MPEG-1格式的数据流,数据的类型可以有方法setOutputContentDescriptor定义。
● Rendering:将多媒体播放出来。
Procssing处理的每一个阶段,由不同的processing组件所构成,而这些组件就是JMF插件。假如Processor支持TrackControls的话,可以选择用何种插件来处理track。JMF插件分为五种类型:
● Demultiplexing——分析媒体资料,例如:WAV,MPEG等。如果媒体流是多种格式复合的,则分开处理。
● Effect——对媒体资料进行特效。
● Codec——进行编码,解码。
● Multiplexer——合并多个tracks,作为一个单一的输出流,并输出到数据源。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -