第一節 關於此指南 此指南包含的內容?
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或者更高
· 一塊已經安裝並且配置號的適當的聲卡
· 一台或者多台測試機器
· 演示的源代碼文件在mediaplayer
jar中
最後的一個演示應用顯示了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等多種音頻文件的演示程序
在本練習後的源代碼分類種可查詢文件SimpleAudioPlayer
java
引入必要的類
SimpleAudioPlayer類中包括了一些調用
在其前幾行中需要引入所有必要的類
import dia
*;
import java
io
File;
import java
io
IOException;
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 IOException
NoPlayerException
CannotRealizeException {audioPlayer = Manager
createRealizedPlayer(url);}public SimpleAudioPlayer(File file) throws IOException
NoPlayerException
CannotRealizeException {this(file
toURL());}
如果你看完本節的代碼
你可以注意到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 player
audioPlayer = Manager
createRealizedPlayer(url);
啟動和停止Player
設定一個Player實例的啟動或是停止就如同調用Player的一個簡單的認證方法
如下所示
public void play() {audioPlayer
start();}public void stop() {audioPlayer
stop();audioPlayer
close();}
調用SimpleAudioPlayer類中的play()方法來實現調用Player實例的start()方法
調用此方法後
你能聽到本地的喇叭的聲音文件
同樣的
stop()方法使player停止並且關閉掉Player對象
對於讀取和或者播放本地媒體文件來說
關閉Player實例釋放所有資源是一個有用的方法
因為這是一個簡單的例子
關閉Player是終止一個會話可接受的方法
但是在實際的應用中
你需要小心的確認在除掉Player之前必須要關閉掉
一但你已經關閉掉player
在再次播放一個媒體之前你必須要創建一個新的Player實例(等待它的狀
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26532.html