利用JMF進行多媒體編程(1)

作者:馮睿    本文選自:賽迪網  2002年09月29日  
 
Java媒體框架(JMF)使你能夠編寫出功能強大的多媒體程序,卻不用關心底層複雜的實現細節。JMF API的使用相對比較簡單,但是能夠滿足幾乎所有多媒體編程的需求。在這篇文章中,我將向你介紹如何用很少的代碼就編寫出多媒體程序。 

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對象進入該狀態。在該狀態下,Processor對象連接到數據源並獲取輸入數據的格式信息。 

● Configured:當完成數據源連接,獲得輸入數據格式的信息後,Processor對象就處於Configured狀態。 

5.數據格式 

Format對象中保存了多媒體的格式信息。該對象中本身沒有記錄多媒體編碼的相關信息,但是它保存了編碼的名稱。Format的子類包括AudioFormat和VideoFormat類,ViedeoFomat又有六個子類:H261Format、H263Format、IndexedColorFormat、JPEGFormat、RGBFormat和YUVFormat類。 

6.管理器 

JMF提供了下面四種管理器: 

● Manager:Manager相當於兩個類之間的接口。例如當你需要播放一個DataSource對象,你可以通過使用Manager對象創建一個Player對象來播放它。使用Manager對象可以創建Player、Processor、DataSource和DataSink對象。 

● PackageManager:該管理器中保存了JMF類註冊信息。 

● CaptureDeviceManager:該管理器中保存了截取設備的註冊信息。 

● PlugInManager:該管理器中保存了JMF插件的註冊信息。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章