熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

全面了解Java媒體架構JMF

2013-11-23 19:18:34  來源: Java核心技術 

  Java媒體架構(JMF)是一個令人激動的通用的API它允許Java開發者用許多不同的方法處理媒體本指南主要通過使用工作的例子提供一個JMF的一些主要的特征的概述閱讀完本指南後你將會明白JMF體系結構中的主要播放功能你同樣能正確的使用JMF使用現存的例子和可為更多特殊功能擴展的源代碼

  本指南包含著以下主題

  · 下載和安裝JMF

  · 主要的JMF類以及它們在JMF體系結構中的應用

  · 播放本地的媒體文件

  · 為媒體的存取和操作制作以和圖形用戶界面(GUI)

  · 通過網絡傳播媒體

  · 通過網絡接收媒體

  幾乎所有的媒體類型的操作和處理都可以通過JMF來實現全面的討論JMF所提供的所有特征已經超過了本指南的范圍我們將使用三個簡單的媒體應用程序來學習此框架的構建模塊通過這個方法本指南將為你未來學習和實施更多特殊的應用提供准備

  我應該使用此指南嗎?

  本指南會帶你學習使用JMF工作的基礎為完成這些我們會創建三個的獨立工作的例程序每個例子都會建立前一個例子的基礎上顯示JMF功能性的不同方面

  在本指南中的例子假定你曾經使用過並且已經熟悉了Java程序語言除了Java核心和JMF的類之外我們會使用一些Java AWT和Swing類(用於創建GUI)也會有一些Java網絡類(用於在網絡中傳輸媒體)對GUI和網絡類一些熟悉有助於你更快的明白觀點和這裡的例子但並非是閱讀本指南必須的

  我們將學習的例程序如下

  · 一個簡單的音頻播放器(JMF的HelloWorld應用)這個字符界面的播放器通過在命令行中簡單的輸入媒體文件的名字就可以播放大多數的音頻類型此音頻播放器的演示大體上顯示了JMF的特有的類

  · 一個圖形界面的媒體播放器我們將使用JMF內置的接口組件來建立圖形界面所以在此練習中必須有一些圖形界面的編程經驗這個媒體閱覽器演示使用了一些Java AWT和Swing類來為用戶顯示圖形組件

  · 一個媒體廣播應用此應用程序允許一個本地媒體文件通過網絡傳播此程序能靈活的使媒體只傳輸到指定的網絡節點或者傳輸到一個子網絡中的所有節點此演示使用了一些Java的網絡APIs來在網絡中傳輸媒體

  作為第三個練習的一部分我們將修改圖形界面的播放器讓其能接收並且播放媒體

  跳至頁觀看Resources文章指南和其他參考書目的列表這會幫助你學習到更到關於此指南包括的主題

  安裝需求

  要運行此指南中的例程序你需要如下的工具和組件

  · Java 平台標准版編譯和運行演示程序

  · Java媒體框架版本a或者更高

  · 一塊已經安裝並且配置號的適當的聲卡

  · 一台或者多台測試機器

  · 演示的源代碼文件在mediaplayerjar中

  最後的一個演示應用顯示了JMF在網絡中的應用如果需要此演示能運行在一個獨立的機器上使用此機器即是傳輸方也是接收方可是要觀察到在網絡中使用JMF的所有功能你仍然需要至少兩台聯網的機器

  在頁中的Resources可下載Java 平台完整的源代碼文件以及其他一些完成本指南所需要的工具

  下載安裝文件

  將JMF安裝到你的計算機中的第一步是在JMF的主頁中下載安裝文件它同樣包括了JMF源代碼和API文檔的鏈接頁的Resources中有下載JMF的鏈接

  目前JMF有Windows Solaris Linux等版本以及可運行在任何裝有虛擬機的計算機上一個純Java版本為了增加性能你需要下載一個與你操作系統所適應的版本任何在一個操作系統JMF版本下書寫和編譯的代碼都可以方便的移植到另外的操作系統上例如如果你下載了一個Solaris版本的JMF並且編譯了一個類這些類就可以在Linux上使用不會有任何問題

  作為選擇你可以選擇下載純Java版本或者跨平台版本的JMF這些版本沒有使用操作系統特有的庫文件如果沒有合適的JMF版本適合的操作系統那麼跨平台版本就是一個不錯的選擇

  安裝JMF

  下載完JMF安裝程序後雙擊安裝程序的圖標

  大部分安裝程序都會有個選項安裝本地庫到系統目錄中;例如Windows版本安裝程序會有一個選項Move DLLs to Windows/System directory最好將此選項選中因為它能確保這些操作系統的庫文件能正確的安裝

  在安裝的過程中你還需要選擇項目來更新系統的CLASSPATH和PATH變量如果這些選項被關閉那麼在你編譯和運行本指南的例程序的時候就需要在classpath中引入JMF的jar文件

  第二節 一個簡單的音頻播放器

  浏覽

  在本節中我們將進行創建一個簡單的音頻播放器的第一個練習本例將介紹Manager類和Player接口中兩個都是建立大多數基於JMF應用的重要部分

  本例的功能目標是在字符界面下播放本地的音頻文件我們將學習此源代碼並了解每一行所做的任務完成本節後你將會有一個基於JMF的可播放包括MP WAV AU等多種音頻文件的演示程序

  在本練習後的源代碼分類種可查詢文件SimpleAudioPlayerjava

  引入必要的類

  SimpleAudioPlayer類中包括了一些調用在其前幾行中需要引入所有必要的類

  import dia*;
  import javaioFile;
  import javaioIOException;
  import URL;
  import MalformedURLException;

  The dia包是由JMF定義的多個包之一dia是一個核心包包括了定義Manager類和Player接口等本節中我們主要學習Manager類和Player接口其余的dia類放在後面的章節中

  除了引入dia聲明外以上的代碼片斷引入了一些創建媒體播放器的輸入的聲明

  Player接口

  在下面的代碼片斷中創建一個公共類SimpleAudioPlayer並舉例定義一個Player變量

  public class SimpleAudioPlayer {private Player audioPlayer = null;

  術語Player聽起來由點熟悉因為它是建立在我們公用的音頻或者視頻播放器的基礎上的事實上這個接口的例子就像是當作它們的真實的副本Players揭示了一個實體上的媒體播放器(如立體音箱系統或者VCR)涉及到功能上的方法例如一個JMF媒體播放器可以開始和結束一個媒體流在本節種我們將使用Player的開始和結束功能

  在一個文件上創建一個Player

  使用JMF獲得一個特定媒體文件的Player實例非常簡單Manager類在JMF中如同一個工廠制作許多的特殊接口類型包括Player接口因此Manager類的責任就是創建Player實例如下例

  public SimpleAudioPlayer(URL url) throws IOExceptionNoPlayerExceptionCannotRealizeException
{
audioPlayer = ManagercreateRealizedPlayer(url);
}
public SimpleAudioPlayer(File file) throws IOExceptionNoPlayerExceptionCannotRealizeException
{
this(filetoURL());

  如果你看完本節的代碼你可以注意到Manager類包含了創建一個Player實例的其他方法我們會研究其中的一些如在後面的章節中的DataSource或者MediaLocator的實例化

  Player的狀態

  JMF定義了大量的一個Player實例可能存在的不同狀態如下

  · Prefetched

  · Prefetching

  · Realized

  · Realizing

  · Started

  · Unrealized

  使用這些狀態

  因為使用媒體常常是資源非常密集的由JMF對象揭示的許多方法都是不閉塞的允許一系列事件監聽的狀態改變的異步通知例如一個Player在它可以啟動之前必須經過Prefetched和Realized狀態由於這些狀態的改變都需要一些時間來完成JMF媒體應用可以分配一個線程來初始化創建Player實例然後再繼續其他的操作當Player准備就緒的時候它會通知應用程序其狀態已經改變

  在一個如同我們的這樣簡單的程序中多功能性的類型並不是很重要處於這個原因Manager類也提供了一些創建Realized player的有用方法調用一個createRealizedPlayer()方法來阻塞調用線程直到player達到Realized狀態為了調用一個無阻塞的創建player的方法我們在Manager類中使用了一個createPlayer()方法下面的一行代碼中創建了一個我們需要在例程序中使用的

  Realized playeraudioPlayer = ManagercreateRealizedPlayer(url);

  啟動和停止Player

  設定一個Player實例的啟動或是停止就如同調用Player的一個簡單的認證方法如下所示

  public void play() {audioPlayerstart();}public void stop() {audioPlayerstop();audioPlayerclose();}

  調用SimpleAudioPlayer類中的play()方法來實現調用Player實例的start()方法調用此方法後你能聽到本地的喇叭的聲音文件同樣的stop()方法使player停止並且關閉掉Player對象

  對於讀取和或者播放本地媒體文件來說關閉Player實例釋放所有資源是一個有用的方法因為這是一個簡單的例子關閉Player是終止一個會話可接受的方法但是在實際的應用中你需要小心的確認在除掉Player之前必須要關閉掉一但你已經關閉掉player在再次播放一個媒體之前你必須要創建一個新的Player實例

  


From:http://tw.wingwit.com/Article/program/Java/hx/201311/26628.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.