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

作者:馮睿    本文選自:賽迪網  2002年09月29日  
 
創建一個Player對象


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

Player類中的很多方法只有在Player對象處於Realized的狀態下才會被調用。爲了保證Player對象已經到達了該狀態,你需要使用Manager的createRealizePlayer()方法來獲得Player對象。但是對於start()方法來說,你可以在Player對象到達Prefetched狀態之前調用它,它可以自動將Player的狀態轉換到Started狀態。 


截取多媒體數據


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

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

● 獲得設備對應的CaptureDeviceInfo對象。 

● 從CaptureDeviecInfo對象中獲得MediaLocator對象,然後用它創建一個DataSource對象。 

● 使用DataSource對象創建Player對象或Processor對象。 

● 調用start()方法,開始截取多媒體數據。 

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


一個JMF例子


當你使用JMF進行編程以前,你需要安裝JMF。同時在硬件上也有一些要求。由於本文的代碼是在Windows 2000下編寫和測試,因此文章中提到的操作系統需要的軟件都是與Windows有關的。雖然Java是跨平臺的,但是JMF是個例外??並不是所有的平臺上都實現了JMF。 

硬件和軟件要求 

硬件方面你需要與SoundBlaster兼容的聲卡,芯片最好使用奔騰III以上的芯片。內存最好不小於64MB。同時你需要安裝下面的軟件: 

● Windows95/98,Windows NT 4.0, Windows2000或 WindowsXP。 

● JDK1.1.6或以上的Windows版本。 

● JMF類和動態庫 

在Windows下安裝JMF2.1 

當下載了JMF2.1以後,運行jmf-2_1_1b-windows-i586.exe。該程序會將JMF2.1安裝到你指定的目錄下。當安裝成功後,你需要確認一下安裝程序正確設定了CLASSPATH和PATH環境變量。在CLASSPATH中需要包含jmf.jar和sound.jar;在PATH中需要包含JMF動態庫的路徑。 


JMFRegistry


如果你希望使用視頻和音頻截取的設備,你需要確認安裝了這些設備的驅動程序。除此之外,你還需要運行JMFRegistry應用程序。JMFRegistry可以向JMF註冊新的數據源、媒體處理器、插件、視頻和音頻截取設備,然後你才能夠在你的程序中使用它們。你只需要運行一次JMFRegistry就能註冊系統中所有的視頻和音頻截取設備。 

當你運行了JMFRegistry後,會彈出圖一所示的窗口: 






圖一 通過JMFRegistry註冊視頻和音頻截取設備


選擇“Capture Devices”標籤,然後按下“Detect Capture Devices”按鈕,程序將自動檢測出系統中的視頻和音頻截取設備。在左邊的類表框中會列出所有檢測到的設備的名稱。在圖一中我們看到JMFRegsitery發現了JavaSound audio capture、vfw:Logitech USB Video Camera:0和vfw:Microsoft WDM Image Capture (Win32):1。單擊某個設備可以看到該設備支持的視頻或音頻格式。如果JMFRegistry無法檢測到設備,有可能是沒有正常安裝設備的驅動程序。 


例子程序


由於JMF2.1比較複雜,我不可能在在例子中包含JMF2.1支持的所有功能。因此我選擇了下面幾個在JMF中比較常用的功能:播放多媒體、註冊音頻和視頻截取設備、截取視頻和音頻。 

1.播放多媒體 

在JMF.java中有一個play()方法。該方法可以播放用戶選擇的多媒體文件。當播放多媒體文件時,你需要一個Player對象。在例子中,dualPlayer就是Player接口的實現對象。 

Player dualPlayer;
 


在Play()方法中,通過使用FileDialog獲得媒體文件的路徑和文件名,並保存在filename中。 

try {
    FileDialog fd = 
      new FileDialog(this, "Select File", FileDialog.LOAD);
    fd.show();
    String filename = fd.getDirectory() + fd.getFile();
    ...
  }
  catch (Exception e) {
    System.out.println(e.toString());
  }
 


然後你需要通過媒體管理器Manager間接創建一個Player對象。你可以使用Manager類的createPlayer()方法或者createProcessor()方法來獲得一個Player對象或Processor對象。在play()方法中,我使用的是createPlayer()方法。 

dualPlayer = Manager.createPlayer
      (new MediaLocator("file:///" + filename));
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章