版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1 常用類或模塊及重要子函數(shù)描述1.1 反射模塊QTSSReflectorModule這個(gè)模塊包含反射用的各個(gè)角色,以支持反射的建立、設(shè)置、播放和中斷等操作。這個(gè)模塊不是類,只是一個(gè)概念,它的支撐體是一個(gè)文件。1.1.1 DoSetup響應(yīng)RTSP的Setup請(qǐng)求,添加一個(gè)RTPSessionOutput1.1.2 HaveStreamBuffers用來(lái)判斷ReflectorStream是否已經(jīng)向ReflectorSender里發(fā)送RTP/RTCP楨。1.2 ReflectorOutput這是一個(gè)類,其對(duì)象代表一個(gè)反射客戶端,不過(guò)這個(gè)是個(gè)虛基類,在系統(tǒng)中沒(méi)有實(shí)體對(duì)象,其派生類RTPSessio
2、nOutput實(shí)現(xiàn)了大部分功能。1.3 RTPSessionOutput這是一個(gè)類,其對(duì)象代表一個(gè)反射客戶端。它的數(shù)據(jù)來(lái)源于ReflectorSender,然后把數(shù)據(jù)發(fā)給兩個(gè)RTPStream。下面是重要成員描述。1.3.1 QTSS_Error RTPSessionOutput:WritePacket(StrPtrLen* inPacket, void* inStreamCookie, UInt32 inFlags, SInt64 packetLatenessInMSec, SInt64* timeToSendThisPacketAgain, UInt64* packetIDPtr, SIn
3、t64* arrivalTimeMSecPtr).1目的描述/ This writes the packet out to the proper QTSS_RTPStreamObject.這個(gè)write函數(shù)把楨寫入到合適的QTSS_RTPStreamObject/ If this function returns QTSS_WouldBlock, timeToSendThisPacketAgain will如果這個(gè)函數(shù)返回QTSS_WouldBlock,timeToSendThisPacketAgain會(huì)/ be set to # of msec in which the packet can
4、 be sent, or -1 if unknown設(shè)置為隨后應(yīng)該發(fā)送此楨的毫秒時(shí)間,或者不知道為-1.2流程描述獲取事務(wù)狀態(tài),如果不是播放狀態(tài),則返回得到事務(wù)內(nèi)的每個(gè)流,對(duì)于每個(gè)流:如果包是這個(gè)流匹配的:/如果序列號(hào)不對(duì),則返回沒(méi)錯(cuò)誤,不發(fā)送/通過(guò)判斷流屬性里的楨ID大小來(lái)進(jìn)行是否已經(jīng)發(fā)送/如果現(xiàn)在沒(méi)有準(zhǔn)備好發(fā)楨,阻塞返回.面向RTCP,通過(guò)判斷間隔時(shí)間來(lái)實(shí)現(xiàn)生成流發(fā)送用的楨,并生成楨的發(fā)送時(shí)間。這時(shí)如果最老的楨和最新的楨是隨后整個(gè)緩沖時(shí)間(如同now=0情況)時(shí),添加緩沖時(shí)間調(diào)用發(fā)送函數(shù),發(fā)送。如果有阻塞錯(cuò)誤,則設(shè)置重發(fā)時(shí)間;如果發(fā)送成功,則設(shè)置最后兩次發(fā)送時(shí)間間隔,如果間隔大于1000,
5、則調(diào)整為5設(shè)置最后發(fā)送時(shí)間如果是RTP包,則設(shè)置流的最后發(fā)送楨ID屬性如果是RTCP包,則設(shè)置流的最后發(fā)送楨ID屬性和最后發(fā)送時(shí)間屬性如果有錯(cuò)誤,則跳出每個(gè)流循環(huán)返回發(fā)送函數(shù)返回的標(biāo)志。1.4 ReflectorStream這是一個(gè)類,代表一個(gè)SSRC源包括的RTP和RTCP結(jié)合的反射管理用的流。它有兩個(gè)ReflectorSender:fRTPSender,fRTCPSender。這兩個(gè)sender負(fù)責(zé)管理向RTPSessionOutput發(fā)送ReflectorSocket接收到的反射源數(shù)據(jù)。下面是重要成員:1.4.1 BindSockets把ReflectorSocket和Reflector
6、Sender綁定起來(lái),并使ReflectorSocket開(kāi)始讀取反射源數(shù)據(jù)。1.4.2 AddOutput把RTPSessionOutput加入到ReflectorStream的管理數(shù)組內(nèi),為隨后進(jìn)行發(fā)送做準(zhǔn)備。1.5 ReflectorSender這是一個(gè)類,其對(duì)象代表一個(gè)具體的反射RTP流或者RTCP流。它被ReflectorStream管理。它和一個(gè)具體的ReflectorSocket對(duì)應(yīng)。ReflectorSocket用來(lái)接收,ReflectorSender進(jìn)行發(fā)送。其重要成員有:1.5.1 ReflectPackets這個(gè)函數(shù)進(jìn)行反射楨工作,把ReflectorSender里緩存的楨
7、發(fā)送到各個(gè)RTPSessionOutput里。1.5.2 SendPacketsToOutput這個(gè)函數(shù)進(jìn)行具體的向RTPSessionOutput發(fā)送工作。1.6 ReflectorSocket這是一個(gè)類,其對(duì)象對(duì)應(yīng)一個(gè)具體反射源,比如RTP或者RTCP的接收Socket。它和ReflectorSender一一對(duì)應(yīng)。ReflectorSocket接收,ReflectorSender發(fā)送。另外這也是反射工作激發(fā)的載體,這個(gè)類帶有消息處理,可以根據(jù)消息運(yùn)行,并驅(qū)動(dòng)Sender進(jìn)行發(fā)送。其重要成員為:1.6.1 GetIncomingData具體的楨接收函數(shù)。1.6.2 ProcessPacket
8、楨處理函數(shù),把接收到的楨傳送給ReflectorSender,使楨數(shù)據(jù)保存到ReflectorSender的內(nèi)部隊(duì)列里。1.7 RTPStream這是一個(gè)類,其對(duì)象對(duì)應(yīng)一個(gè)具體的向播放客戶端發(fā)送數(shù)據(jù)的流。在反射機(jī)制里,它被RTPSessionOutput管理和驅(qū)動(dòng),在RTPSessionOutput調(diào)用了QTSS_Write以后,執(zhí)行流程進(jìn)入到這個(gè)類的代碼空間里。2 和反射發(fā)送有關(guān)系的時(shí)間參數(shù)理解2.1 OSQueueElem* ReflectorSender:SendPacketsToOutput(ReflectorOutput* theOutput, OSQueueElem* curren
9、tPacket, SInt64 currentTime, SInt64 bucketDelay)后兩個(gè)參數(shù)是當(dāng)前時(shí)間,成組的輸出形成的包延遲時(shí)間。這個(gè)延遲時(shí)間是這樣管理的:代表直播客戶端的輸出被一組一組地管理成二維形式,而不是線性的一維形式。根據(jù)這個(gè)二維形式,一個(gè)組對(duì)應(yīng)一個(gè)延遲時(shí)間,越在后面的組,延遲的時(shí)間越長(zhǎng)。2.2 QTSS_Error RTPSessionOutput:WritePacket(StrPtrLen* inPacket, void* inStreamCookie, UInt32 inFlags, SInt64 packetLatenessInMSec, SInt64* tim
10、eToSendThisPacketAgain, UInt64* packetIDPtr, SInt64* arrivalTimeMSecPtr)packetLatenessInMSec是上個(gè)函數(shù)的bucketDelaytimeToSendThisPacketAgain,再次發(fā)送時(shí)間arrivalTimeMSecPtr到達(dá)時(shí)間指針,在WritePacket函數(shù)里沒(méi)有用。2.3 packetTransmitTime這個(gè)成員是QTSS_PacketStruct結(jié)構(gòu)的成員,這個(gè)結(jié)構(gòu)是RTPStream類里Write函數(shù)所需要的。而packetTransmitTime是楨的實(shí)際發(fā)送時(shí)間,其生成規(guī)則為:總
11、緩沖時(shí)間加上到達(dá)時(shí)間減去延遲時(shí)間。2.4 fLastIntervalMilliSec這個(gè)成員是ReflectorOutput的成員變量。表達(dá)意義為最后一次發(fā)送時(shí)當(dāng)前時(shí)間減去發(fā)送時(shí)間的差值,當(dāng)發(fā)送線程效率高時(shí),這個(gè)時(shí)間是ReflectorSocket的下次運(yùn)行時(shí)間,以使發(fā)送更快進(jìn)行。在形成新值時(shí),如果值大于1000,則修改為5。如果小于5也算52.5 fNextTimeToRun它是ReflectorSender類里的成員。用來(lái)安排調(diào)用ReflectPackets的時(shí)機(jī)。在ReflectPackets函數(shù)里初始化為10秒,如果是RTCP,則為1秒。隨后在SendPacketsToOutput里有
12、協(xié)調(diào)。在 ReflectPackets函數(shù)結(jié)束時(shí),對(duì)這個(gè)值有調(diào)整,調(diào)整的邏輯如下:/不要忘記調(diào)用者想要知道下次運(yùn)行時(shí)間 if (*ioWakeupTime = 0)/如果休息時(shí)間為0 *ioWakeupTime = fNextTimeToRun;/則休息時(shí)間為下次運(yùn)行時(shí)間的間隔 else if (fNextTimeToRun 0) & (*ioWakeupTime fNextTimeToRun)/如果休息時(shí)間大于下次時(shí)間 *ioWakeupTime = fNextTimeToRun;/休息時(shí)間等于下次運(yùn)行時(shí)間 / exit with fNextTimeToRun in real time, n
13、ot relative time./fNextTimeToRun加上實(shí)際時(shí)間,不要用相對(duì)時(shí)間 fNextTimeToRun += currentTime;在ReflectorSender類的ShouldReflectNow函數(shù)里使用,用來(lái)決定是否使ReflectorSender調(diào)用ReflectPackets。在ShouldReflectNow里用當(dāng)前時(shí)間和下次運(yùn)行時(shí)間(fNextTimeToRun)來(lái)生成fSleepTime,在生成時(shí)對(duì)不合理值進(jìn)行了過(guò)濾。在ReflectSocket的Run函數(shù)里,以ShouldReflectNow來(lái)管理fSleepTime。err = theOutput-
14、WritePacket(&thePacket-fPacketPtr, fStream, fWriteFlag, packetLateness, &timeToSendPacket,&thePacket-fStreamCountID,&thePacket-fTimeArrived ); 這個(gè)里面的timeToSendPacket對(duì)fNextTimeToRun有影響。2.6 timeToSendPacketRTPSessionOutput類的WritePacket函數(shù)里用來(lái)保留下次發(fā)送時(shí)間。和suggestedWakeupTime一樣。2.7 suggestedWakeupTime這個(gè)變量是QTS
15、S_PacketStruct結(jié)構(gòu)的成員。這個(gè)變量是RTPStream類的Write函數(shù)在處理發(fā)送時(shí)對(duì)QTSS_PacketStruct結(jié)構(gòu)進(jìn)行處理時(shí)生成。通過(guò)fSession-GetOverbufferWindow()-CheckTransmitTime計(jì)算而來(lái)。3 時(shí)移實(shí)現(xiàn)3.1 原理描述通過(guò)RTSP協(xié)議的Play請(qǐng)求里的Range內(nèi)的信息,區(qū)分正常反射流和時(shí)移流,對(duì)于時(shí)移流,以時(shí)移數(shù)據(jù)源為數(shù)據(jù)來(lái)源;對(duì)于正常反射流,用達(dá)爾文的默認(rèn)緩沖數(shù)據(jù)源為數(shù)據(jù)來(lái)源。時(shí)移數(shù)據(jù)源管理要做到添加、刪除、定位、加載、保存、過(guò)渡和時(shí)移數(shù)據(jù)與達(dá)爾文默認(rèn)緩沖機(jī)制結(jié)合功能。添加指的是把達(dá)爾文默認(rèn)緩沖里刪除的數(shù)據(jù)包加入到時(shí)
16、移數(shù)據(jù)源內(nèi)。刪除指的是把超過(guò)時(shí)移時(shí)限的時(shí)移數(shù)據(jù)從管理范圍內(nèi)刪除。定位指的是把適合range信息時(shí)間的管理單元確定。加載指的是,由于內(nèi)存不可能緩沖過(guò)大數(shù)據(jù),時(shí)移數(shù)據(jù)不可能全部保存到內(nèi)存中,只能實(shí)現(xiàn)小部分在內(nèi)存,大部分在硬盤,在這種情況下,如果需要的時(shí)移數(shù)據(jù)不在內(nèi)存中,而是在硬盤上,對(duì)數(shù)據(jù)有一個(gè)從硬盤加載到內(nèi)存管理單元內(nèi)的一種情況。保存指的是把累積夠一個(gè)時(shí)移單元的時(shí)移數(shù)據(jù)寫入到硬盤的過(guò)程。過(guò)渡指的是在進(jìn)行時(shí)移時(shí),前一個(gè)時(shí)移單元已經(jīng)發(fā)送完了,需要發(fā)送下一個(gè)時(shí)移單元時(shí)的處理過(guò)程。時(shí)移數(shù)據(jù)與達(dá)爾文默認(rèn)緩沖機(jī)制結(jié)合指的是把時(shí)移數(shù)據(jù)放到達(dá)爾文默認(rèn)緩沖機(jī)制里,還會(huì)使這個(gè)機(jī)制正常工作,使時(shí)移的數(shù)據(jù)包能夠發(fā)給客戶
17、端。3.2 數(shù)據(jù)結(jié)構(gòu)及常量定義3.2.1 時(shí)移源組隊(duì)列這個(gè)隊(duì)列按照一個(gè)時(shí)移單元一組形式管理時(shí)移數(shù)據(jù),在有需要時(shí),這個(gè)隊(duì)列里才會(huì)有實(shí)際數(shù)據(jù),平常不占用內(nèi)存。這個(gè)隊(duì)列管理的單元叫時(shí)移源組,這個(gè)時(shí)移源組是一個(gè)類,定義如下:引用的ReflectorOutput源個(gè)數(shù)fRefOutputCount引用的ReflectorOutput源ID隊(duì)列,fRefOutputAry開(kāi)始時(shí)間,絕對(duì)秒數(shù),fAbsoStartSeco結(jié)束時(shí)間,絕對(duì)秒數(shù),fAbsoEndSecoRTP/RTCP楨隊(duì)列,fTSPacketQueue是否已經(jīng)從硬盤上加載過(guò)了fIsLoadFromDisk是否是準(zhǔn)備單元fIsPreparUnit
18、,最后一個(gè)單元長(zhǎng)度還不夠2分鐘,這個(gè)標(biāo)志為真楨隊(duì)列內(nèi)單元個(gè)數(shù)fCountOfPacketQueue這個(gè)隊(duì)列定義在ReflectorSender內(nèi)。3.2.2 時(shí)移發(fā)送引用隊(duì)列RTPSessionOutput的輸出的數(shù)據(jù)來(lái)源由四個(gè)ReflectorSender來(lái)提供,同時(shí)這四個(gè)ReflectorSender的數(shù)據(jù)又是要提供給多個(gè)RTPSessionOutput,為了使每個(gè)RTPSessionOutput都能夠知道在ReflectorSender里的時(shí)移數(shù)據(jù)情況,建立了這個(gè)隊(duì)列。這個(gè)隊(duì)列里的單元類定義如下:ReflectorSender指針,fpSender是否第一次處理過(guò),fHaveFirstD
19、eal當(dāng)前時(shí)移源組單元指針,fpTimeShiftUnit隊(duì)列內(nèi)已經(jīng)發(fā)送楨個(gè)數(shù)fHaveSendCount這個(gè)隊(duì)列定義在RefletorOutput里(ReflectorOutput是RTPSessionOutput的基類)。3.2.3 時(shí)移源組單元長(zhǎng)度2分鐘,120秒。#define TISH_PACKETQUEUEUNIT_TIMELEN 120/by shw 時(shí)移楨隊(duì)列單元時(shí)間長(zhǎng)度2分鐘內(nèi)存占用上,大概大小為120*1.5=180M。3.2.4 時(shí)移源組總長(zhǎng)度30分鐘,1800秒。3.2.5 是否時(shí)移標(biāo)志和時(shí)移開(kāi)始時(shí)間這兩個(gè)變量添加到ReflectorOutput類里。Float64fR
20、angeStartTime;/時(shí)移開(kāi)始時(shí)間by shw for timeshift 200611,默認(rèn)為0Bool16fIsTimeShfit;/是否時(shí)移,通過(guò)對(duì)range內(nèi)的時(shí)間進(jìn)行判斷來(lái)生成,默認(rèn)為假,by shw3.3 功能描述3.3.1 添加在ReflectorSender:RemoveOldPackets函數(shù)里進(jìn)行了把數(shù)據(jù)包從默認(rèn)緩沖區(qū)里刪除的操作。如果ReflectorPacket的fNeededByOutput為假,會(huì)讓RemoveOldPackets刪除ReflectorPacket對(duì)象。在刪除時(shí)把達(dá)爾文緩沖拷貝到時(shí)移緩沖。如果沒(méi)有時(shí)移源組隊(duì)列單元,則新建一個(gè)單元,進(jìn)行添加。新
21、建單元的fIsPreparUnit設(shè)置為真。如果有時(shí)移源組隊(duì)列單元,且最后一個(gè)單元的時(shí)間跨度沒(méi)有2分鐘,可以使用最后單元。如果有且最后單元超過(guò)2分鐘,則新建一個(gè),把上面單元進(jìn)行保存到硬盤處理,上面單元的fIsPreparUnit設(shè)置為假。3.3.2 刪除在ReflectorSender類的ReflectPackets成員函數(shù)里,當(dāng)執(zhí)行過(guò)RemoveOldPackets后,如果ReflectorOutput是時(shí)移的,則先根據(jù)ReflectorOutput里的時(shí)移發(fā)送引用隊(duì)列里和此ReflectorSender對(duì)應(yīng)的單元的fHaveSendCount和fpTimeShiftUnit里指向的隊(duì)列個(gè)數(shù)
22、比較(這個(gè)過(guò)程和過(guò)渡處理結(jié)合),如果相等,則表示這個(gè)時(shí)移源組隊(duì)列單元里的楨發(fā)完了,把fpTimeShiftUnit指向的引用的ReflectorOutput源個(gè)數(shù)fRefOutputCount減1引用的ReflectorOutput源ID隊(duì)列,fRefOutputAry里刪除使用的ReflectorOutput。上面處理完成后,把fRefOutputCount為0的單元里的楨隊(duì)列釋放掉,使其不占用資源。上面處理完成后,把開(kāi)始時(shí)間和結(jié)束時(shí)間都超過(guò)緩沖長(zhǎng)度時(shí)間的時(shí)移楨單元從時(shí)移源組隊(duì)列刪除,如果單元里楨隊(duì)列不為空,釋放掉。但是如果fRefOutputCount不為0,則不釋放。3.3.3 定位通過(guò)
23、判斷開(kāi)始時(shí)間,絕對(duì)秒數(shù),fAbsoStartSeco結(jié)束時(shí)間,絕對(duì)秒數(shù),fAbsoEndSeco和時(shí)移開(kāi)始時(shí)間的關(guān)系來(lái)進(jìn)行。當(dāng)根據(jù)當(dāng)前時(shí)間和range時(shí)間確定一個(gè)時(shí)移發(fā)送時(shí)間基點(diǎn)(timeshift_starttime)后,用這個(gè)timeshift_startime和時(shí)移源組隊(duì)列里單元里的開(kāi)始時(shí)間和結(jié)束時(shí)間比較,找到一個(gè)單元,如果標(biāo)志fIsLoadFromDisk為真,則不進(jìn)行從硬盤加載,如果標(biāo)志fIsLoadFromDisk為假,則進(jìn)行從硬盤加載,并且把標(biāo)志fIsLoadFromDisk設(shè)置為真。3.3.4 加載時(shí)移源組隊(duì)列單元對(duì)應(yīng)的硬盤文件名生成規(guī)則為:生成的源信息_標(biāo)準(zhǔn)基時(shí)間到開(kāi)始點(diǎn)時(shí)間
24、秒數(shù)-標(biāo)準(zhǔn)基時(shí)間結(jié)束點(diǎn)時(shí)間秒數(shù)。開(kāi)始點(diǎn)到結(jié)束點(diǎn)跨度為2分鐘。生成的源信息是一個(gè)源IP地址加指定端口。由于是用ReflectorPacket里的fTimeArrived來(lái)生成開(kāi)始時(shí)間和結(jié)束時(shí)間,所以文件名里表達(dá)的時(shí)間信息可能不是完全2分鐘間隔的,這一點(diǎn)要注意。加載時(shí)先把隊(duì)列長(zhǎng)度加載,接著對(duì)此長(zhǎng)度個(gè)ReflectorPacket對(duì)象進(jìn)行序列化加載。這需要擴(kuò)充ReflectorPacket類,增加讀寫函數(shù)。3.3.5 保存保存時(shí)把隊(duì)列個(gè)數(shù)先寫到文件里,接著是各個(gè)ReflectorPacket對(duì)象。3.3.6 過(guò)渡ReflectorSender類的SendPacketsToOutput函數(shù)里對(duì)某個(gè)隊(duì)列發(fā)送個(gè)數(shù)進(jìn)行累積,累積的個(gè)數(shù)可以通過(guò)ReflectorOutput里的時(shí)移發(fā)送引用隊(duì)列找到此ReflectorSender對(duì)應(yīng)的單元,進(jìn)行加到fHaveSendCount上。在ReflectorSender里執(zhí)行完SendPacketsToOutput循環(huán)后,進(jìn)行處理,如果fHaveSendCount和fpTimeShiftUnit指向的時(shí)移源組隊(duì)列單元里的個(gè)數(shù)相比較,如果占到3/4則對(duì)時(shí)移源組隊(duì)列的下一個(gè)單元進(jìn)行加載,從硬盤里讀取內(nèi)容。如果下一個(gè)單元已經(jīng)加載過(guò)了,則不進(jìn)行加載,如果單元的fIsPr
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度排水設(shè)施保險(xiǎn)合同4篇
- 二零二五版飯店蔬菜肉類產(chǎn)地直供合作合同2篇
- 二零二五年度全新科技項(xiàng)目居間合作費(fèi)合同模板下載2篇
- 二零二五年度內(nèi)蒙古肉牛產(chǎn)業(yè)鏈人才培養(yǎng)與引進(jìn)合同
- 2025年度汽車銷售促銷活動(dòng)執(zhí)行合同模板
- 二零二五年度學(xué)校室內(nèi)外體育設(shè)施一體化采購(gòu)合同范本3篇
- 2025年度民間借貸合同監(jiān)督與委托管理服務(wù)合同4篇
- 2025年度面粉加工企業(yè)二零二五年度綠色有機(jī)面粉采購(gòu)合同4篇
- 2025年度新能源汽車抵押擔(dān)保服務(wù)合同
- 二零二五年度公共綠地養(yǎng)護(hù)管理合同范本3篇
- 廣東省茂名市電白區(qū)2024-2025學(xué)年七年級(jí)上學(xué)期期末質(zhì)量監(jiān)測(cè)生物學(xué)試卷(含答案)
- 2024版?zhèn)€人私有房屋購(gòu)買合同
- 2024爆炸物運(yùn)輸安全保障協(xié)議版B版
- 2025年度軍人軍事秘密保護(hù)保密協(xié)議與信息安全風(fēng)險(xiǎn)評(píng)估合同3篇
- 《食品與食品》課件
- 讀書分享會(huì)《白夜行》
- 光伏工程施工組織設(shè)計(jì)
- DB4101-T 121-2024 類家庭社會(huì)工作服務(wù)規(guī)范
- 化學(xué)纖維的鑒別與測(cè)試方法考核試卷
- 2024-2025學(xué)年全國(guó)中學(xué)生天文知識(shí)競(jìng)賽考試題庫(kù)(含答案)
- 自動(dòng)駕駛汽車道路交通安全性探討研究論文
評(píng)論
0/150
提交評(píng)論