日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

利用JMF进行多媒体编程

發(fā)布時間:2025/3/15 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用JMF进行多媒体编程 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本文來自:

Java媒體框架(JMF)使你能夠編寫出功能強大的多媒體程序,卻不用關(guān)心底層復(fù)雜的實現(xiàn)細(xì)節(jié)。JMF API的使用相對比較簡單,但是能夠滿足幾乎所有多媒體編程的需求。在這篇文章中,我將向你介紹如何用很少的代碼就編寫出多媒體程序。

?

Java多媒體框架(JMF)中包含了許多用于處理多媒體的API。它是一個相當(dāng)復(fù)雜的系統(tǒng),完全了解這個系統(tǒng)可能需要花上幾周的時間,但是這篇文章將主要介紹JMF的幾個核心接口和類,然后通過一個簡單的例子向你展示如何利用該接口進(jìn)行編程。

?

JMF目前的最新版本是2.1,Sun通過它向Java中引入處理多媒體的能力。下面是JMF所支持的功能的一個概述:

?

● 可以在Java Applet和應(yīng)用程序中播放各種媒體文件,例如AU、AVI、MIDI、MPEG、QuickTime和WAV等文件。

?

● 可以播放從互聯(lián)網(wǎng)上下載的媒體流。

?

● 可以利用麥克風(fēng)和攝像機一類的設(shè)備截取音頻和視頻,并保存成多媒體文件。

?

● 處理多媒體文件,轉(zhuǎn)換文件格式。

?

● 向互聯(lián)網(wǎng)上傳音頻和視頻數(shù)據(jù)流。

?

● 在互聯(lián)網(wǎng)上廣播音頻和視頻數(shù)據(jù)。

JMF的結(jié)構(gòu)

為了更好地說明JMF的結(jié)構(gòu),讓我們用立體聲音響做一個簡單的比喻。當(dāng)你CD機播放CD唱片的時候,CD唱片向系統(tǒng)提供音樂信號。這些數(shù)據(jù)是在錄音棚中用麥克風(fēng)和其他類似的設(shè)備記錄下來的。CD播放機將音樂信號傳送到系統(tǒng)的音箱上。在這個例子中,麥克風(fēng)就是一個音頻截取設(shè)備,CD唱片是數(shù)據(jù)源,而音箱是輸出設(shè)備。

?

JMF的結(jié)構(gòu)和立體聲音響系統(tǒng)非常相似,在后面的文章中,你會遇到下面的這些術(shù)語:

● 數(shù)據(jù)源(Data source)

?

● 截取設(shè)備(Capture Device,包括視頻和音頻截取設(shè)備)

?

● 播放器(Player)

?

● 處理器(Processor)

?

● 數(shù)據(jù)格式(Format)

?

● 管理器(Manager)

?

下面讓我們來看一看這些術(shù)語到底代表什么意思。

?

1.數(shù)據(jù)源

?

就像CD中保存了歌曲一樣,數(shù)據(jù)源中包含了媒體數(shù)據(jù)流。在JMF中,DataSource對象就是數(shù)據(jù)源,它可以是一個多媒體文件,也可以是從互聯(lián)網(wǎng)上下載的數(shù)據(jù)流。對于DataSource對象,一旦你確定了它的位置和類型,對象中就包含了多媒體的位置信息和能夠播放該多媒體的軟件信息。當(dāng)創(chuàng)建了DataSource對象后,可以將它送入Player對象中,而Player對象不需要關(guān)心DataSource中的多媒體是如何獲得的,以及格式是什么。

?

在某些情況下,你需要將多個數(shù)據(jù)源合并成一個數(shù)據(jù)源。例如當(dāng)你在制作一段錄像時,你需要將音頻數(shù)據(jù)源和視頻數(shù)據(jù)源合并在一起。JMF支持?jǐn)?shù)據(jù)源合并,在后面的例子中我們將提到這一點。

?

2.截取設(shè)備

?

截取設(shè)備指的是可以截取到音頻或視頻數(shù)據(jù)的硬件,如麥克風(fēng)、攝像機等。截取到的數(shù)據(jù)可以被送入Player對象中進(jìn)行處理。

?

3.播放器

?

在JMF中對應(yīng)播放器的接口是Player。Player對象將音頻/視頻數(shù)據(jù)流作為輸入,然后將數(shù)據(jù)流輸出到音箱或屏幕上,就像CD播放機讀取CD唱片中的歌曲,然后將信號送到音箱上一樣。Player對象有多種狀態(tài),JMF中定義了JMF的六種狀態(tài),在正常情況下Player對象需要經(jīng)歷每個狀態(tài),然后才能播放多媒體。下面是對這些狀態(tài)的說明。

?

● Unrealized:在這種狀態(tài)下,Player對象已經(jīng)被實例化,但是并不知道它需要播放的多媒體的任何信息。

?

● Realizing:當(dāng)調(diào)用realize()方法時,Player對象的狀態(tài)從Unrealized轉(zhuǎn)變?yōu)镽ealizing。在這種狀態(tài)下,Player對象正在確定它需要占用哪些資源。

● Realized:在這種狀態(tài)下Player對象已經(jīng)確定了它需要哪些資源,并且也知道需要播放的多媒體的類型。

● Prefetching:當(dāng)調(diào)用prefectch()方法時,Player對象的狀態(tài)從Realized變?yōu)镻refetching。在該狀態(tài)下的Player對象正在為播放多媒體做一些準(zhǔn)備工作,其中包括加載多媒體數(shù)據(jù),獲得需要獨占的資源等。這個過程被稱為預(yù)取(Prefetch)。

?

● Prefetched:當(dāng)Player對象完成了預(yù)取操作后就到達(dá)了該狀態(tài)。

?

● Started:當(dāng)調(diào)用start()方法后,Player對象就進(jìn)入了該狀態(tài)并播放多媒體。

4.處理器

處理器對應(yīng)的接口是Processor,它一種播放器。在JMF API中,Processor接口繼承了Player接口。 Processor對象除了支持支持Player對象支持的所有功能,還可以控制對于輸入的多媒體數(shù)據(jù)流進(jìn)行何種處理以及通過數(shù)據(jù)源向其他的Player對象或Processor對象輸出數(shù)據(jù)。

除了在播放器中提到了六種狀態(tài)外,Processor 對象還包括兩種新的狀態(tài),這兩種狀態(tài)是在Unrealized狀態(tài)之后,但是在Realizing狀態(tài)之前。

● Configuring:當(dāng)調(diào)用configure()方法后,Processor對象進(jìn)入該狀態(tài)。在該狀態(tài)下,Processor對象連接到數(shù)據(jù)源并獲取輸入數(shù)據(jù)的格式信息。

● Configured:當(dāng)完成數(shù)據(jù)源連接,獲得輸入數(shù)據(jù)格式的信息后,Processor對象就處于Configured狀態(tài)。

5.數(shù)據(jù)格式

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

6.管理器

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

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

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

● CaptureDeviceManager:該管理器中保存了截取設(shè)備的注冊信息。

● PlugInManager:該管理器中保存了JMF插件的注冊信息。 創(chuàng)建一個Player對象

在JMF編程中,最常見的工作就是創(chuàng)建一個Player對象。你可以通過Manager類的createPlayer()方法創(chuàng)建Player對象。Manager對象使用多媒體的URL或MediaLocator對象來創(chuàng)建Player對象。當(dāng)你獲得了一個Player對象后,你可以通過調(diào)用getVisualComponent()方法得到Player對象的圖像部件(Visual Component,在圖像部件上可以播放多媒體的圖像)。然后將圖像部件加入到應(yīng)用程序或Applet的界面上。Player對象還包含一個控制面板,在上面可以控制媒體的播放、停止和暫停等。

Player類中的很多方法只有在Player對象處于Realized的狀態(tài)下才會被調(diào)用。為了保證Player對象已經(jīng)到達(dá)了該狀態(tài),你需要使用Manager的createRealizePlayer()方法來獲得Player對象。但是對于start()方法來說,你可以在Player對象到達(dá)Prefetched狀態(tài)之前調(diào)用它,它可以自動將Player的狀態(tài)轉(zhuǎn)換到Started狀態(tài)。

截取多媒體數(shù)據(jù)

多媒體數(shù)據(jù)的截取是JMF程序中另一個非常重要的功能。你可以按照下面的步驟截取數(shù)據(jù):

?

● 通過查詢CaptureDevieceManager獲得你希望使用的截取設(shè)備。

?

● 獲得設(shè)備對應(yīng)的CaptureDeviceInfo對象。

?

● 從CaptureDeviecInfo對象中獲得MediaLocator對象,然后用它創(chuàng)建一個DataSource對象。

?

● 使用DataSource對象創(chuàng)建Player對象或Processor對象。

?

● 調(diào)用start()方法,開始截取多媒體數(shù)據(jù)。

?

你可以使用CaptureDeviceManager對象獲得系統(tǒng)中可用的視頻和音頻截取設(shè)備。通過調(diào)用getDeviceList()方法你可以獲得設(shè)備的列表。每個設(shè)備都對應(yīng)一個CaptrueDeviceInfo對象。也可以通過調(diào)用CaptureDevieceManager對象的getDevice()方法來獲得特定的CaptureDeviceInfo對象。在使用設(shè)備截取多媒體數(shù)據(jù)前,還需要從CaptureDeviceInfo對象中獲得設(shè)備對應(yīng)的MediaLocator對象。然后你可以直接使用MediaLocator來構(gòu)造Player或Processor的實例,也可以用MediaLocator構(gòu)造一個DataSource對象,然后將DataSource對象送入Player或Processor對象中。最后調(diào)用start()方法來截取多媒體數(shù)據(jù)。

本文來自:

轉(zhuǎn)載于:https://www.cnblogs.com/jbelial/archive/2011/11/23/2260774.html

總結(jié)

以上是生活随笔為你收集整理的利用JMF进行多媒体编程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。