JMF API 中文_第1頁
JMF API 中文_第2頁
JMF API 中文_第3頁
JMF API 中文_第4頁
JMF API 中文_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、JMF API 中文指導(dǎo)臺(tái)灣版(2)收藏JavaTM Media Framework API Guide NO.3 September 11, 2000Presenting Time-Based Media with JMFControlling a Player Creating a Player Displaying Media Interface Components Setting the Playback Rate Setting the Start Position Preparing to Start Starting and Stopping the Presentation

2、Releasing Player ResourcesQuerying a Player Getting the Playback Rate Getting the Media Time Getting the Time-Base Time Getting the Duration of the Media StreamResponding to Media Events Implementing the ControllerListener Interface Using ControllerAdapterSynchronizing Multiple Media Streams Using a

3、 Player to Synchronize Controllers Synchronizing Players DirectlyExample: Playing an MPEG Movie in an Applet Overview of PlayerApplet Initializing the Applet Controlling the Player Responding to Media EventsPresenting Media with the MediaPlayer BeanPresenting RTP Media Streams Listening for RTP Form

4、at ChangesPresenting Time-Based Media with JMF以JMF呈現(xiàn)以time-base為主的 Media像是audio或video,我們可以使用 Playback去控制媒體,或是讓使用者用控制面板去控制錄放功能。如果有多個(gè)media streams,要撥放每一個(gè),都需要用單獨(dú)的player去撥放;若要同步撥放它們,需要使用一個(gè)player物件去控制其他的operation。Processor是種特殊裝置的player,它可以去處理、控制展示前的媒體資料,不論是使用基本的或較高階的player都需要用到一些methods去管理錄放裝置,MediaPlayer

5、 bean是可以提供一個(gè)簡單的方法在我們在Applet或Applictation實(shí)現(xiàn)media player,當(dāng)選擇不同的串流媒體時(shí),MediaPlayer bean會(huì)自動(dòng)產(chǎn)生一個(gè)新的player。Controlling a Player撥放media stream,我們需要先建構(gòu)一個(gè)plyaer,安裝並且準(zhǔn)備執(zhí)行。Creating a Player我們可以透過media Manager間接地去建構(gòu)一個(gè)player,首先取得player的元件,並且將它們加至Applet或Application上。如果你需要建立一個(gè)新的player,你可以從Manager去呼叫createPlayer 或 cr

6、eateProcessor。Manager使用media URL或MediaLocator去具體的建立一個(gè)player,使用URL必須要安裝URLStreamHandler才行,MediaLocator則沒有限制。Blocking Until a Player is Realized在Realized狀態(tài)下,Player可以呼叫許多methods,當(dāng)我們呼叫createRealizedPlayer去建立一個(gè)Player時(shí),我們可以保證Player是在Realized狀態(tài)下;這個(gè)method提供一個(gè)間單的步驟去建立player。當(dāng)這個(gè)method被呼叫,它會(huì)被blocks住直到player完成R

7、ealized。同樣地,Manager也提供了createRealizeProcessor方法來建構(gòu)一個(gè)Realized Processor。Using a ProcessorModel to Create a ProcessorProcessor只能使用Processor Model,它定義了Processor輸入與輸出條件,用ProcessorModel建立processor時(shí),我們需要呼叫Manager.createRealizedProcessor method(Example3-1)去建立一個(gè)Realized Processor,可以產(chǎn)生一個(gè)44.1kHz 16-bit的IMA4編碼

8、立體聲音軌。Example 3-1: Constructing a Processor with a ProcessorModel.AudioFormat afs = new AudioFormat1;afs0 = new AudioFormat(ima4, 44100, 16, 2);Manager.createRealizedProcessor(new ProcessorModel(afs, null);這個(gè)例子並沒有說明資料的來源(URL),但是可以利用擷取設(shè)備去擷取聲音或影像經(jīng)過處裡編成IMA4的格式。需注意的是,當(dāng)我們在PorcessorModel去建立一個(gè)Realized Proc

9、essor時(shí),我們將不能夠透過Processor objects TrackControls去詳述processing options(詳細(xì)資料在p.71)。Displaying Media Interface Components一般player有兩種使用者介面元件:visual component、control-panel component,有些會(huì)多加volume controls、download-progress bars。Displaying a Visual ComponentMedia撥放都會(huì)有一個(gè)視覺元件,甚至有些聲音也會(huì)有視覺元件,像是波器或是活動(dòng)字幕。為了顯示視覺元件,

10、我們可以:1. 呼叫g(shù)etVisualComponent取得元件 2. 將原件加入到Applet或Application視窗 你可以透過visualComponent存取所有player物件的屬性、像是x、y軸,而Player components的layout是透過AWT layout做管理。Displaying a Control Panel ComponentPlayer通常有一個(gè)控制面板供使用者使用,像撥放、停止、暫停每一個(gè)Player提供一個(gè)內(nèi)定的control panel。為了顯示一個(gè)內(nèi)定的control panel,我們可以:1. 呼叫g(shù)etControlPanelCompone

11、nt取得元件 2. 將傳回元件加到展示視窗 使用者也可以自訂GUI控制元件,如果將制定元件註冊像ControllerListeners,也可以在player更換的時(shí)更新它們。Displaying a Gain-Control ComponentPlayer可以implement GainControl interface來得到聲音的調(diào)節(jié)裝置。GainControl提供一個(gè)可以調(diào)整聲音的methods,像是setLevel和setMute。為了顯示GainControlComponent,我們可以:1. 從player取得GainControl須呼叫g(shù)etGainControl,如果傳回null

12、表示沒有支援GainControl interface 2. 從傳回的GainControl中呼叫g(shù)etControlControl 3. 將傳回的元件加入視窗中 須注意:getControl不能傳回Player objects GainControl,只能呼叫g(shù)etGainControl來access GainControl。Displaying Custom Control Components許多player有其他附加的功能,例如亮度、對比,你可以呼叫g(shù)etControls method找出player支援哪些自訂元件。Example 3-2: 使用 getControls 找出支援哪些

13、控制.Control controls = player.getControls(); for (int i = 0; i controls.length; i+) if (controlsi instanceof CachingControl) cachingControl = (CachingControl) controlsi; Displaying a Download-Progress ComponentCachingControl介面是player的一個(gè)特殊的型態(tài),可以記載下載的進(jìn)度,CachingControl提供一個(gè)內(nèi)建的progress-bar,這個(gè)progress-barr

14、會(huì)在下載進(jìn)行時(shí)自動(dòng)更新,在Applet內(nèi)為了使用這個(gè)功能,我們必須: 1. implement ControllerListener interface並且在controllerUpdate中去listen CachingControlEvents 2. 第一次接收CachingControlEvents 1. 在事件中呼叫g(shù)etCachingControl取得caching control 2. 在CachingControl中呼叫g(shù)etProgressBar取得內(nèi)定的projress-bar元件 3. 加入元件至Applet中 3. 在每個(gè)時(shí)間中必須去接收CachingControlEve

15、nt用來check是否下載完成,當(dāng)getContrentProgress傳回來的值等於getContentLength,則移除progress-bar 如果我們要implement自己的progress-bar component,我們必須隨時(shí)listen CachingControlEvent和update download progress。Setting the Playback RatePlayer objects rate決定了media time如何改變,它著重於time-base time;它定義在每一個(gè)base-time time中media time前進(jìn)了多少單位 ,例如,當(dāng)

16、rate設(shè)定為2.0時(shí)表示Player撥放時(shí)將會(huì)比time-based快兩倍的速度撥放。理論上,Player objects rate可以設(shè)定為any real number,negative rates表示player中的media 是倒轉(zhuǎn)的。對於設(shè)定比例,我們可以呼叫setReat,當(dāng)setReat被呼叫,Method會(huì)傳回一個(gè)actually set的rate。如果沒有改變將會(huì)將rate內(nèi)定為1.0。Setting the Start Position設(shè)定player物件的媒體時(shí)間相當(dāng)於設(shè)定讀取媒體的時(shí)點(diǎn),媒體資料來源若像是一個(gè)檔案,媒體時(shí)間是有限制的,最大媒體時(shí)間就是媒體流結(jié)束的地方,

17、我們可以呼叫setMediaTime可以設(shè)定想要的時(shí)間。 Frame Positioning 有些player允許尋找特定影像frame,讓你可以容易的設(shè)定media起始點(diǎn)。為了要設(shè)定frame 的位置,我們可以呼叫FramePositioningControl來尋找method,當(dāng)你找到frame,就可以設(shè)定Player media time的值與frame開始的值相一致,會(huì)發(fā)出mediaTimeSetEvent。 有些player可以在媒體時(shí)間與框架位址間轉(zhuǎn)換,你可以使用FramePositioningControl mapFrameToTime與mapTimeToFrame 兩種meth

18、ods存取資料。 Preparing to Start 有些媒體player並不會(huì)立即開始,因?yàn)樵陂_始前要視某些硬體與軟體連接情況而定,例如沒有啟動(dòng)過的player需要在記憶體中配置媒體資料緩衝區(qū),如果是網(wǎng)路裝置上的媒體,則需要先建立網(wǎng)路連線。 Realizing and Prefetching a Player JMF 流程中的兩個(gè)階段:Realizing 與 Prefetching。在Player運(yùn)轉(zhuǎn)開始後可以執(zhí)行ControllerListener介面去控制。可以呼叫realize讓player進(jìn)入Realizing狀態(tài)以及開始realization程序、也可以呼叫Prefetch讓pl

19、ayer進(jìn)入Prefetching程序。realize 與 prefetch methods是非同步的且會(huì)自動(dòng)回傳的。當(dāng)player完成運(yùn)作會(huì)丟出RealizeCompleteEvent 或 PrefetchCompleteEvent表示player完成這些運(yùn)作。 Player可以透過setMediaTime設(shè)定媒體時(shí)間,會(huì)傳回Realize狀態(tài)並且增加前置時(shí)間。記住Prefetched狀態(tài)會(huì)佔(zhàn)住系統(tǒng)資源,因?yàn)橄褚粜Эㄒ淮沃荒芴峁┮粋€(gè)程式使用,Prefetched狀態(tài)會(huì)阻礙到其他player的撥放。 Determining the Start Latency 可以呼叫g(shù)etStartLaten

20、cy決定開始需要多少時(shí)間,將會(huì)傳回一個(gè)最大可能的開始前置時(shí)間,getStartLatenc也可能傳回LATENCY_UNKNOWN 。開始的前置時(shí)間是由getStartLatency依Player objects 目前狀態(tài)的不同而定。 Starting and Stopping the Presentation Clock和Player interface定義著starting和stopping的method。 Starting the Presentation Start mrthod告訴player立即開始展示,如果有需要會(huì)執(zhí)行realize 與prefetch運(yùn)作,如果在Started

21、Player中start被呼叫後,將丟出startEvent。 Clock定義了syncStart method,可以用在synchronization(同步)上。在media stream中要start a Player,必須: 1. 呼叫setMediaTime.設(shè)定想要的開始點(diǎn) 2. 呼叫player中的start Stopping the Presentation 有四種情況將被停止:1. 當(dāng)stop method被呼叫時(shí) 2. 當(dāng)?shù)竭_(dá)指定停止的時(shí)間時(shí) 3. 當(dāng)媒體撥放完畢時(shí) 4. 接收速度低於撥放裝置可接受值時(shí) 當(dāng)Player被停止時(shí),假如媒體來源是被控制住的,那media time

22、也會(huì)被凍結(jié)住。如果是串流媒體則不能凍結(jié)媒體時(shí)間,媒體時(shí)間會(huì)繼續(xù)前進(jìn)。當(dāng)Stopped重新開始,時(shí)間會(huì)從暫停的地方繼續(xù)前進(jìn)。如果執(zhí)行stop於一個(gè)已經(jīng)停止的player,將會(huì)丟出一個(gè)StopByRequestEvent。Stopping the Presentation at a Specified Time我們可以呼叫setStopTime來指定Player何時(shí)要停止,媒體時(shí)間到達(dá)設(shè)定時(shí)間就會(huì)停止。如果正在撥放媒體的時(shí)間已經(jīng)超過設(shè)定的時(shí)間,將會(huì)立即停止撥放。如果已經(jīng)設(shè)定過停止時(shí)間,再去設(shè)定就會(huì)產(chǎn)生一個(gè)錯(cuò)誤。你可以呼叫g(shù)etStopTime取得currently scheduled stop t

23、ime.(目前停止時(shí)間表單),如果clock沒有scheduled stop time,getStopTime會(huì)傳回Clock.RESET,如果移除設(shè)定的時(shí)間,媒體將會(huì)撥放到結(jié)束為止。Releasing Player Resources我們可以呼叫deallocate method釋放player全部的資源,像緩衝器、內(nèi)部記憶體。deallocate method只能在停止的player上呼叫。為了避免產(chǎn)生ClockStartedErrors,我們必須先呼叫stop再呼叫deallocate。在Prefetching 或 Prefetched狀態(tài)呼叫deallocate將會(huì)回到Realized

24、狀態(tài),如果是在Realized狀態(tài)呼叫deallocate player會(huì)丟出一個(gè)DeallocateEvent並且傳回一個(gè) Unrealized狀態(tài)。當(dāng)你完成一個(gè)player或是不再使用,你必須呼叫close,它會(huì)釋放所有的資源,所有的控制元件關(guān)閉後會(huì)丟出一個(gè)ControllerClosedEvent,並且不能重新開啟,否則會(huì)產(chǎn)生錯(cuò)誤。Querying a PlayerPlayer有提供一切資訊,例如撥放比例、媒體時(shí)間以及長度。Getting the Playback Rate呼叫g(shù)etRate可以傳回?fù)芊叛b置比例值。Getting the Media Time呼叫g(shù)etMediaTime可

25、以得到媒體時(shí)間,如果不是目前的媒體資料,將會(huì)顯示媒體展示的開始點(diǎn)。圖為Frame duration and media time.例如有一個(gè)player撥放一個(gè)frame要5秒,原本的比例設(shè)定為0.2如果開始時(shí)間在0.0,就會(huì)從0.0到5.0會(huì)撥放第一個(gè)frame,如果從2.0開始撥放,直到5.0時(shí),第一個(gè)畫面只會(huì)顯示3秒。Getting the Time-Base Time我們可以由Player objects TimeBase和呼叫g(shù)etTime,得到Player objects 目前的time-base time:myCurrentTBTime = player1.getTimeBase

26、().getTime();當(dāng)player正在執(zhí)行,可以呼叫mapToTimeBase取得時(shí)間基準(zhǔn)。Getting the Duration of the Media Stream我們可以從Controllers去implement Duration interface,知道知道串流媒體的長度,這一個(gè)interface只定義了單一的method:getDuration。如果無法決定媒體長度的話,當(dāng)我們呼叫g(shù)etDuration,會(huì)傳回DURATION_UNKNOWN。但是像現(xiàn)場立即的廣播不知道長度,執(zhí)行g(shù)et Duration則會(huì)傳回一個(gè)DURATION_UNBOUNDED。Responding

27、 to Media EventsControllerListener是一個(gè)Asynchronous interface(非同步介面),透過Controller objects處理事件產(chǎn)生,可以去管理像prefetching的operations。Implementing the ControllerListener Interface為了Implementing the ControllerListener Interface,必須:1. 在class中 implement ControllerListener interface 2. Register that class as a lis

28、tener by calling addControllerListener on the Controller that you want to receive events from. 當(dāng)一個(gè)Controller丟出event時(shí),它會(huì)在其他的觸發(fā)事件上去呼叫controllerUpdate,而ControllerUpdate像是在執(zhí)行一連串的if-else敘述。Example 3-3: Implementing controllerUpdate.if (event instanceof EventType). else if (event instanceof OtherEventType

29、).有些ControllerEvents包含額外的狀態(tài)資訊,例如StartEventStopEvent classes定義一個(gè)method允許你當(dāng)事件發(fā)生時(shí)可以重新取得媒體時(shí)間。Using ControllerAdapter用ControllerAdapter執(zhí)行ControllerListener介面Example 3-4: Using ControllerAdapter.player.addControllerListener(new ControllerAdapter() public void endOfMedia(EndOfMediaEvent e) Controller contr

30、oller = e.getSource(); controller.stop(); controller.setMediaTime(new Time(0); controller.deallocate(); )Synchronizing Multiple Media Streams 同步複合的串流媒體錄放裝置要結(jié)合TimeBase,需要用到clock介面的getTimeBase與setTimeBase methods定義,例如要同步兩個(gè)player,player1要使用player2的時(shí)間。player1.setTimeBase(player2.getTimeBase(); 當(dāng)player同步

31、之後還是可以個(gè)別的控制。 Using a Player to Synchronize Controllers同步player直接使用syncStart,JMF提供一個(gè)簡單的方法,一個(gè)player可以管理運(yùn)作任何的控制器。 一般而言需要同步player或是控制器,必須使用到addController裝置,它比個(gè)別管理同步的player更快速、簡單、更少錯(cuò)誤。 當(dāng)player採用控制器控制 Controller採用player物件基準(zhǔn)時(shí)間 Player物件時(shí)間長度變長 Player物件前置時(shí)間變長 Adding a Controller用addController method加入一個(gè)控制器到pl

32、ayer,必須回到Realized狀態(tài),否則會(huì)送出NotRealizedError,在player1還沒有移除控制器時(shí)player2不能使用。在player2呈現(xiàn)player1控制: player2.addController(player1); Controlling Managed Controllers FunctionStopped PlayerStarted PlayersetMediaTimeInvokes setMediaTime on all managed Controllers.Stops all managed Controllers, invokes setMediaT

33、ime, and restarts Controllers.setRateInvokes setRate on all managed Controllers. Returns the actual rate that was supported by all Controllers and set.Stops all managed Controllers, invokes setRate, and restarts Controllers. Returns the actual rate that was supported by all Controllers and set.start

34、Ensures all managed Controllers are Prefetched and invokes syncStart on each of them, taking into account their start latencies.Depends on the Player implementation. Player might immediately post a StartEvent.realizeThe managing Player immediately posts a RealizeCompleteEvent. To be added, a Control

35、ler must already be realized.The managing Player immediately posts a RealizeCompleteEvent. To be added, a Controller must already be realized.prefetchInvokes prefetch on all managed Controllers. The managing Player immediately posts a PrefetchCompleteEvent, indicating that all managed Controllers ar

36、e Prefetched.stopNo effect.Invokes stop on all managed Controllers.deallocateInvokes deallocate on all managed Controllers.It is illegal to call deallocate on a Started Player.setStopTimeInvokes setStopTime on all managed Controllers. (Player must be Realized.)Invokes setStopTime on all managed Cont

37、rollers. (Can only be set once on a Started Player.)syncStartInvokes syncStart on all managed Controllers. It is illegal to call syncStart on a Started Player.closeInvokes close on all managed Controllers.It is illegal to call close on a Started Player.Table 3-1: Calling control methods on a managin

38、g player.Removing a Controller使用removeController method移除player上的控制器,在player2上釋放player1的控制:player2.removeController(player1);Synchronizing Players Directly在一些情況,需要靠自己去管理複合的同步player物件,可以個(gè)別控制比例、媒體時(shí)間,你必須:1. 每一個(gè)同步player註冊觸發(fā)事件2. 決定哪一個(gè)player基準(zhǔn)時(shí)間作為其他player的基準(zhǔn)時(shí)間3. 設(shè)定player的撥放比例,如果沒有支援設(shè)定的比例,會(huì)傳回比例已經(jīng)使用(這裡沒有可以詢

39、問是否支援比例的裝置) 4. 所有player進(jìn)入同步狀態(tài) 5. player物件同步運(yùn)作 設(shè)定每一個(gè)player的媒體時(shí)間 Prefetch所有player 決定同步player的最大前置開始時(shí)間 呼叫syncStart開始同步player物件如果要改變同步player的時(shí)間1. 首先setMediaTime設(shè)定所以同步player物件2. 呼叫每個(gè)player準(zhǔn)備開始3. 當(dāng)?shù)诙卧O(shè)定被接受,呼叫每一個(gè)player停止4. setMediaTime設(shè)定每一個(gè)player新的時(shí)間5. 重新執(zhí)行prefetching運(yùn)作6. 全部的player都在prefetched狀態(tài),呼叫syncStar

40、t Example: Playing an MPEG Movie in an Applet在java Applet撥放MPEG電影,包含視覺元件與控制面板在HTML中的標(biāo)記:Example 3-5: Invoking PlayerApplet. PlayerApplet定義五個(gè)步驟1. init-透過Applet標(biāo)記建立一個(gè)player 2. start-當(dāng)PlayerApplet啟動(dòng),開始player 3. stop-當(dāng)PlayerApplet停止4. destroy-當(dāng)PlayerApplet移除,關(guān)閉player 5. controllerUpdate-回應(yīng)player事件Example

41、 3-6: PlayerApplet.import java.applet.*; import java.awt.*;import .*; import javax.media.*; public class PlayerApplet extends Applet implements ControllerListener Player player = null; public void init() setLayout(new BorderLayout(); String mediaFile = getParameter(FILE); try URL mediaURL = new URL(

42、getDocumentBase(), mediaFile); player = Manager.createPlayer(mediaURL); player.addControllerListener(this); catch (Exception e) System.err.println(Got exception +e); public void start() player.start(); public void stop() player.stop(); player.deallocate(); public void destroy() player.close(); publi

43、c synchronized void controllerUpdate(ControllerEvent event) if (event instanceof RealizeCompleteEvent) Component comp; if (comp = player.getVisualComponent() != null) add (Center, comp); if (comp = player.getControlPanelComponent() != null) add (South, comp); validate(); Initializing the Applet1. 接收

44、Applet檔案參數(shù)2. 利用檔案參數(shù)確定媒體檔案並且建立URL物件3. 呼叫Manager.createPlayer建立一個(gè)player4. 呼叫addControllerListener註冊applet上的控制觸發(fā)事件Example 3-7: Initializing PlayerApplet.public void init() setLayout(new BorderLayout();/ 1. Get the FILE parameter. String mediaFile = getParameter(FILE); try / 2. Create a URL from the FIL

45、E parameter. The URL / class is defined in . URL mediaURL = new URL(getDocumentBase(), mediaFile); / 3. Create a player with the URL object. player = Manager.createPlayer(mediaURL); / 4. Add PlayerApplet as a listener on the new player. player.addControllerListener(this); catch (Exception e) System.

46、err.println(Got exception +e); Controlling the Player這個(gè)class定義當(dāng)Applet包含打開與關(guān)閉,自動(dòng)呼叫start與stop methods。Example 3-8: Starting the Player in PlayerApplet.public void start() player.start(); Example 3-9: Stopping the Player in PlayerApplet.public void stop() player.stop(); player.deallocate(); 當(dāng)Applet離開Pl

47、ayer釋放資源供其他player使用並且關(guān)閉。Example 3-10: Destroying the Player in PlayerApplet. public void destroy() player.close(); Responding to Media Events當(dāng)PlayerApplet回應(yīng)一個(gè)事件,丟出RealizeCompleteEvent,PlayerApple顯示player的元件Example 3-11: Responding to media events in PlayerApplet.public synchronized void controllerUp

48、date(ControllerEvent event) if (event instanceof RealizeCompleteEvent) Component comp; if (comp = player.getVisualComponent() != null) add (Center, comp); if (comp = player.getControlPanelComponent() != null) add (South, comp); validate(); PlayerApple等待Player丟出RealizeCompleteEvent,然後顯示內(nèi)含的視覺元件,與控制面板,

49、呼叫validate觸發(fā)layout管理,顯示新加入的元件。Presenting Media with the MediaPlayer Bean透過MediaPlayer Bean展示媒體使用MediaPlayer Java Bean是一個(gè)間單的方法在Applet或Applications上展示串流媒體,也可以在這上面定義自己的元件。它會(huì)再選擇不同的串流媒體時(shí)自動(dòng)產(chǎn)生一個(gè)新的player,一個(gè)MediaPlayer Bean有幾個(gè)特殊用具可以設(shè)定PropertyTypeDefault DescriptionShow control panel BooleanYesControls whethe

50、r or not the video control panel is visible.LoopBooleanYesControls whether or not the media clip loops continuously.Media locationStringN/AThe location of the media clip to be played. It can be an URL or a relative address. For example:file:/e:/video/media/Sample1.movhttp:/webServer/media/Sample1.mo

51、vmedia/Sample1.mov Show cachingcontrolBooleanNoControls whether or not the download-progress bar is displayed.Fixed Aspect RatioBooleanYesControls whether or not the medias original fixed aspect ratio is maintained.Volumeint3 Controls the audio volume.用MediaPlayer Bean撥放媒體1. MediaPlayer 建立一個(gè)instance MediaPlayer mp1 = new javax.media.bean.playerbean.MediaPlayer();2. 設(shè)定要撥放的位址mp1.setMediaLocation(new java.lang.String(file:/E:/jvideo/media/Sample1.mov);3. 開始

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論