?? jmf.txt
字號:
JMF Java術語
術語名稱:Java媒體框架(JMF)
術語解釋:該核心框架支持不同媒體(如:音頻輸出和視頻輸出)間的時鐘同步。它是一個標準的擴展框架,允許用戶制作純音頻流和視頻流。
JMF實際上是Java的一個類包。JMF 2.1.1技術提供了先進的媒體處理能力,從而擴展了Java平臺的功能。這些功能包括:媒體捕獲、壓縮、流轉、回放,以及對各種主要媒體形式和編碼的支 持,如M-JPEG、H.263、MP3、RTP/RTSP (實時傳送協議和實時流轉協議)、Macromedias Flash、IBM的HotMedia和Beatniks的Rich Media Format (RMF)等。JMF 2.1.1還支持廣受歡迎的媒體類型,如Quicktime、Microsofts AVI和MPEG-1等。此外,JMF 2.1.1軟件中包括了一個開放的媒體架構,可使開發人員靈活采用各種媒體回放、捕獲組件,或采用他們自己的定制的內插組件。
Sun以四種不同的專用版本提供JMF 2.1.1技術,滿足專業開發人員的各類需求,第一個是一個輕便型版本,它完全采用Java語言編寫,適用于任何Java兼容系統。此外,開發人員還可選 擇分別適用于Solaris、Windows或Linux等操作系統的性能最優化軟件包,以提高性能和能力。
JMF 2.1.1軟件也是Java Media系列軟件的一部分。Java Media系列軟件包括Java 3D、Java 2D、Java Sound和Java Advanced Imaging等API。采用各種Java Media API,軟件開發商人員就能容易、快速地為他們已有的各種應用程序和客戶端Java小程序增添豐富的媒體功能,如流式視頻、3D圖像和影像處理等。就是 說,各種Java Media API發揮了Java平臺的固有優勢,將"編寫一次,到處運行"的能力擴展到了圖像、影像和數字媒體等各種應用領域,從而大大縮減了開發時間和降低了開發 成本。
JMF系統介紹
[ Adigan 發表于 2005-10-2 17:25:15 ]
一.簡介
1.1JMF 體系結構簡介
在開發JMF 應用程序之前要完全理解JMF 的體系架構、接口和類。就拿我們的家用攝像機系統作個例子。首先用攝像機拍攝內容,拍攝下來的內容錄制在DV帶中。DV帶可以放在放像機里播放、放像機提供視頻信號給電視機,提供音頻信號給音箱,這樣我們就可以在電視機上看到畫面,從音箱里聽到聲音。JMF API 提供的也是同樣的模型。
JMF 提供的模型可大致分為七類
* 數據源(Data source)
* 截取設備(Capture Device,包括視頻和音頻截取設備)
* 播放器(Player)
* 處理器(Processor)
* 數據池(DataSink)
* 數據格式(Format)
* 管理器(Manager)
1.2 如何應用JMF捕獲媒體數據
可以應用JMF從攝像頭和麥克風中采集數據,采集后的數據可以被處理、保存、渲染為以后應用。
捕獲媒體數據需要做以下工作。1.定位所需要用的捕獲設備,可以通過查詢CaptureDeviceManager來定位。2.獲取這個捕獲設備的信息CaptureDeviceInfo對象。3.從CaptureDeviceInfo對象中獲取捕獲設備的位置Medialocator。4.利用MediaLocator創建DataSource。5.使用DataSource創建Player或是Processor。6.然后啟動Player就開始了媒體的捕獲。
如果只是想觀看捕獲的內容,只需要使用捕獲數據源創建播放器Player即可。如果想把捕獲的數據發送到網絡或者保存起來,就需要創建處理器Processor。
可以從CaptureDeviceManager中獲取捕獲設備的信息。CaptureDeviceManager是可在JMF中使用的全部捕獲設備的注冊中心。可以通過調用CaptureDeviceManager的getDeviceList方法獲取可用的捕獲設備列表。
每個捕獲設備都由CaptureDeviceInfo對象代表,要獲取一個特定的設備只需要調用CaptureDeviceManager的getDevice方法。
從特定的設備捕獲媒體數據,需要從它的CaptureDeviceInfo對象中獲取這個設備的位置信息MediaLocator。可以用MediaLocator直接構建一個Player或者Processor。還可以用MediaLocator構建一個DataSource作為Player的輸入。當Play開始的播放的時候,就開始捕獲過程。
一個捕獲設備通常有一系列屬性可以進行配置。通常控制分為2種,一種是端口控制PortControl,另一種是監視MonitorControl。可以通過調用捕獲DataSource的getControl方法,來獲取這兩種控制對象。
和其他的控制對象一樣,對于PortControl或者MonitorControl都可以通過調用getControlCompent方法來得到它們的可視化組件。這些組件可以添加到Applet中或者應用程序中,這樣用戶可以和這些控制對象交互。
處理顯示控制組件,還可以顯示標準的Player控制組件。
1.3如何使用RTP接收和發送流媒體數據
JMF Player 和 Processor 可以提供顯示、獲取、轉換RTP 數據流的機制。
可以按照標準的方式通過Manger為RTP數據流創建Player。使用包含RTP Session的MediaLocator作為參數,調用Manager的createPlayer(MediaLocator)來創建Player。也可以用某個接收數據流的DataSource作為參數來創建Player。
如果用MediaLocator作為參數來創建Player, Player 只會顯示Session中檢測到的第一個RTP 數據流。如果想播放Session中的所有視頻流,則需要調用SessionManager為每個接收數據流創建一個Player。
當使用MediaLocator為RTP Session 創建Player,Manager為Session中的第一個數據流創建Player。當檢測到數據時,Player發出RealizeCompleteEvent。
通過監聽RealizeCompleteEvent,可以確定數據是否到了以及Player是否可以播放任何數據。一旦Player發出這個事件,就可以獲取Player的可視組件和控制組件。
要注意的是,如果在沒有檢測到Session中數據時,Player 是不會結束Realizing狀態的。對于Rtp 媒體流Player 不能試圖調用Manager的CreateRealizedPlayer。如果調用,會引起死鎖。
1.4如何在網絡發送流媒體數據
在發送RTP數據流之前,需要應用Processor產生RTP編碼的數據源。通過構建一個SessionManager或者是DataSink來控制傳輸過程。
Processor處理器的輸入可以是現有的媒體文件,也可以是實時捕獲的數據。對于現有的媒體數據,可以使用MediaLocaotr來代表媒體文件。并根據MediaLocator來創建Processor。對于捕獲的媒體數據,一個捕獲數據源Capture DataSource 會用作Processor的輸入。
有兩種方式來發送RTP數據流,一種是用MediaLocator作為RTP session的參數,調用Manager的createDataSink方法來創建一個RTP DataSink。另一種方式是利用session manager 來創建發送數據流,并控制傳輸過程。
當利用MediaLocator來構建RTP DataSink的時候,你只能發送DataSource中的第一個數據流。如果需要在一個進程中發送多個RTP數據流或者需要監控進程的統計狀態,就需要直接使用SessionManager。
無論采用哪種方式傳輸RTP數據流,都需要做如下工作:
1、使用DataSource創建Processor,這個DataSource代表你要傳輸的數據
2、設置Processor的輸出為RTP 編碼的數據
3、取得Processor的輸出作為DataSource
二.具體的試驗-應用JMF開發視頻應用
2.1配置開發環境
需要J2SDK,JRE1.42, JMF Windows Performance Pack,JMF 的 下載地址:http://java.sun.com/products/java-media/jmf/2.1.1/setup.html 針對WINDOWS 用戶,可下載Windows Performance Pack。只有安裝Windows Performance Pack才支持視頻、音頻捕獲。下載后會自動安裝,自動配置路徑。安裝后需去測試一下是否安裝成功。測試地址:http://java.sun.com/products/java-media/jmf/2.1.1/jmfdiagnostics.html
2.2用APPLET在瀏覽器中播放視頻短片
在瀏覽器中實現APPLET 視頻播放中用到了兩個基本概念 manager ,和player。JMF APPLET 是播放視頻文件的過程是這樣的。首先,提供媒體文件的位置作為創建PLAYER的參數。Player創建后會根據媒體文件的格式尋找解碼器,并且進行初始化。然后為PLAYER 添加一個ControllerListener,用來監聽PLAYER的狀態。通過監聽player 的狀態采取不同的措施。在Player 發出RealizeCompleteEvent的時候,可以獲取player 的VisualComponent 寬度,高度,VisualControllpane的寬度,高度。最后一步調用player的start方法,就可以顯示媒體文件的內容了。如果不使用PLUGIN,JMF 只支持標準的AVI,MOV,WAV 文件。對于流行的MPEG4視頻文件,MP3并不支持。通過安裝解碼器,可以播放這些文件。
2.3采集攝像頭數據
采集攝像頭數據,需要兩步工作。連接視頻設備,然后獲取視頻設備的數據。視頻,音頻設備在Jmf Performance Pack 安裝時會在JMF Registry中注冊自己的設備名。需要連接攝像頭時,可以通過查找攝像頭的設備名來連接攝像頭。具體的實現步驟,首先要得到Device的名字,有兩種方法可以辦到,
方法一
通過菜單,把系統支持的Device都列出來,根據客戶的選擇來確定。
方法二
用程序來判斷。在第二種方法中,通過傳遞一個Format 對象到CaptureDeviceManager的getDeviceList 方法中,獲得Device的名字。得到Device 的名字以后,可以獲得CaptureDeviceInfo,從而得到MediaLocator。第一部分連接攝像頭的工作就完成了。下一步工作是捕獲攝像頭視頻,并顯示出來。有視頻設備構成的數據源可分為2種,例如照相機這種設備,屬于Pull DataSource,用的時候才使用。類似于攝像頭這種設備構成的數據源屬于Push Datasource,源源不斷的發送視頻數據。以獲取的MediaLocator 作為參數構建Player,就可以播放攝像頭內容了。
2.4獲取攝像頭視頻數據和麥克風音頻數據
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -