⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 javamf.txt

📁 Java媒体框架,java多媒体技术介绍
💻 TXT
📖 第 1 页 / 共 5 页
字号:

    Java媒体框架(Java Media Framework,简称
JMF)是能够在Java独立应用程序和小应用程序中
显示、获取多媒体数据的类的集合。JMF为媒体播
放器、媒体的获取以及媒体会议定义了统一的体系
结构、消息处理协议和程序设计接口。JMF提供了
一套构件块(building blocks),它对JMC API的其
他部分是非常有用的。例如,JMF提供了以跨平
台、与设备无关的方式访问音频设备的方法,这正
是Java Telephony API和Java Speech API所瀚要
的。另外,诸如动画和视频等基于时间媒体的演播
也祷要以相同的方法处理。第1章Java媒体播放器
    Java媒体框架(Java Media Framework,简称JMF)是向Java独立应用程序和小应用程序
中集成媒体数据类型的应用程序接口(API)。它是特为利用Java平台的特征而设计的。
JMF的1.0版为媒体播放器提供了APIs,未来的版本将支持媒体获取(capture)和媒体会议
( conferencing)。本章讲述Java媒体播放器(Java Media Player) AP‘以及怎样用它们来表现
音频和视频等时基媒体。
    Java媒体播放器APIs的1.0版解决了媒体显示以及该领域的应用程序开发者所关心
的问题,同时还顾及到了其他应用领域和不同层次的开发者。本章包括两部分:用户指南
和API文献。
    Java媒体框架(JMF)1. 0规范定义了显示时基媒体的APIs。本章介绍这些API以及
怎样用它们来表现音频视频等媒体。
    媒体显示包括两方面:在一个独立应用程序或小应用程序中对媒体数据进行本地和
网络演播。JMF 1.0中媒体播放器APIs旨在支持同步媒体数据的传输以及允许与基本平
台本地(native)环境和Java核心包(如java. awt)的集成。Java媒体播放器APIs支持客户
pull协议(如HTIP)和服务器协议(如RTP)。
    JMF简化了在客户独立应用程序和小应用程序中集成媒体的工作,并同时维持着愈
加复杂的应用和平台定制(customization)所需的灵活性:
    ?客户程序员通过使用几个简单的方法调用便能为任何标准的媒体类型产生和控
      制Java媒体播放器。
    ,技术提供者(provider)可以扩充JMF以便支持其他媒体格式,也可以通过产生和集
      成新的媒体控制器、媒体播放器和媒体数据源来完成特殊的操作。
1 .1 Java媒体播放器概述
    JMF为显示时基媒体提供了一个平台中立的框架。Java媒体播放器APIs就是设计为
支持大部分标准媒体类型,包括MPEG一1, MPEG一2, QuickTime, AVI, WAV, AU和MIDI
通过使用JMF,可以同步表现来自各种各样数据源的时基媒体。
    目前用于台式计算机的媒体播放器主要依靠本地代码来完成像解压缩、绘制等计算
密集型的任务。JMF API提供一种抽象(机制),向开发者隐藏了这些实现细节。例如,一
个具体JMF播放器的实现也许通过使用本地方法来充分发挥操作系统的能力。然而,由
于向JMF API编程,独立应用程序或小应用程序开发者不必知道实际上是否使用了本地
方法。
    JMF播放器API
    ?涉及不同的协议和传输机制;
                                                                                                          3?涉及不同的媒体数据类型;
?为JMF播放器与独立应用程序或小应用程序之间的异步通信提供了一个事件模
  型。
1.1.1数据源
    DataSource封装了媒体的位置和用于传输媒体的协议与软件。一个Java媒体播放器
包含了一个DataSource。某数据源一旦被获取,就不能再用于传输其他媒体。一个播放器
的数据源可用一个JMF MediaLocator或一个URL ( universal resource locator,统一资源定位
器)来标识。
    MediaLocato:是一个描述某播放器显示的媒体数据的类。MediaLocator类似于URL,并
可由URL构造出。在Java中,只有当相应的协议处理器安装以后,才能构造URL,而
MediaIAcato却没这个限制。
    Java媒体播放器能够表现从各种数据源处获得的媒体数据,如本地或网络文件、实况
