




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、javatm media framework api guideno.3 september 11 , 2000 presenting 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 releasing player re
2、sources querying a player getting the playback rate getting the media time getting the time-base time getting the duration of the media stream responding to media events implementing the controllerlistener interface using controlleradapter synchronizing multiple media streams using a player to synch
3、ronize controllers synchronizing players directly example: playing an mpeg movie in an applet overview of playerapplet initializing the applet controlling the player responding to media events presenting media with the mediaplayer bean presenting rtp media streams listening for rtp format changes pr
4、esenting 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 去管理錄放裝置,med
5、iaplayer 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 , 你可以從 m
6、anager去呼叫 createplayer或 createprocessor 。 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è)間單的
7、步驟去建立player 。當(dāng)這個(gè)method被呼叫,它會(huì)被 blocks 住直到 player完成 realized 。同樣地,manager也提供了 createrealizeprocessor方法來建構(gòu)一個(gè) realized processor。using a processormodel to create a processor processor 只能使用 processor model ,它定義了 processor 輸入與輸出條件,用 processormodel 建立 processor 時(shí),我們需要呼叫manager.createrealizedprocessor metho
8、d(example3-1) 去建立一個(gè) realized processor ,可以產(chǎn)生一個(gè) 44.1khz 16-bit的 ima4編碼立體聲音軌。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),但是
9、可以利用擷取設(shè)備去擷取聲音或影像經(jīng)過處裡編成 ima4的格式。需注意的是, 當(dāng)我們在 porcessormodel 去建立一個(gè) realized processor時(shí),我們將不能夠透過processor objects trackcontrols去詳述 processing options(詳細(xì)資料在 p.71 )。displaying media interface components 一般 player有兩種使用者介面元件: visual component 、control-panel component,有些會(huì)多加 volume controls、download-progress
10、bars。displaying a visual component media 撥放都會(huì)有一個(gè)視覺元件,甚至有些聲音也會(huì)有視覺元件,像是波器或是活動(dòng)字幕。為了顯示視覺元件,我們可以:1. 呼叫 getvisualcomponent 取得元件2. 將原件加入到 applet 或 application視窗你可以透過 visualcomponent 存取所有 player 物件的屬性、像是x、y 軸,而player components的 layout是透過 awt layout 做管理。displaying a control panel component player 通常有一個(gè)控制面板供
11、使用者使用,像撥放、停止、暫停?每一個(gè) player 提供一個(gè)內(nèi)定的 control panel。為了顯示一個(gè)內(nèi)定的control panel ,我們可以:1. 呼叫 getcontrolpanelcomponent取得元件2. 將傳回元件加到展示視窗使用者也可以自訂 gui控制元件,如果將制定元件註冊像controllerlisteners,也可以在 player 更換的時(shí)更新它們。displaying a gain-control componentplayer 可以 implement gaincontrol interface來得到聲音的調(diào)節(jié)裝置。gaincontrol提供一個(gè)可以調(diào)整
12、聲音的methods,像是 setlevel和 setmute。為了顯示 gaincontrolcomponent ,我們可以:1. 從 player 取得 gaincontrol須呼叫 getgaincontrol ,如果傳回 null表示沒有支援 gaincontrol interface 2. 從傳回的 gaincontrol中呼叫 getcontrolcontrol 3. 將傳回的元件加入視窗中須注意: getcontrol不能傳回 player objects gaincontrol,只能呼叫g(shù)etgaincontrol來 access gaincontrol。displaying
13、custom control components許多 player有其他附加的功能,例如亮度、對比,你可以呼叫g(shù)etcontrolsmethod找出 player 支援哪些自訂元件。example 3-2: 使用 getcontrols 找出支援哪些控制.control controls = player.getcontrols(); for (int i = 0; i controls.length; i+) if (controlsi instanceof cachingcontrol) cachingcontrol = (cachingcontrol) controlsi; displ
14、aying a download-progress componentcachingcontrol介面是 player 的一個(gè)特殊的型態(tài),可以記載下載的進(jìn)度,cachingcontrol提供一個(gè)內(nèi)建的 progress-bar ,這個(gè) progress-barr會(huì)在下載進(jìn)行時(shí)自動(dòng)更新,在applet 內(nèi)為了使用這個(gè)功能,我們必須:1. implement controllerlistener interface並且在 controllerupdate中去 listen cachingcontrolevents2. 第一次接收 cachingcontrolevents a. 在事件中呼叫 get
15、cachingcontrol取得 caching control b. 在 cachingcontrol中呼叫 getprogressbar取得內(nèi)定的projress-bar元件c.加入元件至 applet 中3. 在每個(gè)時(shí)間中必須去接收cachingcontrolevent用來 check 是否下載完成,當(dāng) getcontrentprogress傳回來的值等於 getcontentlength ,則移除 progress-bar 如果我們要 implement 自己的 progress-bar component,我們必須隨時(shí)listen cachingcontrolevent和 updat
16、e download progress。setting the playback rateplayer objects rate 決定了 media time 如何改變,它著重於time-base time ;它定義在每一個(gè) base-time time 中 media time 前進(jìn)了多少單位, 例如,當(dāng) rate設(shè)定為 2.0 時(shí)表示 player 撥放時(shí)將會(huì)比 time-based 快兩倍的速度撥放。理論上, player objects rate可以設(shè)定為 any real number ,negative rates表示 player中的 media 是倒轉(zhuǎn)的。對於設(shè)定比例,我們可以
17、呼叫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é)束的地方,我們可以呼叫 setmediatime 可以設(shè)定想要的時(shí)間。frame positioning有些 player允許尋找特定影像 frame,讓你可以容易的設(shè)定media 起始點(diǎn)。為了要設(shè)定 frame 的位置,我們可以呼叫framepo
18、sitioningcontrol來尋找method,當(dāng)你找到 frame,就可以設(shè)定 player media time的值與 frame 開始的值相一致,會(huì)發(fā)出mediatimesetevent。有些 player可以在媒體時(shí)間與框架位址間轉(zhuǎn)換,你可以使用framepositioningcontrol mapframetotime與 maptimetoframe 兩種 methods存取資料。preparing to start有些媒體 player 並不會(huì)立即開始,因?yàn)樵陂_始前要視某些硬體與軟體連接情況而定,例如沒有啟動(dòng)過的player 需要在記憶體中配置媒體資料緩衝區(qū),如果是網(wǎng)路裝置上的
19、媒體,則需要先建立網(wǎng)路連線。realizing and prefetching a playerjmf 流程中的兩個(gè)階段: realizing 與 prefetching。在 player 運(yùn)轉(zhuǎn)開始後可以執(zhí)行 controllerlistener介面去控制??梢院艚?realize讓 player進(jìn)入 realizing狀態(tài)以及開始 realization程序、也可以呼叫 prefetch讓 player進(jìn)入 prefetching程序。 realize 與 prefetch methods是非同步的且會(huì)自動(dòng)回傳的。當(dāng)player 完成運(yùn)作會(huì)丟出realizecompleteevent 或 p
20、refetchcompleteevent表示 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可以呼叫 getstartlatency決定開始需要多少時(shí)間, 將會(huì)傳回一個(gè)最大可能的開始前置時(shí)間, getstartlatenc也可能傳回 latency_unknown 。開始的前置時(shí)間是由 getstart
21、latency依 player objects 目前狀態(tài)的不同而定。starting and stopping the presentationclock 和 player interface定義著 starting和 stopping 的 method。starting the presentationstart mrthod告訴 player 立即開始展示,如果有需要會(huì)執(zhí)行realize 與prefetch運(yùn)作,如果在 started player 中 start被呼叫後,將丟出 startevent。clock 定義了 syncstart method,可以用在 synchronizat
22、ion(同步) 上。在 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 也會(huì)被凍結(jié)住。如果是串流媒體則不能凍結(jié)媒體時(shí)間,媒體時(shí)間會(huì)繼續(xù)前進(jìn)。 當(dāng) stopped 重新開始,時(shí)間會(huì)從暫停的地方繼續(xù)前進(jìn)。如果
23、執(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ò)誤。你可以呼叫 getstoptime 取得 currently scheduled stop time.(目前停止時(shí)間表單) , 如果 clock 沒有 scheduled stop time , g
24、etstoptime 會(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 狀態(tài),如果是在realized 狀態(tài)呼叫 dea
25、llocate 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呼叫 getrate 可以傳回?fù)芊叛b置比例值。getting the media time 呼叫 getmediatime 可以得到媒體時(shí)間,如果不是目
26、前的媒體資料,將會(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和呼叫 gettime,得到 player objects 目前的 time-base time:mycurrenttbtime = player1.
27、gettimebase().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)我們呼叫 getduration ,會(huì)傳回 duration_unknown。但是像現(xiàn)場立即的廣播不知道長度,執(zhí)行g(shù)et duration則會(huì)傳回一個(gè)durati
28、on_unbounded。responding to media eventscontrollerlistener是一個(gè) asynchronous interface(非同步介面 ) ,透過controller objects處理事件產(chǎn)生, 可以去管理像 prefetching的 operations 。implementing the controllerlistener interface為了 implementing the controllerlistener interface,必須:1. 在 class 中 implement controllerlistener interfac
29、e 2. register that class as a listener 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) . el
30、se if (event instanceof othereventtype) . 有些 controllerevents包含額外的狀態(tài)資訊,例如startevent stopevent classes定義一個(gè) method 允許你當(dāng)事件發(fā)生時(shí)可以重新取得媒體時(shí)間。using controlleradapter用 controlleradapter執(zhí)行 controllerlistener介面example 3-4: using controlleradapter.player.addcontrollerlistener(new controlleradapter() public void
31、endofmedia(endofmediaevent e) controller controller = e.getsource(); controller.stop(); controller.setmediatime(new time(0); controller.deallocate(); ) synchronizing multiple media streams 同步複合的串流媒體錄放裝置要結(jié)合timebase ,需要用到 clock 介面的gettimebase 與 settimebasemethods定義, 例如要同步兩個(gè) player , player1要使用 player2
32、 的時(shí)間。player1.settimebase(player2.gettimebase(); 當(dāng) player 同步之後還是可以個(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í)間長度變
33、長player 物件前置時(shí)間變長adding a controller用 addcontroller method加入一個(gè)控制器到 player , 必須回到 realized狀態(tài),否則會(huì)送出notrealizederror,在 player1 還沒有移除控制器時(shí)player2 不能使用。在 player2 呈現(xiàn) player1 控制:player2.addcontroller(player1); controlling managed controllers functionstopped playerstarted playersetmediatimeinvokes setmediatim
34、e on all managed controllers.stops all managed controllers, invokes setmediatime, 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
35、. returns the actual rate that was supported by all controllers and set.startensures all managed controllers are prefetchedand invokes syncstart on each of them, taking into account their start latencies.depends on the playerimplementation. playermight immediately post a startevent.realizethe managi
36、ng playerimmediately posts a realizecompleteevent. to be added, a controller must already be realized.the managing playerimmediately posts a realizecompleteevent. to be added, a controller must already be realized.prefetchinvokes prefetch on all managed controllers. the managing playerimmediately po
37、sts a prefetchcompleteevent, indicating that all managed controllers are prefetched .stopno effect.invokes stop on all managed controllers.deallocateinvokes deallocate on all managed controllers.it is illegal to call deallocate on a startedplayer.setstoptimeinvokes setstoptime on all managed control
38、lers. (playermust be realized .)invokes setstoptime on all managed controllers. (can only be set once on a startedplayer.)syncstartinvokes syncstart on all managed controllers. it is illegal to call syncstarton a startedplayer.closeinvokes close on all managed controllers.it is illegal to call close
39、on a startedplayer.table 3-1: calling control methods on a managing player.removing a controller使用 removecontroller method移除 player 上的控制器,在 player2上釋放 player1 的控制:player2.removecontroller(player1); synchronizing players directly 在一些情況,需要靠自己去管理複合的同步player 物件,可以個(gè)別控制比例、媒體時(shí)間,你必須:1.每一個(gè)同步 player 註冊觸發(fā)事件2.決
40、定哪一個(gè) player 基準(zhǔn)時(shí)間作為其他player 的基準(zhǔn)時(shí)間3.設(shè)定 player的撥放比例,如果沒有支援設(shè)定的比例,會(huì)傳回比例已經(jīng)使用(這裡沒有可以詢問是否支援比例的裝置) 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 停止
41、4.setmediatime 設(shè)定每一個(gè) player 新的時(shí)間5.重新執(zhí)行 prefetching 運(yùn)作6.全部的 player 都在 prefetched狀態(tài),呼叫 syncstartexample: 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),開始 pla
42、yer 3.stop- 當(dāng) playerapplet停止4.destroy- 當(dāng) playerapplet移除,關(guān)閉 player 5. controllerupdate-回應(yīng) player 事件example 3-6: playerapplet.import java.applet.*; import java.awt.*; import .*; import javax.media.*; public class playerapplet extends applet implements controllerlistener player player = null; public vo
43、id init() setlayout(new borderlayout(); string mediafile = getparameter(file); try url mediaurl = new url(getdocumentbase(), mediafile); player = manager.createplayer(mediaurl); player.addcontrollerlistener(this); catch (exception e) system.err.println(got exception +e); public void start() player.s
44、tart(); public void stop() player.stop(); player.deallocate(); public void destroy() player.close(); public synchronized void controllerupdate(controllerevent event) if (event instanceof realizecompleteevent) component comp; if (comp = player.getvisualcomponent() != null) add (center, comp); if (com
45、p = player.getcontrolpanelcomponent() != null) add (south, comp); validate(); initializing the applet1.接收 applet 檔案參數(shù)2.利用檔案參數(shù)確定媒體檔案並且建立url物件3.呼叫 manager.createplayer建立一個(gè) player4. 呼叫 addcontrollerlistener註冊 applet上的控制觸發(fā)事件example 3-7: initializing playerapplet. public void init() setlayout(new borderl
46、ayout(); / 1. get the file parameter. string mediafile = getparameter(file); try / 2. create a url from the file 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. ad
47、d playerapplet as a listener on the new player. player.addcontrollerlistener(this); catch (exception e) system.err.println(got exception +e); controlling the player這個(gè) class 定義當(dāng) applet 包含打開與關(guān)閉,自動(dòng)呼叫start與 stopmethods。example 3-8: starting the player in playerapplet. public void start() player.start();
48、 example 3-9: stopping the player in playerapplet. public void stop() player.stop(); player.deallocate(); 當(dāng) applet 離開 player 釋放資源供其他 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è)事件,丟出 realizecompl
49、eteevent , playerapple顯示 player 的元件example 3-11: responding to media events in playerapplet. public synchronized void controllerupdate(controllerevent event) if (event instanceof realizecompleteevent) component comp; if (comp = player.getvisualcomponent() != null) add (center, comp); if (comp = play
50、er.getcontrolpanelcomponent() != null) add (south, comp); validate(); playerapple 等待 player 丟出 realizecompleteevent ,然後顯示內(nèi)含的視覺元件,與控制面板,呼叫validate 觸發(fā) layout 管理,顯示新加入的元件。presenting media with the mediaplayer bean透過 mediaplayer bean 展示媒體使用 mediaplayer java bean是一個(gè)間單的方法在applet 或 applications上展示串流媒體,也可以在
51、這上面定義自己的元件。它會(huì)再選擇不同的串流媒體時(shí)自動(dòng)產(chǎn)生一個(gè)新的 player ,一個(gè) mediaplayer bean 有幾個(gè)特殊用具可以設(shè)定propertytypedefault descriptionshow control panel booleanyescontrols whether or not the video control panel is visible.loopbooleanyescontrols whether or not the media clip loops continuously.media locationstringn/athe location o
52、f 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.movmedia/sample1.mov show caching controlbooleannocontrols whether or not the download-progress bar is displayed.fixed aspect ratiobooleanyescontrols whe
53、ther 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.開始 mediaplayer mp1.start(); 4.停止錄放裝置 mp1.stop();presenting
溫馨提示
- 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)僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 高端私募股權(quán)投資盡職調(diào)查合同
- 高效新能源汽車電池短路測試儀租賃與數(shù)據(jù)管理服務(wù)協(xié)議
- 呼吸護(hù)理案例分享
- 農(nóng)業(yè)循環(huán)經(jīng)濟(jì)有機(jī)種植大棚租賃與環(huán)保服務(wù)協(xié)議
- 海外留學(xué)生公寓微波爐租賃及使用培訓(xùn)服務(wù)協(xié)議
- 快速國際仲裁案件法律翻譯執(zhí)行協(xié)議
- 國家級文物修復(fù)中心文物保護(hù)專員全職聘用服務(wù)合同
- 食品包裝模具設(shè)計(jì)版權(quán)分成及合作協(xié)議
- 重癥醫(yī)學(xué)100節(jié)公開課體系構(gòu)建
- 招生營銷培訓(xùn)工作總結(jié)
- ICD-9手術(shù)編碼字典庫
- 弘揚(yáng)與傳承中華傳統(tǒng)文化課件(共16張PPT)
- 重慶交通大學(xué)-黃璇-答辯通用PPT模板
- 中國醫(yī)院質(zhì)量安全管理 第4-13部分:醫(yī)療管理住院患者健康教育 T∕CHAS 10-4-13-2020
- DB35_T 88-2022伐區(qū)調(diào)查設(shè)計(jì)技術(shù)規(guī)程
- 《航空專業(yè)英語》課件維修專業(yè)基礎(chǔ)英語R1
- 張溝煤礦打鉆著火事故概述
- 孔子練精神聰明不忘開心方_醫(yī)心方卷二十六引_金匱錄_方劑加減變化匯總
- 歐賓電梯貨梯電氣原理圖
- 政務(wù)服務(wù)顧客意見簿(豎)[2]
- NJB-2綜合監(jiān)測儀說明書
評論
0/150
提交評論