![基于Socket的Android手機(jī)視頻實(shí)時(shí)傳輸_第1頁(yè)](http://file4.renrendoc.com/view/bdb97c696d802e83f59ac698e3e24fa8/bdb97c696d802e83f59ac698e3e24fa81.gif)
![基于Socket的Android手機(jī)視頻實(shí)時(shí)傳輸_第2頁(yè)](http://file4.renrendoc.com/view/bdb97c696d802e83f59ac698e3e24fa8/bdb97c696d802e83f59ac698e3e24fa82.gif)
![基于Socket的Android手機(jī)視頻實(shí)時(shí)傳輸_第3頁(yè)](http://file4.renrendoc.com/view/bdb97c696d802e83f59ac698e3e24fa8/bdb97c696d802e83f59ac698e3e24fa83.gif)
![基于Socket的Android手機(jī)視頻實(shí)時(shí)傳輸_第4頁(yè)](http://file4.renrendoc.com/view/bdb97c696d802e83f59ac698e3e24fa8/bdb97c696d802e83f59ac698e3e24fa84.gif)
![基于Socket的Android手機(jī)視頻實(shí)時(shí)傳輸_第5頁(yè)](http://file4.renrendoc.com/view/bdb97c696d802e83f59ac698e3e24fa8/bdb97c696d802e83f59ac698e3e24fa85.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
基于Scket的Andrid手機(jī)視頻實(shí)時(shí)傳輸肖澤云首先,簡(jiǎn)單介紹一下原理。主要是在手機(jī)客戶端(Andrid)通過(guò)實(shí)現(xiàn)ewCallback接口,在其nPreviewFrame重載函數(shù)里面獲取攝像頭當(dāng)前圖像數(shù)據(jù),然后通過(guò)Scket將圖像數(shù)據(jù)和相關(guān)的用戶名、命令等數(shù)據(jù)傳輸?shù)椒?wù)器程序中。服務(wù)器端(PC端)采用C編寫(xiě),通過(guò)監(jiān)聽(tīng)相應(yīng)的端口,在獲取數(shù)據(jù)后進(jìn)行相應(yīng)的命令解析和圖像數(shù)據(jù)還原,然后將圖像數(shù)據(jù)傳遞至PictureB控件中用于顯示,這樣就實(shí)現(xiàn)了手機(jī)攝像頭的視頻數(shù)據(jù)實(shí)時(shí)傳輸?shù)椒?wù)器上。如果需要將這些視頻進(jìn)行轉(zhuǎn)發(fā),通過(guò)服務(wù)器再將這些數(shù)據(jù)復(fù)制轉(zhuǎn)發(fā)即可。效果如下:對(duì)于Andrid客戶端上主要有幾個(gè)地方需要注意,第一個(gè)就是Scket通信。Scket通信可以通過(guò)Scket類來(lái)實(shí)現(xiàn),直接結(jié)合PrintWriter來(lái)寫(xiě)入命令,如下定義的一個(gè)專門(mén)用于發(fā)送命令的線程類,當(dāng)要連接到服務(wù)器和與服務(wù)器斷開(kāi)時(shí),都需要發(fā)送命令通知服務(wù)器,此外在進(jìn)行其他文字傳輸時(shí)也可以采用該方法,具體代碼如下:/發(fā)送命令線程/classMySendCmmndThreadetendsThread{ privateStringcmmnd; publicMySendCmmndThread(Stringcmmnd){ nd=cmmnd; } publicvidrun{ //實(shí)例化Sckettry{ Scketscket=newScket(serverUrl,serverPrt); PrintWriterut=newPrintWriter(tputStream); ln(cmmnd); ; }catch(UnknwnHstEceptine){ }catch(IEceptine){ } }}如果是采用Scket發(fā)送文件,則可以通過(guò)utputStream將ByteArrayInputStream數(shù)據(jù)流讀入,而文件數(shù)據(jù)流則轉(zhuǎn)換為ByteArrayutputStream。如果需要在前面添加文字,同樣也需要轉(zhuǎn)換為byte,然后寫(xiě)入utputStream。同樣也可以通過(guò)定義一個(gè)線程類發(fā)送文件,如下:/發(fā)送文件線程/classMySendFileThreadetendsThread{ privateStringusername; privateStringipname; privateintprt; privatebytebyteBuffer[]=newbyte[1024]; privateutputStreamutscket; privateByteArrayutputStreammyutputstream; publicMySendFileThread(ByteArrayutputStreammyutputstream,Stringusername,Stringipname,intprt){ putstream=myutputstream; ame=username; e=ipname; =prt;try{ ; }catch(IEceptine){ e.printStackTrace; } } publicvidrun{try{ //將圖像數(shù)據(jù)通過(guò)Scket發(fā)送出去SckettempScket=newScket(ipname,prt);utscket=tputStream;//寫(xiě)入頭部數(shù)據(jù)信息 Stringmsg=.e("PHNEVIDE|"+username+"|","utf-8");byte[]buffer=tes;(buffer);ByteArrayInputStreaminputstream=newByteArrayInputStream(eArray);intamunt;while((amunt=(byteBuffer))!=-1){(byteBuffer,0,amunt);};;;}catch(IEceptine){e.printStackTrace;}}}而獲取攝像頭當(dāng)前圖像的關(guān)鍵在于nPreviewFrame重載函數(shù)里面,該函數(shù)里面有兩個(gè)參數(shù),第一個(gè)參數(shù)為byte[],為攝像頭當(dāng)前圖像數(shù)據(jù),通過(guò)YuvImage可以將該數(shù)據(jù)轉(zhuǎn)換為圖片文件,同時(shí)還可用對(duì)該圖片進(jìn)行壓縮和裁剪,將圖片進(jìn)行壓縮轉(zhuǎn)換后轉(zhuǎn)換為 ByteArrayutputStream數(shù)據(jù),即前面發(fā)送文件線程類中所需的文件數(shù)據(jù),然后采用線程發(fā)送文件,如下代碼: @verride publicvidnPreviewFrame(byte[]data,Cameracamera){ //TDAut-generatedmethdstub //如果沒(méi)有指令傳輸視頻,就先不傳 if(!startSendVide) return; if(tempPreRate<VidePreRate){ tempPreRate; return; } tempPreRate=0; try{ if(data!=null) { YuvImageimage=newYuvImage(data,VideFrmatInde,VideWidth,VideHeight,null); if(image!=null) { ByteArrayutputStreamutstream=newByteArrayutputStream; //在此設(shè)置圖片的尺寸和質(zhì)量 essTeg(newRect(0,0,(int)(VideWidthRatiVideWidth), (int)(VideHeightRatiVideHeight)),VideQuality,utstream); ; //啟用線程將圖像數(shù)據(jù)發(fā)送出去 Threadth=newMySendFileThread(utstream,pUsername,serverUrl,serverPrt); th.start; } } }catch(IEceptine){ e.printStackTrace; } }值得注意的是,在調(diào)試中YuvImage可能找不到,在模擬機(jī)上無(wú)法執(zhí)行該過(guò)程,但是編譯后在真機(jī)中可以通過(guò)。此外,以上傳輸文字字符都是采用UTF編碼,在服務(wù)器端接收時(shí)進(jìn)行解析時(shí)需要采用對(duì)應(yīng)的編碼進(jìn)行解析,否則可能會(huì)出現(xiàn)錯(cuò)誤解析。Andrid客戶端中關(guān)鍵的部分主要就這些,新建一個(gè)Andrid項(xiàng)目(項(xiàng)目名稱為ScketCamera),在main布局中添加一個(gè)SurfaceView和兩個(gè)按鈕,如下圖所示:然后在中添加代碼,具體如下:package;imprt.ByteArrayInputStream;imprt.ByteArrayutputStream;imprt.IEceptin;imprt.utputStream;imprt.PrintWriter;imprt.Scket;imprt.UnknwnHstEceptin;imprt.Activity;imprt.AlertDialg;imprtnt.DialgInterface;imprtnt.Intent;imprtnt.SharedPreferences;imprt;imprtage;imprta;imprta.Size;imprt.Bundle;imprtrenceManager;imprt.Menu;imprt.MenuItem;imprt.SurfaceHlder;imprt.SurfaceView;imprt.View;imprt.WindwManager;imprt.ckListener;imprtt.Buttn;publicclassScketCameraActivityetendsActivityimplementsack,ewCallback{ privateSurfaceViewmSurfaceview=null;//SurfaceView對(duì)象:(視圖組件)視頻顯示privateSurfaceHldermSurfaceHlder=null;//SurfaceHlder對(duì)象:(抽象接口)SurfaceView支持類privateCameramCamera=null;//Camera對(duì)象,相機(jī)預(yù)覽/服務(wù)器地址/privateStringpUsername="ZY";/服務(wù)器地址/privateStringserverUrl="00";/服務(wù)器端口/privateintserverPrt=8888;/視頻刷新間隔/privateintVidePreRate=1;/當(dāng)前視頻序號(hào)/privateinttempPreRate=0;/視頻質(zhì)量/privateintVideQuality=85;/發(fā)送視頻寬度比例/privateflatVideWidthRati=1;/發(fā)送視頻高度比例/privateflatVideHeightRati=1;/發(fā)送視頻寬度/privateintVideWidth=320;/發(fā)送視頻高度/privateintVideHeight=240;/視頻格式索引/privateintVideFrmatInde=0;/是否發(fā)送視頻/privatebleanstartSendVide=false;/是否連接主機(jī)/privatebleancnnectedServer=false;privateButtnmyBtn01,myBtn02;/Calledwhentheactivityisfirstcreated./@verridepublicvidnCreate(BundlesavedInstanceState){ate(savedInstanceState);setCntentView(R.);//禁止屏幕休眠getWindw.setFlags(KEEPSCREENN, KEEPSCREENN);mSurfaceview=(SurfaceView)findViewById(R.id.camerapreview);myBtn01=(Buttn)findViewById(R.id.buttn1);myBtn02=(Buttn)findViewById(R.id.buttn2);//開(kāi)始連接主機(jī)按鈕ClickListener(newnClickListener{ publicvidnClick(Viewv){ //SCnnected(,false); if(cnnectedServer){//停止連接主機(jī),同時(shí)斷開(kāi)傳輸 startSendVide=false; cnnectedServer=false; abled(false); t("開(kāi)始連接"); t("開(kāi)始傳輸"); //斷開(kāi)連接 Threadth=newMySendCmmndThread("PHNEDISCNNECT|"+pUsername+"|"); th.start; } else//連接主機(jī) { //啟用線程發(fā)送命令PHNECNNECT Threadth=newMySendCmmndThread("PHNECNNECT|"+pUsername+"|"); th.start; cnnectedServer=true; abled(true); t("停止連接"); } }});abled(false);ClickListener(newnClickListener{ publicvidnClick(Viewv){ if(startSendVide)//停止傳輸視頻 { startSendVide=false; t("開(kāi)始傳輸"); } else{//開(kāi)始傳輸視頻 startSendVide=true; t("停止傳輸"); } }});}@verridepublicvidnStart//重新啟動(dòng)的時(shí)候{ mSurfaceHlder=lder;//綁定SurfaceView,取得SurfaceHlder對(duì)象 llback(this);//SurfaceHlder加入回調(diào)接口 pe(CETYPEPUSHBUFFERS);//設(shè)置顯示器類型,setType必須設(shè)置 //讀取配置文件SharedPreferencespreParas=faultSharedPreferences;pUsername=ring("Username","ZY");serverUrl=ring("ServerUrl","00"); StringtempStr=ring("ServerPrt","8888"); serverPrt=Int(tempStr);tempStr=ring("VidePreRate","1");VidePreRate=Int(tempStr); tempStr=ring("VideQuality","85");VideQuality=Int(tempStr);tempStr=ring("VideWidthRati","100");VideWidthRati=Int(tempStr);tempStr=ring("VideHeightRati","100");VideHeightRati=Int(tempStr);VideWidthRati=VideWidthRati/100f;VideHeightRati=VideHeightRati/100f;rt;}@verrideprtectedvidnResume{ume;InitCamera;}/初始化攝像頭/privatevidInitCamera{ try{ mCamera=; }catch(Eceptine){e.printStackTrace;}}@verrideprtectedvidnPause{se;try{ if(mCamera!=null){ eviewCallback(null);//!!這個(gè)必須在前,不然退出出錯(cuò) review; se; mCamera=null; }}catch(Eceptine){e.printStackTrace;}} @verride publicvidsurfaceChanged(SurfaceHlderarg0,intarg1,intarg2,intarg3){ //TDAut-generatedmethdstub if(mCamera==null){return;}review;eviewCallback(this);splayrientatin(90);//設(shè)置橫行錄制//獲取攝像頭參數(shù)etersparameters=rameters;Sizesize=eviewSize;VideWidth=;VideHeight=t;VideFrmatInde=eviewFrmat;Preview; } @verride publicvidsurfaceCreated(SurfaceHlderhlder){ //TDAut-generatedmethdstub try{if(mCamera!=null){eviewDisplay(mSurfaceHlder);Preview;}}catch(IEceptine){e.printStackTrace;} } @verride publicvidsurfaceDestryed(SurfaceHlderhlder){ //TDAut-generatedmethdstub if(null!=mCamera){eviewCallback(null);//??!這個(gè)必須在前,不然退出出錯(cuò)review;se;mCamera=null;} } @verride publicvidnPreviewFrame(byte[]data,Cameracamera){ //TDAut-generatedmethdstub //如果沒(méi)有指令傳輸視頻,就先不傳 if(!startSendVide) return; if(tempPreRate<VidePreRate){ tempPreRate; return; } tempPreRate=0; try{ if(data!=null) { YuvImageimage=newYuvImage(data,VideFrmatInde,VideWidth,VideHeight,null); if(image!=null) { ByteArrayutputStreamutstream=newByteArrayutputStream; //在此設(shè)置圖片的尺寸和質(zhì)量 essTeg(newRect(0,0,(int)(VideWidthRatiVideWidth), (int)(VideHeightRatiVideHeight)),VideQuality,utstream); ; //啟用線程將圖像數(shù)據(jù)發(fā)送出去 Threadth=newMySendFileThread(utstream,pUsername,serverUrl,serverPrt); th.start; } } }catch(IEceptine){ e.printStackTrace; } } /創(chuàng)建菜單/publicbleannCreateptinsMenu(Menumenu){ (0,0,0,"系統(tǒng)設(shè)置"); (0,1,1,"關(guān)于程序"); (0,2,2,"退出程序"); returnateptinsMenu(menu);}/菜單選中時(shí)發(fā)生的相應(yīng)事件/publicbleannptinsItemSelected(MenuItemitem){ insItemSelected(item);//獲取菜單 switch(emId)//菜單序號(hào) { case0: //系統(tǒng)設(shè)置 { Intentintent=newIntent(this,); startActivity(intent); } break; case1://關(guān)于程序 { newer(this) .setTitle("關(guān)于本程序") .setMessage("本程序由武漢大學(xué)水利水電學(xué)院肖澤云設(shè)計(jì)、編寫(xiě)。\nEmail:") .setPsitiveButtn ( "我知道了", newckListener { @verride publicvidnClick(DialgInterfacedialg,intwhich) { } } ) .shw; } break; case2://退出程序 { //殺掉線程強(qiáng)制退出 .rcess(.); } break; } returntrue;}/發(fā)送命令線程/classMySendCmmndThreadetendsThread{ privateStringcmmnd; publicMySendCmmndThread(Stringcmmnd){ nd=cmmnd; } publicvidrun{ //實(shí)例化Sckettry{ Scketscket=newScket(serverUrl,serverPrt); PrintWriterut=newPrintWriter(tputStream); ln(cmmnd); ; }catch(UnknwnHstEceptine){ }catch(IEceptine){ } }}/發(fā)送文件線程/classMySendFileThreadetendsThread{ privateStringusername; privateStringipname; privateintprt; privatebytebyteBuffer[]=newbyte[1024]; privateutputStreamutscket; privateByteArrayutputStreammyutputstream; publicMySendFileThread(ByteArrayutputStreammyutputstream,Stringusername,Stringipname,intprt){ putstream=myutputstream; ame=username; e=ipname; =prt;try{ ; }catch(IEceptine){ e.printStackTrace; } } publicvidrun{try{ //將圖像數(shù)據(jù)通過(guò)Scket發(fā)送出去SckettempScket=newScket(ipname,prt);utscket=tputStream;//寫(xiě)入頭部數(shù)據(jù)信息 Stringmsg=.e("PHNEVIDE|"+username+"|","utf-8");byte[]buffer=tes;(buffer);ByteArrayInputStreaminputstream=newByteArrayInputStream(eArray);intamunt;while((amunt=(byteBuffer))!=-1){(byteBuffer,0,amunt);};;;}catch(IEceptine){e.printStackTrace;}}}}此外還有一些參數(shù),在res/ml新建一個(gè)文件,添加服務(wù)器地址、端口、用戶名等參數(shù)設(shè)置,如下:<?mlversin="1.0"encding="utf-8"?><PreferenceScreenmlns:andrid=""><PreferenceCategryandrid:title="服務(wù)器設(shè)置"><EditTetPreferenceandrid:key="Username"andrid:title="用戶名"andrid:summary="用于連接服務(wù)器的用戶名"andrid:defaultValue="ZY"/><EditTetPreferenceandrid:key="ServerUrl"andrid:title="視頻服務(wù)器地址"andrid:summary="保存服務(wù)器地址"andrid:defaultValue="00"/><EditTetPreferenceandrid:key="ServerPrt"andrid:title="服務(wù)器端口"andrid:summary="連接服務(wù)器的端口地址"andrid:defaultValue="8888"/></PreferenceCategry><PreferenceCategryandrid:title="視頻設(shè)置"> <EditTetPreferenceandrid:key="VidePreRate"andrid:title="視頻刷新間隔"andrid:summary="設(shè)置視頻刷新的間隔值,應(yīng)大于等于0,值越大視頻傳輸間隔越長(zhǎng)"andrid:defaultValue="1"/><EditTetPreferenceandrid:key="VideQuality"andrid:title="圖像質(zhì)量"andrid:summary="設(shè)置圖像壓縮的質(zhì)量,值為0~100,值越高越清晰,但同時(shí)數(shù)據(jù)也更大"andrid:defaultValue="85"/><EditTetPreferenceandrid:key="VideWidthRati"andrid:title="圖像寬度縮放比例"andrid:summary="設(shè)置圖像的寬度縮放比例,值為0~100,值越高圖像分辨率越高"andrid:defaultValue="100"/><EditTetPreferenceandrid:key="VideHeightRati"andrid:title="圖像高度縮放比例"andrid:summary="設(shè)置圖像的高度縮放比例,值為0~100,值越高圖像分辨率越高"andrid:defaultValue="100"/></PreferenceCategry></PreferenceScreen>編譯程序,在模擬機(jī)上效果如下:接下來(lái)就是服務(wù)器端接收手機(jī)傳輸?shù)囊曨l數(shù)據(jù),這與一般CS架構(gòu)中服務(wù)器程序類似,主要是監(jiān)聽(tīng)端口,然后解析數(shù)據(jù)?,F(xiàn)新建一個(gè)C應(yīng)用程序項(xiàng)目(項(xiàng)目名稱為“手機(jī)攝像頭”),首先定義一些全局變量,主要包括服務(wù)器地址、端口以及相關(guān)監(jiān)聽(tīng)對(duì)象等,如下:///<summary>///服務(wù)器狀態(tài),如果為false表示服務(wù)器暫停,true表示服務(wù)器開(kāi)啟///</summary>publicblServerStatus=false;///<summary>///服務(wù)器地址///</summary>publicstringServerAddress;///<summary>///服務(wù)器端口///</summary>publicintServerPrt;///<summary>///開(kāi)啟服務(wù)的線程///</summary>privateThreadprcessr;///<summary>///用于TCP監(jiān)聽(tīng)///</summary>privateTcpListenertcpListener;///<summary>///與客戶端連接的套接字接口///</summary>privateScketclientScket;///<summary>///用于處理客戶事件的線程///</summary>privateThreadclientThread;///<summary>///手機(jī)客戶端所有客戶端的套接字接口///</summary>privateHashtablePhneClientSckets=newHashtable;///<summary>///手機(jī)用戶類數(shù)組///</summary>publicArrayListPhneUsersArray=newArrayList;///<summary>///手機(jī)用戶名數(shù)組///</summary>publicArrayListPhneUserNamesArray=newArrayList;///<summary>///圖像數(shù)據(jù)流///</summary>privateArrayListStreamArray;然后定義處理客戶端傳遞數(shù)據(jù)的函數(shù)PrcessClient,主要對(duì)接收數(shù)據(jù)進(jìn)行命令解析。如果是手機(jī)連接的命令("PHNECNNECT"),就在記錄該套接字對(duì)象,同時(shí)在列表中添加該對(duì)象;如果是斷開(kāi)連接的命令("PHNEDISCNNECT"),就移除該對(duì)象;如果是手機(jī)視頻命令("PHNEVIDE"),就分解其包含的圖像數(shù)據(jù),如果存在該用戶對(duì)應(yīng)的視頻窗口,就傳遞該圖像數(shù)據(jù)到這個(gè)視頻窗口中。具體代碼如下:regin處理客戶端傳遞數(shù)據(jù)及處理事情///<summary>///處理客戶端傳遞數(shù)據(jù)及處理事情///</summary>privatevidPrcessClient{Scketclient=clientScket;blkeepalive=true;while(keepalive){(50);Byte[]buffer=null;bltag=false;try{buffer=newByte[1024];//ableintcunt=ve(buffer,);//接收客戶端套接字?jǐn)?shù)據(jù)if(cunt>0)//接收到數(shù)據(jù)tag=true;}catch(Eceptine){keepalive=false;if(cted)nnect(true);;}if(!tag){if(cted)nnect(true);;keepalive=false;}stringclientCmmand="";try{clientCmmand=.8.GetString(buffer);//轉(zhuǎn)換接收的數(shù)據(jù),數(shù)據(jù)來(lái)源于客戶端發(fā)送的消息if(ins("%7C"))//從Andrid客戶端傳遞部分?jǐn)?shù)據(jù)clientCmmand=ce("%7C","|");//替換UTF中字符%7C為|}catch{}//分析客戶端傳遞的命令來(lái)判斷各種操作string[]messages=('|');if(messages!=nullh>0){stringtempStr=messages[0];//第一個(gè)字符串為命令if(tempStr=="PHNECNNECT")//手機(jī)連接服務(wù)器{try{stringtempClientName=messages[1].Trim;e(messages[1]);//刪除之前與該用戶的連接(messages[1],client);//建立與該客戶端的Scket連接UserClasstempUser=newUserClass;ame=tempClientName;Time=;SckettempScket=(Scket)PhneClientSckets[tempClientName];ress=ing;inttempInde=f(tempClientName);if(tempInde>=0){PhneUserNamesArray[tempInde]=tempClientName;PhneUsersArray[tempInde]=tempUser;MemryStreamstream2=(MemryStream)StreamArray[tempInde];if(stream2!=null){;se;}}else//新增加{(tempClientName);(tempUser);(null);}RefreshPhneUsers;}catch(Eceptinecept){}}elseif(tempStr=="PHNEDISCNNECT")//某個(gè)客戶端退出了{(lán)try{stringtempClientName=messages[1];RemvePhneUser(tempClientName);inttempPhneInde=f(tempClientName);if(tempPhneInde>=0){eAt(tempPhneInde);MemryStreammemStream=(MemryStream)StreamArray[tempPhneInde];if(memStream!=null){;se;}eAt(tempPhneInde);}SckettempScket=(Scket)PhneClientSckets[tempClientName];//第1個(gè)為客戶端的ID,找到該套接字if(tempScket!=null){;e(tempClientName);}keepalive=false;}catch(Eceptinecept){}RefreshPhneUsers;}elseif(tempStr=="PHNEVIDE")//接收手機(jī)數(shù)據(jù)流{try{stringtempClientName=messages[1];stringtempFr
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 助產(chǎn)師復(fù)習(xí)試題含答案
- 2025年度智能電網(wǎng)規(guī)劃設(shè)計(jì)合同
- 醫(yī)保協(xié)議合同范本
- 農(nóng)村硅藻泥采購(gòu)合同范本
- 儀器 借用合同范本
- cng纏繞氣瓶合同范本
- 2024年半導(dǎo)體分立器件項(xiàng)目評(píng)估報(bào)告
- 北京辦公裝修合同范本
- 樓地面找平工程合同范本
- 會(huì)議室使用合同范本
- 杭州市淳安縣國(guó)有企業(yè)招聘筆試真題2024
- 2024政府采購(gòu)評(píng)審專家考試真題庫(kù)及答案
- 2025年道路貨運(yùn)駕駛員從業(yè)資格證模擬考試題
- 數(shù)學(xué)-安徽省皖南八校2025屆高三上學(xué)期12月第二次大聯(lián)考試題和答案
- 退市新規(guī)解讀-上海證券交易所、大同證券
- 融資報(bào)告范文模板
- 桃李面包盈利能力探析案例11000字
- GB/Z 30966.71-2024風(fēng)能發(fā)電系統(tǒng)風(fēng)力發(fā)電場(chǎng)監(jiān)控系統(tǒng)通信第71部分:配置描述語(yǔ)言
- 腦梗死的護(hù)理查房
- 2025高考數(shù)學(xué)專項(xiàng)復(fù)習(xí):概率與統(tǒng)計(jì)的綜合應(yīng)用(十八大題型)含答案
- 2024-2030年中國(guó)紫蘇市場(chǎng)深度局勢(shì)分析及未來(lái)5發(fā)展趨勢(shì)報(bào)告
評(píng)論
0/150
提交評(píng)論