




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、 本文檔為PVPlayer開發(fā)者提供詳細的SDK開發(fā)信息.包括媒體信息的層次結(jié)構(gòu),流程的控制和數(shù)據(jù)流圖,狀態(tài)機,錯誤處理,異步事件的處理,以及用例場景。該文檔還包括在android平臺下調(diào)試的相關(guān)介紹。1.1 PVPlayer SDK 定義 PVPlayer SDK is a set of components and modules that allows synchronized playback of multimedia presentations. A multimedia presentation is defined as a collection of various medi
2、a that are rendered together in some sort of a synchronous manner. This could be in the form of a file encoded into a specificformat (like MP4, 3GPP), a live RTSP streaming session, or a SMIL presentation or any other form. In addition to standard playback features such as repositioning and volume c
3、ontrol, PVPlayer SDK offersmore sophisticated features such as downloading of content and playback of content as it is beingdownloaded. The amount of features contained in a particular PVPlayer SDK depends on therequirements, design decisions, and limitations imposed by the platforms and chosen desi
4、gn.1.2 PVPlayer SDK 使用范圍 PVPlayer SDK includes all components needed to satisfy the definition above but excludes the application (graphical or command-line) which uses the PVPlayer SDK, the operating system or platform that PVPlayer SDK runs on and data sources (e.g. multimedia file, streaming serv
5、er) and sinks (e.g. audio device, display) for the multimedia presentation. The scope of PVPlayer SDK could be further reduced for particular platform with particular feature sets, but this document covers the largest extent of PVPlayer SDK. PVPlayer SDK is composed of and utilizes other components
6、from PacketVideo (e.g. OSCL, PVMF nodes) so certain details might be referred to another document.2. 高層次設(shè)計 (HLD)2.1 簡介和局限性 PVPlayer SDK包含所有必要的特點來支持這個要求先前的部分。這個特性的要求是被設(shè)計來處理的很全面的應(yīng)用程序。這個模塊結(jié)構(gòu)和設(shè)計的擴展提供了便利的機制,不過由于opencore的復(fù)雜性,相對起MPLAYER,VLC等多媒體播放器來說,擴展格式相對麻煩點。而且PVPlayer在新版本和升級PVPlayer的SDK里,可能會有不兼容的BUG。2.2
7、開發(fā)環(huán)境和工具 PVPlayer SDK是c+語言實現(xiàn)的,所以它需要ANSI C + +開發(fā)工具支持平臺。不過對于開發(fā)者不要求每個特征定義為c+標(biāo)準(zhǔn)。例如,RTTI異常處理。然而,C + +編譯環(huán)境是必需的,在Android環(huán)境中用的是G+ 3.3.3編譯,PVPlayer SDK也需要另一種類型的接口(例如。C,Java),PVPlayer SDK提供了一種適配接口,但內(nèi)部部件還需在c+環(huán)境下編譯. PVPlayer SDK源代碼是基于PacketVideo的操作系統(tǒng)(OSCL)和PacketVideo多媒體框架(PVMF)。PVPlayer SDK依賴OSCL來提供系統(tǒng)的功能,是便攜式在平
8、臺上(例如,它作為一個操作系統(tǒng)的抽象層提供了平臺的API來了PVPlayer SDK)。PVMF框架是確定多媒體架構(gòu)包PVPlayer SDK。OSCL需要一個平臺和服務(wù)的相對完整操作系統(tǒng),如動態(tài)記憶、管理、多線程、文件I / O、網(wǎng)絡(luò)、域名服務(wù),時鐘信息。2.3 結(jié)構(gòu)和組件PVPlayer SDK是一個標(biāo)準(zhǔn)架構(gòu),結(jié)構(gòu)靈活的、可擴展的,輕巧的多媒體播放框架。PVPlayer引擎是播放器的核心。引擎使用PVMF節(jié)點和節(jié)點圖表數(shù)據(jù)處理和內(nèi)部注冊時,節(jié)點的圖形結(jié)構(gòu)。下圖是PVPlayer SDK簡單框架圖。 、 圖一 PVPlayer SDK軟件框架圖2.4 控制流回放控制PVPlayer SDK是
9、user(這里一般是開發(fā)者)的PVPlayer,典型的LINUX應(yīng)用程序,通過BINDLE一個服務(wù)給JAVA層調(diào)用。PVPlayer SDK api提供了如調(diào)用初使化、setdatasourse、prepare、開始(停止)多媒體播放等等。在PVPlayer SDK、控制流量通常是自上而下的。這個應(yīng)用程序請求被PVPlayer收到后經(jīng)引擎適配。這個PVPlayer引擎根據(jù)先前注冊的節(jié)點并通過相應(yīng)的標(biāo)識控制PVMF節(jié)點數(shù)據(jù)。有一些控制數(shù)據(jù)連接節(jié)點之間,但主要的控制數(shù)據(jù)PVPlayer引擎和PVMF節(jié)點之間。2.5 數(shù)據(jù)流 PVPlayer SDK多媒體數(shù)據(jù)流過程的通過一個或更多的PVMF節(jié)點連接
10、在一起。PVMF節(jié)點類型使用和結(jié)構(gòu)將取決于回放文件源參數(shù)的類型進行相應(yīng)播放操作。文件類型主要是提取文件元數(shù)據(jù)的具體參數(shù),由PVPlayer引擎或PVMF提取節(jié)點PVPlayer SDK通過適當(dāng)?shù)慕涌诜祷亟o用戶。3PVPlayer 引擎設(shè)計PVPlayer引擎是PVPlayer SDK的心臟。它接收和處理所有PVPlayer SDK從用戶和管理PVMF播放多媒體所需的組成及相關(guān)業(yè)務(wù)的請求。其任務(wù)應(yīng)用和簡化高級控制。這個PVPlayer引擎也偵測,處理,和過濾事件和信息生成多媒體播放操作控制。3.1 PVPlayerInterface APIPVPlayer用戶界面PVPlayer引擎通過PVPl
11、ayerInterface接口類來確定是否有一種適配接口用戶和PVPlayer引擎。PVPlayerInterface是一種OSCL-based接口和遵循公共接口,除了多媒體播放特定api,PVPlayerInterface提供方法檢索SDK信息、操縱和取消的命令。并描述PVPlayerInterface API,指的是一種PVPlayerInterface API文檔生成的支持的標(biāo)記。3.2 異步操作The PVPlayer engine processes most commands initiated by API calls asynchronously. There are some
12、 commands that are processed synchronously and they can be differentiated by the return value. Synchronous commands return a PVMF status code which tells the user whether the command succeeded or not and if it did fail, what the error was. All asynchronous commands return a command ID. For the user
13、to be notified of asynchronous command completion, the user must specify a callback handler when instantiating PVPlayer engine via the factory function. When the asynchronous command completes, PVPlayer engine calls the callback handler with the command ID for the command, command status, and any ot
14、her relevant data. To process the command asynchronously, the PVPlayer engine is implemented as an active object, which gets to run according to the active scheduler running in the thread. The PVPlayer engine expects scheduler to be available when instantiated and the engine itself will not directly
15、 create a thread or scheduler.With asynchronous commands, there is a possibility of commands not completing in expected time. To deal with this issue, PVPlayer engine provides standard PV SDK APIs to cancel a specific or all issued commands. The user of PVPlayer SDK can use these APIs to cancel any
16、request that did not complete in time or are not needed due to changing circumstances. In PVPlayer engine, it might have to deal with lower level components that behave asynchronously. To prevent an unresponsive lower level component from blocking PVPlayer engine operation, PVPlayer engine has timeo
17、ut handling for any asynchronous commands that it issues. When timeout does occur, the asynchronous command is canceled and is handled appropriately (e.g. command failure, error event). 事件處理 The PVPlayer engine notifies the user of errors and other information not related to API calls as unsolicited
18、 events. The notification is handled by making a callback on handlers specified by the user of PVPlayer engine. There are two callback handlers, one for error events and one for informational events, that must be specified by the user when instantiating PVPlayer engine via the factory function.3.4 引
19、擎框架下面的圖表說明了應(yīng)用程序使用PVPlayer引擎的接口PVPlayerInterface時直接適配。PVPlayerFactory處理實例化組件和destory的PVPlayerEngine對象。所有PVPlayer引擎的api提供PVPlayerInterface。PVPlayerEngine采用三種回收處理過的應(yīng)用,PVCommandStatusObserver,PVInformationalObserver,PVErrorEventObserver,通知申請上述指令完成同步誤差和信息的事件。圖二 類圖3.5 狀態(tài)機圖三 狀態(tài)機PVPlayer 引擎實例化后狀態(tài)為IDLE,在IDLE
20、狀態(tài)時,可以調(diào)用AddDataSource() 來指定需要回放的多媒體數(shù)據(jù),然后調(diào)用 init()初始化數(shù)據(jù)并且狀態(tài)轉(zhuǎn)為INITIALIZED,在進入INITIALIZED狀態(tài)的時候,用戶可以獲取媒體的tracks和metadata,并且可以調(diào)用 AddDataSink()去指定具體的data sinks 去回放.在所有的data sinks添加后,用戶調(diào)用Prepare(),使引擎建立相關(guān)的PVMF節(jié)點,并為數(shù)據(jù)流指定多媒體播放的數(shù)據(jù)源和數(shù)據(jù)接收器,建立需要播放的數(shù)據(jù)流隊列.用戶在PREPARED狀態(tài)時調(diào)用Start()進入到STARTED狀態(tài),啟動多媒體播放.在調(diào)用Stop()后回到INI
21、TIALIZED狀態(tài)并且刷新多媒體數(shù)據(jù)流.在STARTED狀態(tài)時,用戶也可以調(diào)用 Pause(). Stop().調(diào)用Stop()后停止回放,刷新所有數(shù)據(jù)流,并且使引擎回到初始化狀態(tài).調(diào)用Pause(),會停止回放,但不會刷新數(shù)據(jù)流,而且可以調(diào)用Resume()繼續(xù)從暫停的地方播放.在PAUSED狀態(tài)時可以調(diào)用Stop()使引擎回到初始化狀態(tài).調(diào)用Stop()回到INITIALIZED狀態(tài)后,數(shù)據(jù)隊列可以通過調(diào)用AddDataSink()和RemoveDataSink()來添加和刪除.在調(diào)用Prepare()Start()重新回放,但是關(guān)閉回到IDLE狀態(tài)時,或需要重新打開另一個媒體文件時,需
22、要調(diào)用Reset().因為在IDLE狀態(tài)調(diào)用RemoveDataSink()不能刪除所有數(shù)據(jù)隊列.調(diào)用Reset()后,又回到起始狀態(tài),流程如上一樣.如果用戶想退出PVPlayer,也可以調(diào)用Reset(),在PREPARED, STARTED,PAUSED狀態(tài)時都可以調(diào)用該函數(shù).如果PVPlayer引擎收到錯誤信息或從其它組件傳來錯誤事件后,引擎會發(fā)送ERROR狀態(tài)并且嘗試恢復(fù).如果這個錯誤是不可恢復(fù)的,剛引擎會清空所有狀態(tài)和數(shù)據(jù)列回到IDLE狀態(tài).此時用戶應(yīng)該等待PVMFInfoErrorHandlingComplete informational event.以上是這個狀態(tài)機的簡要描述,
23、具體參考OPENCORE源碼. PVPlayer的接口是標(biāo)準(zhǔn)的OSCL-based 接口,引擎的API都是通過這些接口來調(diào)用相對應(yīng)的操作,但是像一些OSCL類型的組件和PVMF類型的組件里需要注意有些不同.4.2 適配層f the interface to PVPlayer SDK needs to be different than the OSCL-based interface, another interface layer needs to be created to “wrap” around the OSCL-based interface. This “wrapper” is
24、referred to as anadaptation layer for OSCL-based PVPlayer engine interface.One possible reason to create an adaptation layer would be to encapsulate the OSCL interface with types and components of a particular platform or operating system (e.g. ANSI C interface, Symbian interface).Another reason wou
25、ld be that the adaptation layer modifies the interface and behavior of PVPlayer SDKto match the expectation of the application (e.g. legacy interface). The adaptation layer could also combine PVPlayer SDK with another SDK or component to provide a unified interface to the application.The block diagr
26、ams below illustrate how the adaptation layer relates to PVPlayer Engine and its OSCL-based interface. The diagram on the right shows the adaptation layer adding more functionality by including another engine.PvPlayer Adapation LayerpvPlayer OSCL Interface pvPlayer Engine pvPlayer+ Adapation LayerAn
27、other EnginepvPlayer OSCL InterfacepvPlayer Engine圖四 適配層4.3 多線程支持默認的OSCL-based 接口不支持多線程,所以在使用多線程的時候,適配層需要提供一個功能來實現(xiàn).一種方法是使用OSCL proxy 接口組件來提供多線程的支持.另一種方法是添加一個另外的Platform Threading Support.兩種方法的框圖如下.pvPlayer Adapation LayerpvPlayer OSCL InterfaceOSCL Proxy FrameworkPvPlayer EnginePlatform Threading Su
28、pportpvPlayer Adapation LayerpvPlayer OSCL InterfacepvPlayer EnginePlatform Threading Support 圖五 多線程支持4.4 媒體數(shù)據(jù)輸出到數(shù)據(jù)池 PVPlayer引擎利用PVMF節(jié)點指定數(shù)據(jù)輸出的數(shù)據(jù)池,但大部份使用的時候,同步數(shù)據(jù)通過適合的渲染后再送到媒體輸出設(shè)備.在輸出視頻流的時候,需要一個顯示設(shè)備,音頻流需要一個PCM 音頻輸出設(shè)備.媒體輸出設(shè)備是一個具體的特定平臺.輸出設(shè)備的創(chuàng)建有兩個方法可以實現(xiàn):(1)在PVMF節(jié)點里封裝一個media device,引擎可以直接調(diào)用,這種方法可以最大限度的減少P
29、VPlayer和接口層的代碼,但是需要創(chuàng)建一個新的PVMF節(jié)點.Platform-specific Output Media PVMF Node Output Media Device Interface pvPlayer Engine pvPlayer EnginePV Media I/O to OutputMedia Device InterfaceWrapperPV Media I/O PVMF NodeOutput MediaDeviceInterface(2)直接調(diào)用PV media I/O接口,在I/O接口中調(diào)用輸出設(shè)備.這種方法相對于第一種來說并不需要創(chuàng)建新的PVMF節(jié)點,復(fù)雜性
30、也小.但增加了代碼的層次和和代碼量.下圖是兩種方法的引擎.更多PV I/O接口的信息,參考PV MEDIA I/O datasheet. 圖 6 媒體輸出的兩種方法5. PVMF Node本節(jié)給出PVMF簡短的描述節(jié)點,由PVPlayer引擎使用。只有PVMF節(jié)點OSCL和PVMF基于組件都包括在內(nèi)。沒有特定于平臺PVMF節(jié)點覆蓋。欲了解更多有關(guān)特定節(jié)點(1,低于或平臺特定一)的詳細信息,請參閱該節(jié)點文件。5.1 數(shù)據(jù)池節(jié)點(Data Sink Nodes)數(shù)據(jù)池節(jié)點是PVPlayer的引擎中輸出數(shù)據(jù)前最后的數(shù)據(jù)終點.5.1.1 PVMFMediaOutputNodePVMFMediaOutp
31、utNode is a wrapper node around the PV media I/O interface to output data. The node translates node commands and incoming media data to appropriate media I/O actions and handles media I/O events. Using PVMFMediaOutputNode allows encapsulation of platform and device specific outputinterface with PV m
32、edia I/O interface.5.1.2 PVMFFileOutputNodePVMFFileOutputNode accesses the file directly using OSCL file I/O to write media data coming in via the port. The node has some capability to understand format type and to write out data appropriately for the specified format type (AMR file header for AMR I
33、ETF format).在OPENCORE官方文檔中對時間戳相關(guān)介紹,有些難懂,為了更利于理解,我在網(wǎng)上找了一篇簡單介紹實時視頻的時間戳和視頻流暢的關(guān)系的文章,可以更好的理解.最后再附上原翻譯媒體內(nèi)容在播放時,最令人頭痛的就是音視頻不同步。從技術(shù)上來說,解決音視頻同步問題的最佳方案就是時間戳:首先選擇一個參考時鐘(要求參考時鐘上的時間是線性遞增的);生成數(shù)據(jù)流時依據(jù)參考時鐘上的時間給每個數(shù)據(jù)塊都打上時間戳(一般包括開始時間和結(jié)束時間);在播放時,讀取數(shù)據(jù)塊上的時間戳,同時參考當(dāng)前參考時鐘上的時間來安排播放(如果數(shù)據(jù)塊的開始時間大于當(dāng)前參考時鐘上的時間,則不急于播放該數(shù)據(jù)塊,直到參考時鐘達到數(shù)據(jù)
34、塊的開始時間;如果數(shù)據(jù)塊的開始時間小于當(dāng)前參考時鐘上的時間,則“盡快”播放這塊數(shù)據(jù)或者索性將這塊數(shù)據(jù)“丟棄”,以使播放進度追上參考時鐘)??梢姡苊庖粢曨l不同步現(xiàn)象有兩個關(guān)鍵一是在生成數(shù)據(jù)流時要打上正確的時間戳。如果數(shù)據(jù)塊上打的時間戳本身就有問題,那么播放時再怎么調(diào)整也于事無補。如圖,視頻流內(nèi)容是從0s開始的,假設(shè)10s時有人開始說話,要求配上音頻流,那么音頻流的起始時間應(yīng)該是10s,如果時間戳從0s或其它時間開始打,則這個混合的音視頻流在時間同步上本身就出了問題。打時間戳?xí)r,視頻流和音頻流都是參考參考時鐘的時間,而數(shù)據(jù)流之間不會發(fā)生參考關(guān)系;也就是說,視頻流和音頻流是通過一個中立的第三方(也
35、就是參考時鐘)來實現(xiàn)同步的。第二個關(guān)鍵的地方,就是在播放時基于時間戳對數(shù)據(jù)流的控制,也就是對數(shù)據(jù)塊早到或晚到采取不同的處理方法。圖中,參考時鐘時間在0-10s內(nèi)播放視頻流內(nèi)容過程中,即使收到了音頻流數(shù)據(jù)塊也不能立即播放它,而必須等到參考時鐘的時間達到10s 之后才可以,否則就會引起音視頻不同步問題。基于時間戳的播放過程中,僅僅對早到的或晚到的數(shù)據(jù)塊進行等待或快速處理,有時候是不夠的。如果想要更加主動并且有效地調(diào)節(jié)播放性能,需要引入一個反饋機制,也就是要將當(dāng)前數(shù)據(jù)流速度太快或太慢的狀態(tài)反饋給“源”,讓源去放慢或加快數(shù)據(jù)流的速度。熟悉DirectShow 的讀者一定知道,DirectShow中的質(zhì)
36、量控制(Quality Control)就是這么一個反饋機制。DirectShow對于音視頻同步的解決方案是相當(dāng)出色的。但WMF SDK在播放時只負責(zé)將ASF數(shù)據(jù)流讀出并解碼,而并不負責(zé)音視頻內(nèi)容的最終呈現(xiàn),所以它也缺少這樣的一個反饋機制。為了更好地理解基于時間戳的音視頻同步方案,下面舉一個生活中的例子。假設(shè)你和你的一個朋友約好了今天18:00 在滬上廣場見面,然后一起吃飯,再去打游戲。實際上,這個18:00就是你和你朋友保持同步的一個時間點。結(jié)果你17:50就到了滬上廣場,那么你必須等你的朋友。10分鐘過后,你的朋友還沒有到,這時他打來電話說有事耽擱了,要晚一點才能到。你沒辦法,因為你已經(jīng)在
37、旁邊的餐廳預(yù)訂了位置,如果不馬上趕過去,預(yù)訂就會被取消,于是你告訴你的朋友直接到餐廳碰頭吧,要他加快點。于是在餐廳將來的某個時間點就成為你和你朋友的又一個同步點。雖然具體時間不定(要看你朋友趕過來的速度),但這樣努力的方向是對的,你和你朋友肯定能在餐廳見到面。結(jié)果呢?你朋友終于在18:30趕過來了,你們最終“同步”了。吃完飯19:30了,你臨時有事要處理一下,于是跟你朋友再約好了20:00在附近的一家游戲廳碰頭。你們又不同步了,但在游戲廳將來的某個時間點你們還是會再次同步的。悟出什么道理了沒有?其實,同步是一個動態(tài)的過程,是一個有人等待、有人追趕的過程。同步只是暫時的,而不同步才是常態(tài)。人們總
38、是在同步的水平線上振蕩波動,但不會偏離這條基線太遠。這部份有人已經(jīng)翻譯過了,我就直接拿過來了,如果譯者有意見,麻煩通知我,我會立即刪除的6.AndroidOpenCore的A/V同步機制PVPlayer 在渲染 (render) 所有多媒體數(shù)據(jù)是都需要保持一個暫時的同步,也就是通常所說的 A/V 同步。為了達到同步,需要如下一些信息:媒體回放的時鐘,媒體數(shù)據(jù)的時間戳,從 Sink 中獲取的時間信息(比如從音頻設(shè)備設(shè)定的特定的采樣率來獲取的播放速率)。圖 1 描述了與同步相關(guān)的 PVPlayer 模塊之間的關(guān)系。圖1 與同步相關(guān)的模塊及關(guān)系一、媒體時鐘 PVMFMediaClock ,媒體時鐘主
39、要負責(zé)維持一個時間的引用,從而保持媒體回放的節(jié)奏,獲取和實現(xiàn)媒體播放的同步。 1 、媒體時鐘的特點 媒體時鐘可以作為一個時間源提供給多媒體,它本身可能來自于系統(tǒng)時鐘或其他時間源(比如音頻設(shè)備時鐘)。它可以給多媒體提供一個時間基準(zhǔn),同時來維護該時間基準(zhǔn)。 媒體時鐘可以把自己作為一個觀察者,來通知對象時鐘狀態(tài)的改變。以下接口實現(xiàn)了其作為觀察者的角色: PVMFMediaClockObserver :用來通知時鐘基值,時鐘計數(shù)的更新,時鐘的調(diào)整; PVMFMediaClockStateObserver :用來通知時鐘狀態(tài)的改變; PVMFMediaClockNotificationsObs :用來獲
40、取回調(diào)通知。 1.3NPT 映射媒體時鐘是一個單調(diào)遞增的時鐘,而媒體在播放時卻可能需要 Seek 到任意位置,為了控制媒體的播放,使其正確 Render ,媒體時鐘需要在媒體時鐘時間和 NPT 之間維護一個 NPT ( normal play time )映射,任意對媒體播放位置的改變將會通知進行一次映射。圖 2 描述了媒體時鐘和 NPT 之間的映射。 圖中的箭頭和帶顏色的區(qū)段描述了 Seek 的次序以及每次播放的時間段, Media clock 和 NPT 之間相同的顏色區(qū)間即對應(yīng)了相應(yīng)的映射。由此可以看出其映射公式為(以第二段為例): NPT ( media_time - 5550 + 3
41、80) 。 1.4 時鐘的回調(diào) 在媒體時鐘上設(shè)置回調(diào)是組件采取動作的基礎(chǔ),這些回調(diào)可以減少在時鐘發(fā)生 改變時,組件自己需要設(shè)置他們的時鐘。媒體時鐘采用輸入特定時間窗口來取 代絕對時間,這樣可以使得處于競爭狀態(tài)的任務(wù)或線程可以盡可能早的得到響 應(yīng)。 1.5 延遲處理 當(dāng)集成了多個不同媒體流的 Sinks 來輸出一個多媒體時,每個 Sink 都可能會有 不同程度的延遲,為了彌補不同媒體流之間的延遲從而同步播放,就需要進行 延遲處理。每個 Sink 都向媒體時鐘注冊自己的延遲,最后由媒體時鐘來調(diào)整最 終的調(diào)度的延遲。 1.6 NPT 時鐘轉(zhuǎn)換 當(dāng)一個新的 NPT 開始時,用戶可以給媒體時間設(shè)置一個絕對時間。用戶還可以 任意調(diào)整 NPT 的方向(比如向前,向后)。 二、時間戳 為了及時準(zhǔn)確地輸出媒體數(shù)據(jù),就不得不考慮媒體數(shù)據(jù)中包含的時間戳信
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 錢江大橋橋墩施工方案
- 2025年時代青春面試試題及答案
- 2025年煤礦安全規(guī)程試題及答案
- 公路干線物流自動駕駛行業(yè)研究報告
- 2025年遇到好難的面試題及答案
- 低溫低濁水處理成功案例
- cc結(jié)構(gòu)域蛋白互作
- 4年級上冊語文19課
- ansys結(jié)構(gòu)計算軸向加速度
- 樹木移植的施工方案
- 做一個專業(yè)的班主任課件
- 電氣接線工藝培訓(xùn)
- 第7課《誰是最可愛的人》 統(tǒng)編版語文七年級下冊
- 2020北京各區(qū)中考一模分類匯編-10幾何壓軸(答案含解析)
- 盟史簡介12.10.18課件
- 供應(yīng)鏈的三道防線:需求預(yù)測、庫存計劃、供應(yīng)鏈執(zhí)行
- 雙新背景下小學(xué)英語單元整體作業(yè)設(shè)計與優(yōu)化探索 論文
- 全過程造價咨詢服務(wù)實施方案
- 大學(xué)生勞動教育教程全套PPT完整教學(xué)課件
- 實用參考從合規(guī)到績效:宋志平談央企學(xué)習(xí)型董事會建設(shè)
- GB/T 985.1-2008氣焊、焊條電弧焊、氣體保護焊和高能束焊的推薦坡口
評論
0/150
提交評論