广播等。JMF支持两类数据源:
    ?Pull数据源—客户激发数据变换,并控制着从Pun数据源来的数据流。已为这
      类数据建立的协议有HTTP(HyperText Transfer Protocol,超文本传输协议)和FILE
    .Push数据源—客户激发数据变换,并控制着从push数据源来的数据流。Push
      数据源包括广播媒体、multicast媒体和VOD (video-on-demand,视频点播)。一个针
      对广播数据的协议—RTP (Real-time Transport Protocol,实时传输协议)正在由
      IETF(Intemet Engineering Task Force, Internet工程任务协会)开发。由SGI开发的
      MediaBase协议用于VODo
    客户程序能够向用户扩展的控制度与表现的媒体数据源的类型密切相关。例如,一
个MPEG文件可以重定位,客户程序允许用户重播视频片段或在一个视频中寻找新的位
置。一些VOD协议支持有限的用户控制,如客户程序能够允许用户寻找新的位置,但不
能快进或后退。
1.1.2播放器
    一个Java媒体播放器是一个处理时基数据流的对象,该对象从数据源( DataSource )中
读取数据,并即时将其表现出来。Java媒体播放器实现了播放器接口。如图1.1所示、
    ?时钟(Clock)定义了播放器用来控制媒体数据表现的基本的计时和同步操作。
    ?控制器(Controller)扩展了Clock,旨在提供管理系统资源、预加载数据的方法,以及
        一个允许接收媒体事件标识的监听机制。
    ?持续时间(Duration)提供一种决定正被播放媒体的持续时间的途径。
    ?播放器(Player)支持标准化的用户控制,并减少了时钟(Clock)施加的一些操作限
        制。
    播放器共享一个计时与同步的公共模型。播放器的media time代表媒体流的当前位
置。每个播放器都有一个时基(TimeBase ),用来定义播放器的时间流程。每当一个播放
器启动时,其media time被映射为其time-base time。为了同步,播放器必须使用相同的时
        4图I .t Java媒体播放器
基(TimeBase )。
    播放器的用户接口可以包括一个可视构件和一个控制面板构件。既可实现一个专用
的用户接口,也可使用播放器默认的控制面板构件。
    播放器必须首先执行一系列操作才能表现媒体数据。由于某些操作可能是极其耗时
的,JMF通过定义播放器的操作状态以及提供一种切换播放器操作状态的机制,从而允许
控制这些操作出现的时机。
1.1.3媒体事件
    JMF事件报告机制允许程序响应媒体驱动的错误条件,如数据无效或资源无效条件-
事件系统还提供了一个基本的标识协议。当程序对一个播放器调用一个异步方法时.只
有接收到相应的事件,才能确保该操作是完备的。
    两类JMF对象可发送媒体事件:GainControl对象和Controlle:对象,它们都遵从已建立
的Java Beans事件模式。
    一个GainControl对象只通报一类事件—GainChangeEvent。为了响应增益变化(gain
change),你得实现GainChangeListene:接口。
    一个Controller对象可以通报由ControllerEvent引发的一系列事件。为了接收来自于
Controller(如Player)的事件,需要实现ControllerListener接口。图1.2显示了一个Controller
可以通报的事件。
    ControllerEvents分为三类:改变标识事件、事务事件、关闭事件。’
    ?诸如RateChangeEvent, DurationUpdateEvent等改变标识事件指出播放器的某些属性
                                                                                                          5图1.2媒体事件
  已经改变。例如,当因调用setRate而使其速度被改变时,播放器通报一个Rate-
  ChangeEvent o
?TransitionEvent允许程序对播放器的状态变化作出反应。只要播放器从一个状态
  变化到另一个状态,播放器就通报事务事件。(关于播放器的详细信息,请参阅
  1.4节。)
?ControllerClosedEvent是在播放器关闭时被播放器通报的。当播放器通报一个
  ControllerClosedEvent时,它已不再为可用的了。ControllerEnrorEvent是
  ControllerClosedEvent的一种特殊形式。可以监听ControllerErrorEvent,以便程序能对
  播放器的故障作出反应,使对用户的影响减少到最小。1.1.4播放器状态
    Java媒体播放器有6个状态。C碗k接口定义了两个主要状态:Stop详妇和Start“。为
了简化资源管理,ContIDller将Stop户妇进一步划分为5个备用(standby)状态:Unre川ized,
Realizing,Reali翻,P况fetehing和B吧企tch记,参见图1 .3所示。
S仓『之刁d
re81ize
位仍阴Zizedl,I掀留lizJ门91,I月砚d更名。dl,梦h目乞tc
        S众权床心:
尸R尧,:
顶卿一
d6allocate
deallocate,se侧妇diaTI.旧
RCE二Realiz州交.pleteEvent;I气花石二斤efetchQ笼。leteEvent
sto萨vent
图1.3播放器的状态
在通常的操作中,播放器逐个经过前面各状态才达到Sten记状态。
,处于Ull祀alized状态的播放器已被实例化,但对它的媒体一无所知。媒体播放器
  一旦被创建,就处于Unreali州」状态。
?当Realize被调用后,媒体播放器就从ul此alized状态移到R已公izing状态。处于
  Realizing状态的媒体播放器正在决定它的资源要求。在实现期间,播放器将获得
  那些其只需获得一次的资源,包括了除互斥使用资源以外的绘制资源。(互斥使
  用资源是诸如硬件设备等的有限资源,在同一时间只能由一个播放器使用。互斥
  使用资源将在状态中获得。)处于R阅izing状态的播放器常常从网络上下载有价
  值的东西。
.当播放器完成R已公ising后,就进人Reali翻状态。处于Realized状态的播放器知道
  其需要什么样的资源以及有关其将表现的媒体类型的信息。因为处于Re日izing
  状态的播放器知道如何绘制其数据,它能够提供可视构件和控制。它与系统中其
  他对象存在联系,但它不占有能妨碍其他播放器启动的资源。
.当prefeich被调用后,播放器就从R已吐i酬状态进人P沈fetching状态。处于
  B吧化tching状态的播放器正准备表现其媒体。在这期间,播放器预装人其媒体数
  据,获取互斥使用资源以及其他任何需要用于准备播放的资源。如果播放器的媒
  体表现被重复定位,或者因播放器速度的变化而需要另外的缓冲区或处理时,
  P陀几tching状态也许会循环出现。
,当播放器完成P尾几tohing后,就进人P限几tched状态。处于P陀血tched状态的播放
  器准备被启动,它已经准备好播放,只是未实际启动而已。
?调用sha将使播放器进人Sta时司状态。处于Sta欧司状态的时基时间被映射到媒
  体时间,其时钟开始运行起来,尽管播放器也许会等待一段时间才能开始表现其
                                                                                                    7      媒体数据。
    当从一个状态变换到另一个状态时,播放器通报T晓川sitionEvents。Controlle山stener接
口为程序提供了一种判断播放器所处状态以及对事件作出适当响应的方法。
    由于使用事件报告机制,当播放器开始Realizing和P花felching时,能通过控制来管理
播放器延时。这也能使我们确信在对其调用方法时,播放器处于合适的状态。
    为了避免竟争条件,并非所有的方法都能对处于任何状态中的播放器调用二表].1
即“对播放器方法的限制”,指出了JMF施加的限制。假如调用了一个对当前播放器状态
来说是非法的方法,播放器将抛出一个错误或异常。
                                  表11对播放器方法的限制
┌──────────────┬──────────────────┬──────────┬──────────┬───────────┐
│方法                        │Ul拟吸I渝d Pl日yer                  │凡兰司i搜d Player   │Prefetch已IPlayer   │欣art州1 PI拟er       │
├──────────────┼──────────────────┼──────────┼──────────┼───────────┤
│  —}                       │Not价aliz司E印〕r                   │le脚                │legal               │坛副                  │
│getstarthate现y             │                                    │                    │                    │                      │
├──────────────┼──────────────────┼──────────┼──────────┼───────────┤
│朗trJ叹meB睽                │NotReali吧汪如加r                   │lega】              │legal               │l。别                 │
├──────────────┼──────────────────┼──────────┼──────────┼───────────┤
│,门Media,、rne            │NotF义己alizedError                 │legal               │legal               │leg习                 │
├──────────────┼──────────────────┼──────────┼──────────┼───────────┤

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -