JMF API 中文指导

JavaTM Media Framework API Guide    NO.2

  High-Level Architecture

Time Model

Managers

Event Model

Data Model

Controls

User Interface Components

Extensibility

 

Presentation

Players

Processors

Presentation Controls

Controller Events

 

Processing

Processing Controls

Data Output

 

Capture

 

Media Data Storage and Transmission

Storage Controls

 

Extensibility

Implementing Plug-Ins

Implementing MediaHandlers and DataSources

 Go Top


Time Model

關於TIME,可實作二個相關的interface:

Clock Interface:定義了basic timing和同步時所需的資料,clock是使用TimeBase作為track行進的時間(而time-base提供的資訊只有目前的時間,以system clock為主)

Duration Interface:影片的開始到結束的時間(片長時間)

為了維持track目前時間,Clock使用:

以time來記錄

以position來記錄

以play back rate:rate=張數 / 秒數 * 時間

公式:MediaTime=MediaStartTime+Rate(TimeBaseTime-TimeBaseStartTime)

                                          位置                        絕對時間

 

JMF time model 

 

 


Managers

 

對於媒體的擷取、處理和播放時間性的媒體,JMF都有提供相關的API

JMF所使用的 4 managers

1.          Manager--包含Players, Processors, DataSourcesDataSink四種classesobject都是用此四種去建構成的。

2.          PackageManager--可自定classes,如:自定的Players Processors DataSourcesDataSinks

3.          CaptureDeviceManager--當我們要從input devicecapturing媒體資料的話,就需使用CaptureDeviceManager去尋找可以使用、存取的devices

4.          PlugInManager--當我們要處理資料的performance(如:編碼),可以使用 plug-in的處理元件,如Multiplexers,Demultiplexers, Codecs, EffectsRenderers.

 

JMF的程式中,我們將使用到這些Managercreate methods去建構Players Processors DataSourcesDataSinks

 


 

Event Model

 

MediaEvent 是定義許多JMF事件的子集合。如:我們要implement一個 listenerinterface,我們就需呼叫事件:addListener;我們要去controller objects(PlayersProcessors)creatain Control objects就需呼叫事件:GainControl

 

 


 

Data Model

 

JMFmedia players通常使〞DataSources〞管理媒體的傳輸、連結。

DataSource包含了媒體位置、protocol、和使用何種軟體來傳送媒體。

