📄 jmf 翻译.txt
字号:
下面是我前些时候毕业设计的翻译,是JMF API指导中的一章,叫做Understanding JMF,我翻了不少天,现在贴出来,和大家共享一下,因为图片上传得实在太麻烦了,下面的这个就没有把图片上传过来,大家如果有需要的话就留Email吧,我会及时发给大家的,哈哈,大家一起学习啊^_^
网址:http://www.99inf.net/SoftwareDev/Java/54288.htm
JMF 翻译
1.0高层架构(High-Level Architecture)
1.1 时间模型(Time Model)
1.2 管理器(Managers)
1.3 事件模型(Event Model)
1.4 数据模型(Data Model)
1.5 控制(Controls)
1.6 用户接口组件(User Interface Components)
1.7 扩展性(Extensibility)
2.0 显示(Presentation)
2.1 播放器(Players)
2.2 处理器(Processors)
2.3 显示控制(Presentation Controls)
2.4 控制事件(Controller Events)
3.0 处理(Processing)
3.1 处理控制(Processing Controls)
3.2 数据输出(Data Output)
4.0 捕获(Capture)
5.0 多媒体数据存储和传输(Media Data Storage and Transmission)
5.1 存储控制(Storage Controls)
6.0 扩展性(Extensibility)
6.1 实现插件(Implementing Plug-Ins)
6.2实现媒体处理机制和数据源(Implementing MediaHandlers and DataSources)
理解JMF
JMF提供了一个高层结构和信息协议,来处理基于时间的媒体数据的获取,处理和传输。
正在装载数据……
JMF设计用来支持绝大部分的标准媒体内容类型,例如: AIFF, AU, AVI, ASM, MIDI, MPEG, QuickTime, RMF, WAV.
通过发掘java平台的优势,JMF秉承了“Write Once, Run Anywhere”的传统,开发者可以方便的在他们的程序中使用例如音频和视频之类的多媒体信息。JMF提供了一个跨平台的API,开发者可以根据它方便的写出可应用的java程序,来处理多媒体信息。
通过JMF, 你可以方便地创建出java applets和java applications,用来显示,捕获,操作,存储多媒体信息。这个框架可以使得先进的开发者们和技术支持者对原始的多媒体数据进行定制,甚至可以无缝地扩展JMF,来支持其他的类型和格式,对现支持格式定制处理方式,或者创建新的显示机制。
1.0 高层架构(High-Level Architecture)
例如VCR之类的设备提供了和JMF相似的模型来记录,处理,显示基于时间的多媒体。当你使用VCR播放电影时,你通过插入电影带为VCR提供多媒体数据。VCR读取并翻译存储在磁带上的数据,然后传输合适的数据到你的电视和音响上。
JMF使用与之类似的模型。数据源(data source)提供了多媒体数据流,如同磁带;播放器(player)提供了处理和播放机制,如同VCR。利用JMF播放和捕获音频和视频需要适当的输入和输出设备,例如:麦克风,摄像头,音响和显示器。
数据源(data source)和播放器(player)是JMF用来管理捕获,显示和处理基于时间的多媒体信息的高层API的核心部分。JMF也提供了低层次的API来支持定制的处理组件和扩展的无缝集成。
1.1 时间模型(Time Model)
JMF的时间维持在1ns的精度。时间上一个特殊的点可以典型的由一个Time对象来表示。
支持JMF时间模型的类实现了Clock接口,来为特定的多媒体流保持时间的追踪。Clock接口定义了基本的时间和显示多媒体数据所需要的同步的操作。
一个时钟对象(Clock)用时间基(TimeBase)在多媒体流显示过程中保持对时间流逝的同步。一个时间基(TimeBase)提供了一个时间源,就像手表中的石英体。时间基(TimeBase)提供的唯一信息就是它的当前时间,通常被称作标准时间(time-base time)。标准时间(time-base time)不能停止或者更新,它通常基于系统时间。
一个时钟对象(Clock)的媒体时间(media time)代表了多媒体流的当前位置——一个多媒体流开始的位置的媒体时间(media time)为零,这个多媒体流的结束位置的媒体时间(media time)为其最大。多媒体流的长度(duration)是它从来开始到结束所占用的时间——播放这段多媒体流多需要的时间。(多媒体对象(Media object)如果可以报告一段多媒体流的长度(duration),则实现了Duration接口)。
为了保持对当前媒体时间(media time)的追踪,时钟对象(Clock)使用:
● 基于标准时间的开始时间(start-time)——当开始显示时时间基(TimeBase)所报告的时间。
● 多媒体的开始时间(start-time)——当开始显示时多媒体流的位置。
● 播放速率(playback rate)——时钟(Clock)相对于时间基(Timebase)运行的速度。这个速率是一个应用于时间基(Timebase)的比例因素。例如,一个1.0的速率代表了正常的多媒体流的速率,而一个2.0的速率则代表了两倍于正常速率。一个负的速率代表了时钟(Clock)相对于时间基(Timebase)以相反的方向运行——例如,一个负的速率可能代表了多媒体流的后退。
当开始播放时,媒体时间(media time)对应于标准时间(time-base time),而标准时间(time-base time)的前进则代表了时间的度过。在播放过程中,媒体时间根据下面的公式来计算:
媒体时间=媒体开始时间+速率*(标准时间—时间基的开始时间)
当播放停止时,媒体时间也随之停止,但是给予时间的时间会继续前进。当重新开始播放时,媒体时间则根据当前的标准时间重新定位。
1.2 管理器(Managers)
JMF API的大部分接口定义了用来捕获,处理,显示基于时间的多媒体的对象的行为和交互。这些接口的实现在整个框架的架构之中。通过使用这些称之为管理器(Managers)的中间对象,JMF使得集成关键接口的实现变得简单易实现,这些接口通常与现存的类相互作用。
JMF使用四个管理器:
● Manager——处理Player,Processor,DataSource和DataSink的创建。从客户端的角度,这些对象总是以相同的方式创建的,无论请求的对象是默认的实现还是定制的。
● PackageManager——维护包含JMF类的包的注册信息,如:定制的Player, Processor, DataSource类。
● CaptureDeviceManager——维护着所有可用的捕获设备的注册信息。
● PlugInManager——维护着所有可用的JMF组件插件的注册信息,如:Multiplexers, Demultiplexers, Codecs, Effects, 和Renderers.
基于JMF写程序,需要使用管理器的create方法来为程序创建Player, Processor, DataSource和DataSink等类。如果从输入设备来捕获多媒体数据,需要先使用CaptureDeviceManager去找到可用的设备,获取关于他们的信息。如果对控制数据的处理过程有兴趣,需要查询PlugInManager看什么插件已经注册了。
如果通过实现新的插件来扩展JMF的功能,可以在PlugInManager中注册新的插件,使得Processor可以支持新的插件的API. 想要使用定制的Player, Processor, DataSource和DataSink,需要在PackageManager中注册新的包。
1.3 事件模型(Event Model)
JMF使用一个结构化的时间报告机制来使得基于JMF的程序获知当前多媒体系统的状态,使得基于JMF的程序能够在发生错误的情况下及时反映,如:数据溢出或源不可获取等。当一个JMF对象需要报告当前的状态时,会触发一个多媒体事件(MediaEvent)。
对于每一种可以触发多媒体事件(MediaEvent)的JMF对象,JMF定义了相应的listener接口。要获取触发的多媒体事件,需要实现合适的listener接口,并利用addListener方法在该对象中注册接口。
控制器对象(Controller),如Players和Processors,以及某些Control对象,如GainControl可以触发多媒体事件(MediaEvent)。
1.4 数据模型(Data Model)
JMF多媒体播放器(Player)通常使用数据源(DataSource)来管理多媒体内容的传输。一个数据源确定了多媒体文件的位置和相关协议,以及播放多媒体的软件。一旦获取,这些源不能再传输其他多媒体文件。
一个数据源可以由一个JMF MediaLocator或者URL来确定,一个MediaLocator与URL类似,也可以由URL来创建,但是仅能够在相应的协议处理机制已经在本地系统上安装的情况下。
一个数据源管理着一系列的SourceStream对象。一个标准的数据源使用字节数组当作传输的单位。一个buffer data object使用Buffer对象作为传输的对象。JMF定义了许多种数据源对象如下:
(1) Push and Pull Data Source
多媒体数据可以从许多种源中获取,例如:本地文件,网络,或者广播。JMF数据可以根据数据传输的初始化方式来分类:
● Pull Data Source——客户端初始化数据传输,控制数据的流动。已经建立的协议包括HTTP和FILE。JMF定义了两种类型的这种数据源:PullDataSource和PullBufferDataSource,后者使用Buffer对象来作为传输的单位。
● Push Data Source——服务器端初始化数据传输,控制数据的流动。包括广播媒体,VOD等。对于广播数据,一个协议就是实时传输协议RTP。JMF定义了两种类型的这种数据源:PushDataSource和PushBufferDataSource,后者使用Buffer对象来作为传输的单位。
客户端程序可以控制的程度取决于显示的数据类型。例如:一个MPEG文件可以重新定位,一个客户端程序可以允许使用者回放视频,或者重新定位。相反,一个服务器端控制的广播媒体则不能重新定位。一些VOD的协议可能支持有限的用户控制——例如,一个客户端程序可以允许用户寻找一个新的位置,但是不能快进或者快退。
(2) 特殊的数据源
JMF还定义了两种特殊类型的数据源:可克隆的数据源(cloneable data sources)和混合数据源(merging data source)。需要注意的是,后者合并时,需要是相同类型的数据源,如PullDataSource和PushDataSource就不能合并,而合并成功的数据类型为application/mixed-media。
(3) 数据格式
多媒体对象的格式由一个Format对象来表示。它描述了媒体编码格式名称,以及这种格式所需要的数据类型。
JMF继承了Format类来定义audio和video的格式:
AudioFormat:记载了音频格式的属性,如:频率,字节数,和通道数。
VideoFormat:记载了视频相关的资料信息,它包括有下面的格式:IndexedColorFormat,RGBFormat,YUVFormat,JPEGFormat,H261Format,H263Format。
要从Controller接收格式转变的通知,需要实现ControllerListener接口,并且接听FormatChangeEvent。
1.5 控制(Controls)
JMF Control提供了对对象属性的设置与查询机制。Control通常能提供相应的用户接口组件,使得用户可以控制对象的属性。许多JMF对象接触到Control,例如控制器(Controller),数据源,DataSink,JMF插件。
任何一个想要提供相应Control对象的JMF对象,可以实现Controls接口。Controls接口定义了回溯到其Control对象的方法。数据源(DataSource)和PlugIn使用了Controls接口来提供Control对象。
(1) 标准控制(Standard Comtrols)
JMF定义了标准Controls接口。CachingControl可以使得下载过程被模拟且显示出来。如果一个Player或者一个Processor要报告它的下载进程,可以通过实现这个接口,显示一个进度条。GainControl可以保证音量的调整。它也支持一个音量调整的listener机制。
JMF Control结构如下:
DataSink和Multiolexer对象可以从DataSource读取数据,并写入目的位置,例如一个实现了StreamWriterControl接口的文件。这个Control可以使得用户控制文件的大小。
FramePositionControl和FrameGrabbingControl为Player和Processor提供基于帧的能力。FramePositionControl可以使得在Player和Processor对象的多媒体流中精确的定位帧的位置。FrameGrabbingControl提供了一个在视频流中提取静态帧的机制。FrameGrabbingControl在Render层次也被支持。
有Format的对象可以实现FormatControl接口提供对该对象Format的获取。FormatControl也提供了Format的查询和设置功能。
TrackControl是FormatControl的一种,用在个别的Track处理上,例如Processor的Effect,Codec和Render。
PortControl和MonitorControl使得用户可以控制捕获过程。前者定义了控制一个捕获设备输出的方法,后者使得多媒体数据可以在捕获或编码过程中预览。
JMF还定义了Codec Control,来控制基于软件和硬件的编码,解码器,有:BitRateControl,FrameProcessControl,FrameRateControl,H261Control,H263Control,KeyFrameControl,MpegAudioControl,QualityControl,SilenceSupdivssionControl。
1.6 用户接口组件(User Interface Component)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -