国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

Java媒體架構(gòu)基礎(chǔ):Framework Basics

2019-11-18 12:13:40
字體:
供稿:網(wǎng)友

  第一節(jié). 關(guān)于此指南
  
  此指南包含的內(nèi)容?
  
  java媒體架構(gòu)(JMF)是一個(gè)令人激動(dòng)的通用的API,它答應(yīng)Java開發(fā)者用許多不同的方法處理媒體。本指南主要通過使用工作的例子提供一個(gè)JMF的一些主要的特征的概述。閱讀完本指南后,你將會(huì)明白JMF體系結(jié)構(gòu)中的主要播放功能。你同樣能正確的使用JMF,使用現(xiàn)存的例子和可為更多非凡功能擴(kuò)展的源代碼。
  
  本指南包含著以下主題:
  
  · 下載和安裝JMF
  · 主要的JMF類以及它們?cè)贘MF體系結(jié)構(gòu)中的應(yīng)用
  · 播放本地的媒體文件
  · 為媒體的存取和操作制作以和圖形用戶界面(GUI)
  · 通過網(wǎng)絡(luò)傳播媒體
  · 通過網(wǎng)絡(luò)接收媒體
  
  幾乎所有的媒體類型的操作和處理都可以通過JMF來實(shí)現(xiàn)。全面的討論JMF所提供的所有特征已經(jīng)超過了本指南的范圍,我們將使用三個(gè)簡(jiǎn)單的媒體應(yīng)用程序來學(xué)習(xí)此框架的構(gòu)建模塊。通過這個(gè)方法,本指南將為你未來學(xué)習(xí)和實(shí)施更多非凡的應(yīng)用提供預(yù)備。
  
  我應(yīng)該使用此指南嗎?
  
  本指南會(huì)帶你學(xué)習(xí)使用JMF工作的基礎(chǔ)。為完成這些,我們會(huì)創(chuàng)建三個(gè)的獨(dú)立工作的例程序。每個(gè)例子都會(huì)建立前一個(gè)例子的基礎(chǔ)上,顯示JMF功能性的不同方面。
  
  在本指南中的例子假定你曾經(jīng)使用過并且已經(jīng)熟悉了Java程序語言。除了Java核心和JMF的類之外,我們會(huì)使用一些Java AWT和Swing類(用于創(chuàng)建GUI),也會(huì)有一些Java網(wǎng)絡(luò)類(用于在網(wǎng)絡(luò)中傳輸媒體)。對(duì)GUI和網(wǎng)絡(luò)類一些熟悉有助于你更快的明白觀點(diǎn)和這里的例子,但并非是閱讀本指南必須的。
  
  我們將學(xué)習(xí)的例程序如下
  
  · 一個(gè)簡(jiǎn)單的音頻播放器(JMF的HelloWorld應(yīng)用):這個(gè)字符界面的播放器通過在命令行中簡(jiǎn)單的輸入媒體文件的名字就可以播放大多數(shù)的音頻類型。此音頻播放器的演示大體上顯示了JMF的特有的類。
  · 一個(gè)圖形界面的媒體播放器:我們將使用JMF內(nèi)置的接口組件來建立圖形界面,所以在此練習(xí)中必須有一些圖形界面的編程經(jīng)驗(yàn)。這個(gè)媒體閱覽器演示使用了一些Java AWT和Swing類來為用戶顯示圖形組件。
  · 一個(gè)媒體廣播應(yīng)用:此應(yīng)用程序答應(yīng)一個(gè)本地媒體文件通過網(wǎng)絡(luò)傳播。此程序能靈活的使媒體只傳輸?shù)街付ǖ木W(wǎng)絡(luò)節(jié)點(diǎn),或者傳輸?shù)揭粋€(gè)子網(wǎng)絡(luò)中的所有節(jié)點(diǎn)。此演示使用了一些Java的網(wǎng)絡(luò)APIs來在網(wǎng)絡(luò)中傳輸媒體。
  
  作為第三個(gè)練習(xí)的一部分,我們將修改圖形界面的播放器,讓其能接收并且播放媒體。
  
  跳至23頁觀看Resources,文章,指南,和其他參考書目的列表,這會(huì)幫助你學(xué)習(xí)到更到關(guān)于此指南包括的主題。
  
  安裝需求
  
  要運(yùn)行此指南中的例程序,你需要如下的工具和組件:
  
  · Java 2 平臺(tái),標(biāo)準(zhǔn)版,編譯和運(yùn)行演示程序
  · Java媒體框架,版本2.1.1a或者更高
  · 一塊已經(jīng)安裝并且配置號(hào)的適當(dāng)?shù)穆暱?br />  · 一臺(tái)或者多臺(tái)測(cè)試機(jī)器
  · 演示的源代碼文件在mediaplayer.jar中
  
  最后的一個(gè)演示應(yīng)用顯示了JMF在網(wǎng)絡(luò)中的應(yīng)用。假如需要,此演示能運(yùn)行在一個(gè)獨(dú)立的機(jī)器上,使用此機(jī)器即是傳輸方也是接收方。可是要觀察到在網(wǎng)絡(luò)中使用JMF的所有功能,你仍然需要至少兩臺(tái)聯(lián)網(wǎng)的機(jī)器。
  
  在23頁中的Resources可下載Java 2平臺(tái),完整的源代碼文件,以及其他一些完成本指南所需要的工具。
  
  下載安裝文件
  
  將JMF安裝到你的計(jì)算機(jī)中的第一步是在JMF的主頁中下載安裝文件,它同樣包括了JMF源代碼和API文檔的鏈接。23頁的Resources中有下載JMF的鏈接。
  
  目前,JMF有Windows, Solaris, linux等版本,以及可運(yùn)行在任何裝有虛擬機(jī)的計(jì)算機(jī)上一個(gè)純Java版本。為了增加性能,你需要下載一個(gè)與你操作系統(tǒng)所適應(yīng)的版本。任何在一個(gè)操作系統(tǒng)JMF版本下書寫和編譯的代碼都可以方便的移植到另外的操作系統(tǒng)上。例如,假如你下載了一個(gè)Solaris版本的JMF并且編譯了一個(gè)類,這些類就可以在Linux上使用,不會(huì)有任何問題。
  
  作為選擇,你可以選擇下載純Java版本,或者跨平臺(tái)版本的JMF。這些版本沒有使用操作系統(tǒng)特有的庫文件。假如沒有合適的JMF版本適合的操作系統(tǒng),那么跨平臺(tái)版本就是一個(gè)不錯(cuò)的選擇。
  
  安裝JMF
  
  下載完JMF安裝程序后,雙擊安裝程序的圖標(biāo)。
  
  大部分安裝程序都會(huì)有個(gè)選項(xiàng),安裝本地庫到系統(tǒng)目錄中;例如,Windows版本安裝程序會(huì)有一個(gè)選項(xiàng)“Move DLLs to Windows/System Directory.”。最好將此選項(xiàng)選中,因?yàn)樗艽_保這些操作系統(tǒng)的庫文件能正確的安裝
  
  在安裝的過程中,你還需要選擇項(xiàng)目來更新系統(tǒng)的CLASSPATH和PATH變量。假如這些選項(xiàng)被關(guān)閉,那么在你編譯和運(yùn)行本指南的例程序的時(shí)候就需要在classpath中引入JMF的jar文件。
  
  第二節(jié). 一個(gè)簡(jiǎn)單的音頻播放器
  
  瀏覽
  
  在本節(jié)中,我們將進(jìn)行創(chuàng)建一個(gè)簡(jiǎn)單的音頻播放器的第一個(gè)練習(xí)。本例將介紹Manager類和Player接口,中兩個(gè)都是建立大多數(shù)基于JMF應(yīng)用的重要部分。
  
  本例的功能目標(biāo)是在字符界面下播放本地的音頻文件。我們將學(xué)習(xí)此源代碼,并了解每一行所做的任務(wù)。完成本節(jié)后,你將會(huì)有一個(gè)基于JMF的可播放包括mp3, WAV, AU等多種音頻文件的演示程序。
  
  在本練習(xí)后的源代碼分類種可查詢文件SimpleAudioPlayer.java。
  
  引入必要的類
  
  SimpleAudioPlayer類中包括了一些調(diào)用,在其前幾行中需要引入所有必要的類:
  
  import javax.media.*;
  import java.io.File;
  import java.io.IOException;
  import java.net.URL;
  import java.net.MalformedURLException;
  
  The javax.media包是由JMF定義的多個(gè)包之一。javax.media是一個(gè)核心包,包括了定義Manager類和Player接口等。本節(jié)中,我們主要學(xué)習(xí)Manager類和Player接口,其余的javax.media類放在后面的章節(jié)中。
  
  除了引入javax.media聲明外,以上的代碼片斷引入了一些創(chuàng)建媒體播放器的輸入的聲明。
  
  Player接口
  
  在下面的代碼片斷中,創(chuàng)建一個(gè)公共類SimpleAudioPlayer并舉例定義一個(gè)Player變量:
  
  public class SimpleAudioPlayer {PRivate Player audioPlayer = null;
  
  術(shù)語Player聽起來由點(diǎn)熟悉,因?yàn)樗墙⒃谖覀児玫囊纛l或者視頻播放器的基礎(chǔ)上的。事實(shí)上,這個(gè)接口的例子就像是當(dāng)作它們的真實(shí)的副本。Players揭示了一個(gè)實(shí)體上的媒體播放器(如立體音箱系統(tǒng)或者VCR)涉及到功能上的方法。例如,一個(gè)JMF媒體播放器可以開始和結(jié)束一個(gè)媒體流。在本節(jié)種,我們將使用Player的開始和結(jié)束功能。
  
  在一個(gè)文件上創(chuàng)建一個(gè)Player
  
  使用JMF獲得一個(gè)特定媒體文件的Player實(shí)例非常簡(jiǎn)單。Manager類在JMF中如同一個(gè)工廠制作許多的非凡接口類型,包括Player接口。因此,Manager類的責(zé)任就是創(chuàng)建Player實(shí)例,如下例:
  
  public SimpleAudioPlayer(URL url) throws IOException,NoPlayerException,CannotRealizeException {audioPlayer = Manager.createRealizedPlayer(url);}public SimpleAudioPlayer(File file) throws IOException,NoPlayerException,CannotRealizeException {this(file.toURL());}
  
  假如你看完本節(jié)的代碼,你可以注重到Manager類包含了創(chuàng)建一個(gè)Player實(shí)例的其他方法。我們會(huì)研究其中的一些,如在后面的章節(jié)中的DataSource或者M(jìn)ediaLocator的實(shí)例化。
  
  Player的狀態(tài)
  
  JMF定義了大量的一個(gè)Player實(shí)例可能存在的不同狀態(tài)。如下:
  
  · Prefetched
  · Prefetching
  · Realized
  · Realizing
  · Started
  · Unrealized
  
  使用這些狀態(tài)
  
  因?yàn)槭褂妹襟w經(jīng)常是資源非常密集的,由JMF對(duì)象揭示的許多方法都是不閉塞的,答應(yīng)一系列事件監(jiān)聽的狀態(tài)改變的異步通知。例如,一個(gè)Player在它可以啟動(dòng)之前,必須經(jīng)過Prefetched和Realized狀態(tài)。由于這些狀態(tài)的改變都需要一些時(shí)間來完成,JMF媒體應(yīng)用可以分配一個(gè)線程來初始化創(chuàng)建Player實(shí)例,然后再繼續(xù)其他的操作。當(dāng)Player預(yù)備就緒的時(shí)候,它會(huì)通知應(yīng)用程序其狀態(tài)已經(jīng)改變。
  
  在一個(gè)如同我們的這樣簡(jiǎn)單的程序中,多功能性的類型并不是很重要。處于這個(gè)原因,Manager類也提供了一些創(chuàng)建Realized player的有用方法。調(diào)用一個(gè)createRealizedPlayer()方法來阻塞調(diào)用線程,直到player達(dá)到Realized狀態(tài)。為了調(diào)用一個(gè)無阻塞的創(chuàng)建player的方法,我們?cè)贛anager類中使用了一個(gè)createPlayer()方法。下面的一行代碼中創(chuàng)建了一個(gè)我們需要在例程序中使用的
  
  Realized player:audioPlayer = Manager.createRealizedPlayer(url);
  
  啟動(dòng)和停止Player
  
  設(shè)定一個(gè)Player實(shí)例的啟動(dòng)或是停止就如同調(diào)用Player的一個(gè)簡(jiǎn)單的認(rèn)證方法,如下所示:
  
  public void play() {audioPlayer.start();}public void stop() {audioPlayer.stop();audioPlayer.close();}
  
  調(diào)用SimpleAudioPlayer類中的play()方法來實(shí)現(xiàn)調(diào)用Player實(shí)例的start()方法。調(diào)用此方法后,你能聽到本地的喇叭的聲音文件。同樣的,stop()方法使player停止并且關(guān)閉掉Player對(duì)象。
  
  對(duì)于讀取和或者播放本地媒體文件來說,關(guān)閉Player實(shí)例釋放所有資源是一個(gè)有用的方法。因?yàn)檫@是一個(gè)簡(jiǎn)單的例子,關(guān)閉Player是終止一個(gè)會(huì)話可接受的方法。但是在實(shí)際的應(yīng)用中,你需要小心的確認(rèn)在除掉Player之前必須要關(guān)閉掉。一但你已經(jīng)關(guān)閉掉player,在再次播放一個(gè)媒體之前你必須要?jiǎng)?chuàng)建一個(gè)新的Player實(shí)例(等待它的狀

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 九台市| 汶川县| 柳河县| 绥棱县| 泸溪县| 崇义县| 西畴县| 香港| 新蔡县| 囊谦县| 南京市| 迁西县| 杭锦后旗| 晴隆县| 化州市| 双柏县| 顺义区| 瑞丽市| 南安市| 富平县| 福建省| 罗平县| 若羌县| 丰顺县| 惠州市| 镇平县| 阳春市| 长沙县| 阳谷县| 威海市| 安阳市| 临海市| 嘉善县| 清原| 赫章县| 崇州市| 蓝田县| 藁城市| 黄龙县| 兰考县| 买车|