DataSource不是透過MediaLocator就是透過URL來定義,MediaLocator很類似URL而且可以從URL中去建構,即使系統上沒有安裝符合的protocol handler仍可被create。(但在Java中,只有在系統上安裝符合的protocol handler時才可被create

 

DataSource管理一或多個SourceStream objects。一個標準的data source是使用byte為傳送單位;一個buffer data source是使用buffer為傳送單位。JMF定義了幾種DataSource objects的型態:

 

 

 

 

根據資料傳送方式分類:

  • PullDataSourceclient端開始傳送資料,並控制pull data-sources的資料流,使用的protocols型態為HTTPFILEJMF定義二種pull data sources型態:PullDataSourcePullBufferDataSouce
  • PushDataSourceserver端開始傳送資料,並控制push data-sources的資料流。使用的protocols型態包括RTPmulticast mediaVODJMF定義二種push data sources型態:PushDataSourcePushBufferDataSouce

client端程式可依使用者自訂,並將其以dataSource型態播出。例如:MPEG:使用者可自行改變播放位置、重播。相對的,廣播則是由server端控制,則無法改變播放位置,有些VOD支援使用者控制例如:client端程式允許使用者能尋找到新的位置,但無法快轉或倒帶。

 

 

Specialty DataSources

 

JMF定義了二個特殊的Data Sources型態:Cloneable data SourcesMerging data Source

必須注意的是合併時DataSource須都皆為同一型態,例如:PullDataSourcePushDataSource不可合併。而合併後的Content Typeapplication/mixed-media

 

Data  Formats

 

描述媒體編碼格式名稱,資料格式型態的需求。

JMF繼承Format去定義audiovideo的格式:

 

AudioFormat:記載audio格式的屬性,例如:頻率、bits數、和channel數量

VideoFormat:包含video相關的資料訊息。VideoFormate包含以下數個共同的格式: IndexedColorFormat RGBFormat YUVFormat JPEGFormat H261Format H263Format

 


 

Controls

 

提供設定、查詢物件屬性,通常提供存取符合的使用者介面元件,可讓使用者控制物件的屬性。許多JMF  objects有接觸到Controls,包括:Controller objectsDataSource objectsDataSink objectsJMF plut-ins

 

上圖為JMF controls

 

 

JMF定義的Standard Controls

  • CachingControl:監控下載進度和播放,假如,Player或Processor可以記載download progress,CachingControl就可以implements interface,讓progress bar可以display出來。
  • GainControl:能夠調整audio音量,例如:對於player或processor輸出的聲音做調整或消音,它同時支援音量改變的mechanism。

 

上圖為Gain control

 

 

l            StreamWriterControl:可使用DataSinkMultiplexerobjectsData Source讀入媒體,並寫至目的地(如:file),可實作StreamWriterControl介面,且這個Control可限制stream產生的大小。

l            FramePositioningControl:可在PlayerProcessor物件的media stream中正確地取得Frame的位置。

l            FrameGrabbingControl:可以從video stream中攫取video frame,且此Control也支援Render。

l            FromatControl:提供查詢與設定格式的method

l            TrackControl:是屬於FormatControl的一種型態,用在個別的tracks處理processor object performs(如:EffectCodecRender plug-ins)

l            PortControlMonitorControl:可以用來控制capture processPortControl定義了用來控制屬於capture輸出設備的methodMonitorControl可以預覽capture完、encode完後的media data

l            BufferControl:在特別的objects上控制 buffer的處理。

l            Codec control可以控制軟、硬體的編、解碼器

Ø            BitRateControl

Ø            FrameProcessingControl

Ø            FrameRateControl

Ø            H261Control

Ø            H263Control

Ø            KeyFrameControl

Ø            MpegAudioControl

Ø            QualityControl

Ø            SilenceSuppressionControl

 


 

Ueser Interface Components

 

Control提供可以存取user interface Component(讓使用者可以看得到媒體撥放的狀態)

Ø            getControlComponent:這個method是繼承AWT Component下來的,可以讓我們增加applet’s presentation spaceapplication window

Ø            getVisualComponentgetControlPanelComponent:這二個方法可以得到player執行的畫面和控制狀態畫面。

 

當然,如果你不使用這些內定的control component時,也可以自定自己的component

 


Extensibility

 

可透過二種方式繼承JMF的功能

1、經由實作自訂的處理元件(plug-ins

2、透過實作the Controller, Player, Processor, DataSource, DataSink

    介面

 

這部分屬於plug-in部分,講到p.85時會重新提到

 


 

Presentation

 

JMF中,播放的處理都是由Controller interface來完成。

Controller定義了物件的控制、播放或擷取時間性媒體的控制機制。

Controller〞:為一介面,繼承自Clock,提供來源配置的狀態訊息,事件的產生,並且於獲得物件的機制提供控制。

 JMF API 定義二種型態的Controllers: Players and Processors Player or Processor 產生於特定資料來源時,且不再被重複使用去播放其他的媒體

 

上圖為JMF controllers

 


 

Players

Player:繼承自Controller interface,用於傳送和控制時間性的媒體資料,對於AWT元件的取得、媒體的處理控制,Player都有提供methods 處理傳入的媒體流,並精確地傳送出去。

DataSource 通常傳入的media-stream 傳送給Player,至輸出裝置再依其型態將之播出

 

 

上圖為JMF player model

 

Player在處理上不提供任何的控制機制,但支援標準化的使用者控制,透過Clock Controller的操作達成。

 

Player可分成六個狀態,Clock 介面定義二種基本的的狀態: Stopped Started。為了易於資料來源的管理,Controller再將其中的Stopped階段細分成五個狀態:  UnrealizedRealizing Realized Prefetching Prefetched.

  上圖為player states

 

一般情況下,Player,必須經過每一階段直到Started的狀態下:

Ø          Unrealized:當media Player被產生,但仍未知媒體資料時,稱之。

Ø          Realizing player決定資料來源需求時,稱之。Realizing通常用於從網路上下載媒體資料。

Ø          Realized :當player完成Realizing後,即進入Realized狀態。至此階段已知媒體的需求及媒體播放型態的資訊。它也提供視覺化的元件 和控制,可以連接到系統的相關物件,但仍沒擁有任何資源,以預防其它的Player啟動。

Ø          Prefetching :準備開始播放媒體,player若播放位置被改變,則重新配置

Ø          Prefetched:進入播放狀態

Ø          Started:呼叫start,將Player Started state。當Player物件的time-base time和媒體時間mapping後,開始播出。

 

  Player提供TransitionEvents,可以從這個狀態移至另一個狀態中。ControllerListener 介面也提供可決定player位在哪個狀態下和適時地提出respond,例如:在PlayerProcess中呼叫asynchronous method,就需ControllerListener提供event來決定operation何時被完成。

 

Methods Available in Each Player State

 

為了防止race(猛轉,急速)的狀態產生,在Player的每個狀態中並非所有method都可以呼叫,下表為在Player的每個階段中,JMF定義的method使用限制說明,如果是不合法的methodplayer就會丟出exception

Method

Unrealized Player

Realized Player

Prefetched Player

Started Player

addController

NotRealizedError

legal

legal

ClockStartedError

deallocate

legal

legal

legal

ClockStartedError

getControlPanelComponent

NotRealizedError

legal

legal

legal

getGainControl

NotRealizedError

legal

legal

legal

getStartLatency

NotRealizedError

legal

legal

legal

getTimeBase

NotRealizedError

legal

legal

legal

getVisualComponent

NotRealizedError

legal

legal

legal

mapToTimeBase

ClockStoppedException

ClockStoppedException

ClockStoppedException

legal

removeController

NotRealizedError

legal

legal

ClockStartedError

setMediaTime

NotRealizedError

legal

legal

legal

setRate

NotRealizedError

legal

legal

legal

setStopTime

NotRealizedError

legal

legal

StopTimeSetError
if previously set

setTimeBase

NotRealizedError

legal

legal

ClockStartedError

syncStart

NotPrefetchedError

NotPrefetchedError

legal

ClockStartedError


Table 2-1: Method restrictions for players.

 

 


Processors

Processors也可以用來撥放media data。除了提供媒體撥放的設備外,Processor也可以透過DataSource輸出media data,以便讓其他的PlayerProcessor來呈現,更進一步地透過其他Processor來操作或傳送到其他的目的地,如檔案中。

 

 

 

Presentation Controls

參見Controls

 

Controller Events

ControllerEvents提供三種類的events

Ø          change notifications --- RateChangeEventDurationUpdateEventFormatChangeEvent表示可以改變Controller的一些屬性,例如:Player提供RateChangeEvent,當rate被改變時就呼叫setRate

Ø          transition events --- TransitionEvents允許我們的程式在Controller objects’s state下改變時得到respond,不論是從那個狀態到哪個狀態,player都提供transition events

Ø          closed events --- ControllerClosedEventsControllerEvent繼承下來,提供shutsdown功能;ControllerErrorEventControllerClosedEvents繼承下來,當程式發生錯誤時,可以respond Controller發生的錯誤及將錯誤造成的影響減到最低。

 

上圖為JMF events

 


 

Processing

 

Processor:是一個從DataSource輸入,執行一些使用者自定的媒體資料處理,再將其媒體資料輸出的Player 可傳送輸出資料至播放設備或DataSourceDataSource可如同再輸入至另一個PlayerProcessor,或輸入至DataSink

 

上圖為JMF processors

          

 

媒體資料的處理可分割成幾個階段:

 

 

上圖為 Processor stages.

 

1.          Demultiplexing:剖析input stream,若stream包含了多個tracks,則將之分離,例如:QuickTime 檔案分成audio and video tracks。無論是否有包含多樣的資料,皆會自動執行 Demultiplexing 

2.          Pre-Processing input stream中的tracks做特效(effect)的演算處理。

3.          Transcoding :轉碼;壓縮     ﹥解壓縮。

4.          Post-Processing:對decoded tracks做特效(effect)的演算處理

5.          Multiplexing:將由多個tracks的合併成單一data stream。例:將分離的audio and video tracks合併成單一個MPEG-1 data stream,可藉由setOutputContentDescriptor method定義輸出流的資料型態。

6.          Rendering :將播放媒體出來。

 

Processing執行的每個階段,由不同的processing component所構成,而這些processing component就是JMF plug-ins。假如Processor支援TrackControls的話,你可以選擇用何種plug-ins來處理trackJMF plug-ins分為五種types

1.          Demultiplexer剖析媒體資料,例如:WAV, MPEG or QuickTime。若媒體流為多樣複合時,則分開個別處理

2.          Effect對媒體資料進行特效

3.          Codec進行編/解碼

4.          Multiplexer合併多個tracks 為單一個輸出流並傳送結果至輸出的DataSource

5.          Renderer處理track的媒體資料,並傳送至螢幕或喇叭

 

 

Processor States

 

 

介於Realizing stateRealized state之間,Processor提供二個額外備用的階段:ConfiguringConfigured

Ø          Configure被呼叫時,Processor進入Configuring 階段, 已連結DataSource、可對input streamdemultiplexes、讀取有關input data的格式資訊。

Ø          Processor進入Configured階段時,已連結DataSource和決定出data format。此時ConfigureCompleteEvent 將可使用

Ø          Realize被呼叫時,Processor將轉換到Realized狀態下,而Processor已被完全建構出來。

 

ProcessorConfigured狀態下,getTrackControl將被呼叫進而從media stream中的track得到TrackControl objects。這些TrackControl objects可以使我們對media做一些特別的處理。

當立刻呼叫Realize時,會從 Unrealized Processor透過ConfiguringConfigured階段自動地轉換到Realized階段,當我們使用時,我們不可以透過TrackControlsconfiguring這個processing options,因為Processor設定是被使用的。

 

Methods Available in Each Processor State

下表為下表為在Processor的每個階段中,JMF定義的method使用限制說明

Method

Unrealized Processor

Configuring Processor

Configured Processor

Realized Processor

AddController

NotRealizedError

NotRealizedError

NotRealizedError

legal

Deallocate

legal

legal

legal

legal

GetControlPanelComponent

NotRealizedError

NotRealizedError

NotRealizedError

legal

GetControls

legal

legal

legal

legal

GetDataOutput

NotRealizedError

NotRealizedError

NotRealizedError

legal

GetGainControl

NotRealizedError

NotRealizedError

NotRealizedError

legal

GetOutputContentDescriptor

NotConfiguredError

NotConfiguredError

legal

legal

GetStartLatency

NotRealizedError

NotRealizedError

NotRealizedError

legal

getSupportedContent-
Descriptors

legal

legal

legal

legal

GetTimeBase

NotRealizedError

NotRealizedError

NotRealizedError

legal

GetTrackControls

NotConfiguredError

NotConfiguredError

legal

FormatChange-
Exception

GetVisualComponent

NotRealizedError

NotRealizedError

NotRealizedError

legal

MapToTimeBase

ClockStoppedException

ClockStoppedException

ClockStoppedException

ClockStopped-
Exception

Realize

legal

legal

legal

legal

RemoveController

NotRealizedError

NotRealizedError

NotRealizedError

legal

SetOutputContentDescriptor

NotConfiguredError

NotConfiguredError

legal

FormatChange-
Exception

SetMediaTime

NotRealizedError

NotRealizedError

NotRealizedError

legal

SetRate

NotRealizedError

NotRealizedError

NotRealizedError

legal

SetStopTime

NotRealizedError

NotRealizedError

NotRealizedError

legal

SetTimeBase

NotRealizedError

NotRealizedError

NotRealizedError

legal

SyncStart

NotPrefetchedError

NotPrefetchedError

NotPrefetchedError

NotPrefetchedError

 

 

Processing Controls

 

透過TrackControl我們可以很明確地選擇Effect、Codec、Renderer pling-ins在我們所使用的track中,我們可以查詢PlugInManager找尋有哪些plug-ins可以使用。

 

Data Output

 

GetDataOutput可以傳回Processor object輸出的DataSource

 


 

Capture

 

p.77會詳細提到

 


 

Media Data Storage and Transmission

 

DataSink通常從DataSource讀取媒體資料,並且傳送至目前的設備,而一些特殊的DataSink,可能透過網路寫至檔案或是RTP broadcaster來傳送。像Players, DataSink 物件則是透過manager使用DataSource去建構。DataSink可以使用StreamWriterControl來提供額外的控制來處理寫入檔案(詳細資料在p.74)。

 

Storage Controls

DataSink提供DataSinkEvent來記載每個狀態,DataSinkEvent將由reason code提供,或由DataSink提供幾個DataSinkEvent的subtypes:

Ø          DataSinkErrorEvent:

Ø          EndOfStreamEvent:

DataSink必須產一個DataSinkEvent

 

二個DataSinkEvent subtypes:

DataSinkErrorEvent:用於顯示當 DataSink 寫入資料時所發生的錯誤。

EndOfStreamEvent:顯示已成功被寫入的stream

 

為了 提供DataSink events,我們須實作DataSinkListener interface。

 


 

Extensibility

 

我們可以使用延伸的JMF來實作自訂的plug-ins,media handlers和data sources

 

Implementing  Plug-Ins

若實作 Plug-Ins 介面,可直接存取或操作與媒體資料有關的Processor:

Ø          Implementing Demultiplexer interface:能夠控制由multiplexed媒體流中分離出各個track。

Ø          Implementing Codec interface:能夠轉換媒體資料,將未經處理過的媒體資料編碼成一個壓縮格式。

Ø          Implementing Effect:能夠對媒體資料做自訂的處理

Ø          Implementing Multiplexer interface:能夠指定個別的track組合成 single interleaved output stream。

Ø          Implementing Renderer interface :能夠控制資料的處理和傳送至輸出設備中展示。 

 

透過TrackControl介面,可自定Codec, Effect, and Renderer plug-ins於Processor或產生一個具有ProcessorModel的Processor。必須註冊一個PlugInManager一旦已註冊plug-in,則便會包含於plug-in的清單中,經由getPlugInList method傳回,且當Processor物件建立時可經由Manager存取

  

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
JAVA多媒体开发手册,Java多媒体框架(JMF)中包含了许多用于处理多媒体的API。它是一个相当复杂的系统,完全了解这个系统可能需要花上几周的时间,但是这篇文章将主要介绍JMF的几个核心接口和类,然后通过一个简单的例子向你展示如何利用该接口进行编程。 JMF目前的最新版本是2.1,Sun通过它向Java中引入处理多媒体的能力。下面是JMF所支持的功能的一个概述: ● 可以在Java Applet和应用程序中播放各种媒体文件,例如AU、AVI、MIDI、MPEG、QuickTime和WAV等文件。 ● 可以播放从互联网上下载的媒体流。 ● 可以利用麦克风和摄像机一类的设备截取音频和视频,并保存成多媒体文件。 ● 处理多媒体文件,转换文件格式。 ● 向互联网上传音频和视频数据流。 ● 在互联网上广播音频和视频数据。 JMF的结构 为了更好地说明JMF的结构,让我们用立体声音响做一个简单的比喻。当你CD机播放CD唱片的时候,CD唱片向系统提供音乐信号。这些数据是在录音棚中用麦克风和其他类似的设备记录下来的。CD播放机将音乐信号传送到系统的音箱上。在这个例子中,麦克风就是一个音频截取设备,CD唱片是数据源,而音箱是输出设备。 JMF的结构和立体声音响系统非常相似,在后面的文章中,你会遇到下面的这些术语: ● 数据源(Data source) ● 截取设备(Capture Device,包括视频和音频截取设备) ● 播放器(Player) ● 处理器(Processor) ● 数据格式(Format) ● 管理器(Manager) 下面让我们来看一看这些术语到底代表什么意思。 1.数据源 就像CD中保存了歌曲一样,数据源中包含了媒体数据流。在JMF中,DataSource对象就是数据源,它可以是一个多媒体文件,也可以是从互联网上下载的数据流。对于DataSource对象,一旦你确定了它的位置和类型,对象中就包含了多媒体的位置信息和能够播放该多媒体的软件信息。当创建了DataSource对象后,可以将它送入Player对象中,而Player对象不需要关心DataSource中的多媒体是如何获得的,以及格式是什么。 在某些情况下,你需要将多个数据源合并成一个数据源。例如当你在制作一段录像时,你需要将音频数据源和视频数据源合并在一起。JMF支持数据源合并,在后面的例子中我们将提到这一点。 2.截取设备 截取设备指的是可以截取到音频或视频数据的硬件,如麦克风、摄像机等。截取到的数据可以被送入Player对象中进行处理。 3.播放器 在JMF中对应播放器的接口是Player。Player对象将音频/视频数据流作为输入,然后将数据流输出到音箱或屏幕上,就像CD播放机读取CD唱片中的歌曲,然后将信号送到音箱上一样。Player对象有多种状态,JMF中定义了JMF的六种状态,在正常情况下Player对象需要经历每个状态,然后才能播放多媒体。下面是对这些状态的说明。 ● Unrealized:在这种状态下,Player对象已经被实例化,但是并不知道它需要播放的多媒体的任何信息。 ● Realizing:当调用realize()方法时,Player对象的状态从Unrealized转变为Realizing。在这种状态下,Player对象正在确定它需要占用哪些资源。 ● Realized:在这种状态下Player对象已经确定了它需要哪些资源,并且也知道需要播放的多媒体的类型。 ● Prefetching:当调用prefectch()方法时,Player对象的状态从Realized变为Prefetching。在该状态下的Player对象正在为播放多媒体做一些准备工作,其中包括加载多媒体数据,获得需要独占的资源等。这个过程被称为预取(Prefetch)。 ● Prefetched:当Player对象完成了预取操作后就到达了该状态。 ● Started:当调用start()方法后,Player对象就进入了该状态并播放多媒体。 4.处理器 处理器对应的接口是Processor,它一种播放器。在JMF API中,Processor接口继承了Player接口。 Processor对象除了支持支持Player对象支持的所有功能,还可以控制对于输入的多媒体数据流进行何种处理以及通过数据源向其他的Player对象或Processor对象输出数据。 除了在播放器中提到了六种状态外,Processor 对象还包括两种新的状态,这两种状态是在Unrealized状态之后,但是在Realizing状态之前。 ● Configuring:当调用configure()方法后,Processor对象进入该状态。在该状态下

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值