![基于wince的網(wǎng)絡(luò)音視頻通信方案解析_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/12/5aeaee9f-5eec-4901-9c0e-ffb696637326/5aeaee9f-5eec-4901-9c0e-ffb6966373261.gif)
![基于wince的網(wǎng)絡(luò)音視頻通信方案解析_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/12/5aeaee9f-5eec-4901-9c0e-ffb696637326/5aeaee9f-5eec-4901-9c0e-ffb6966373262.gif)
![基于wince的網(wǎng)絡(luò)音視頻通信方案解析_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/12/5aeaee9f-5eec-4901-9c0e-ffb696637326/5aeaee9f-5eec-4901-9c0e-ffb6966373263.gif)
![基于wince的網(wǎng)絡(luò)音視頻通信方案解析_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/12/5aeaee9f-5eec-4901-9c0e-ffb696637326/5aeaee9f-5eec-4901-9c0e-ffb6966373264.gif)
![基于wince的網(wǎng)絡(luò)音視頻通信方案解析_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/12/5aeaee9f-5eec-4901-9c0e-ffb696637326/5aeaee9f-5eec-4901-9c0e-ffb6966373265.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、基于wince的網(wǎng)絡(luò)音視頻通信方案解析wince網(wǎng)絡(luò)音視頻通訊下位機為mini2440,其操作系統(tǒng)是WINCE5.0,需要在下位機上插入USB攝像頭(中星微301,驅(qū)動為15分鐘限制版),以及插入麥克風(fēng)耳機;上位機為普通的PC,需要插入麥克風(fēng)耳機;上位機和下位機的開發(fā)環(huán)境為VisualStudio2005。接下來,說說這個東東的功能,和工作原理:網(wǎng)絡(luò)視頻傳輸,首先把mini2440與USB攝像頭連接在一起,通過USB攝像頭捕捉圖像(320x240,15fps),然后通過UDP協(xié)議發(fā)送至PC端,在PC屏幕上以15fpswince網(wǎng)絡(luò)音視頻通訊下位機為 mini2440 ,其操作系統(tǒng)是WINCE
2、5.0,需要在下位機上插入USB攝像頭(中星微301,驅(qū)動為15分鐘限制版),以及插入麥克風(fēng)耳機;上位機為普通的PC,需要插入麥克風(fēng)耳機;上位機和下位機的開發(fā)環(huán)境為Visual Studio 2005。接下來,說說這個東東的功能,和工作原理:網(wǎng)絡(luò)視頻傳輸,首先把mini2440與USB攝像頭連接在一起,通過USB攝像頭捕捉圖像(320 x 240,15fps),然后通過UDP協(xié)議發(fā)送至PC端,在PC屏幕上以15fps的速度顯示。網(wǎng)絡(luò)音頻傳輸,首先在mini2440和PC上都插入麥克風(fēng)耳機,兩者都同時錄音,并以G.726編碼,然后把壓縮包通過UDP協(xié)議發(fā)送至對方,而在錄音的同時,也對來自對方的壓
3、縮包用G.726解碼,然后再在耳機播放音頻。最后,說說這個版本相對于以前的改進:把以前的RTP改為UDP,實踐證明,在這個系統(tǒng)中,用UDP的效率會比RTP好,畢竟不需要用到RTP的流量監(jiān)測等高級功能,僅僅能通信就行了;以前版本基于100M網(wǎng)卡,現(xiàn)在支持10M網(wǎng)卡了,在100M網(wǎng)卡的機器上,可以直接把JPEG圖片發(fā)過去,但是,在10M的網(wǎng)卡是,每次數(shù)據(jù)包最大為1440比特,因此要兼容10M網(wǎng)卡,就需要把圖像分割成多個1440大小的數(shù)據(jù)包,分別發(fā)送了。網(wǎng)絡(luò)音視頻通信下面說說關(guān)鍵的源代碼:以下是WINCE部分的代碼#pragma once#include “winsock2.h”/RTP支持#inc
4、lude “。.UDPUDP.h”/音頻支持#include “WaveIn.h”#include “WaveOut.h”/G726支持#include “g726.h”/攝像頭支持#include “。videozc030xlib.h”#define Video_Width 320 /視頻寬度#define Video_Height 240 /視頻長度#define AudioData_Size 960 /每塊音頻數(shù)據(jù)包的大小#define Compr_AudioData_Size 120 /壓縮后音頻塊的大小/音頻輸入輸出變量CWaveIn *g_pIn;CWaveOut *g_pOut;
5、char pinAudioData_Size,poutCompr_AudioData_Size;char waveoutAudioData_Size;/攝像頭輸入變量DWORD dwSize;DWORD dwJpg;DWORD dwRtnSize2;/* 0 - for bmp, 1 - for jpeg */LPBYTE lpFrameBuffer;LPBYTE lpJpgBuffer ;/控制變量bool isCameraEnabled;/UDPCUDP_CE m_CEUdp;class AVClasspublic:/=/ 語法格式: void InitAV(CWnd * p)/ 實現(xiàn)功能
6、: 初始化音頻和視頻,用于錄音、播放音頻,以及播放視頻/ 參數(shù): p為窗口類指針/ 返回值: 無/=void InitAV(CWnd * p,int local_port,CString remote_ip,int remote_port)/-初始化UDP-/m_CEUdp.m_OnUdpRecv = OnUdpCERecv;DWORD nResult = m_CEUdp.Open(p,local_port,remote_ip,remote_port);if (nResult =0)AfxMessageBox(_T(“打開端口失敗”);return;/-控制變量-/isCameraEnable
7、d=false;/-視頻-/int i = capInitCamera();dwSize = 320 * 240 * 3;dwJpg = 40960;lpFrameBuffer = (LPBYTE) malloc (dwSize);lpJpgBuffer = (LPBYTE) malloc (dwJpg);if(i=0)/:MessageBox(NULL, L“Init camera error ”, L“Notice”, 0);goto video_error;/出錯,釋放空間.if (0 != capSetVideoFormat(0, VIDEO_PALETTE_RGB24, VIDEO_
8、SIZE_SIF)/:MessageBox(NULL, L“SetVideoFormat error ”, L“Notice”, 0);goto video_error;/出錯,釋放空間if (capStartCamera(0) != 0)/:MessageBox(NULL, L“StartCamera error ”, L“Notice”, 0);capStopCamera(0);goto video_error;/出錯,釋放空間/沒出錯,進行視頻(控制狀態(tài))、音頻設(shè)置isCameraEnabled=true;goto audio;video_error:free (lpFrameBuffe
9、r);lpFrameBuffer = NULL;free (lpJpgBuffer);lpJpgBuffer = NULL;/-音頻-/audio:g_pOut = new CWaveOut();g_pIn = new CWaveIn();g_pOut-StartPlay();g_pIn-StartRec(OnRecCapAndSend,(DWORD)p);/=/ 語法格式: void FreeAV()/ 實現(xiàn)功能: 釋放音頻、視頻/ 參數(shù): 無/ 返回值: 無/=void FreeAV()/-視頻-/if(isCameraEnabled)capStopCamera(0);/-音頻-/g_pO
10、ut-StopPlay();g_pIn-StopRec();delete g_pOut;delete g_pIn;/-UDP-/m_CEUdp.Close();/=/ 語法格式: void RecAndPlay(WPARAM wParam,LPARAM lParam)/ 實現(xiàn)功能: 接收網(wǎng)絡(luò)傳來的音頻,以及播放/ 參數(shù): wParam,表示數(shù)據(jù);lParam,表示數(shù)據(jù)長度/ 返回值: 無/=static void CALLBACK OnUdpCERecv(CWnd * pWnd,char* buf,int nLen,sockaddr * addr)g726_Decode(buf,(unsign
11、ed char*)waveout);g_pOut-Play(waveout,AudioData_Size);/=/ 語法格式: static void OnRecCapAndSend(char *data,int length,DWORD userdata)/ 實現(xiàn)功能: 錄音,攝像并且發(fā)送/ 參數(shù): data表示數(shù)據(jù),length表示數(shù)據(jù)長度,userdata暫時沒用/ 返回值: 無/=f=static void OnRecCapAndSend(char *data,int length,DWORD userdata)/-音頻-/memcpy(pin,g_pIn-buffer,AudioDa
12、ta_Size);g726_Encode(unsigned char*)pin,pout);m_CEUdp.SendData(pout,Compr_AudioData_Size);/-視頻-/if(isCameraEnabled=false)/如果程序不能用攝像頭return;Sleep(15);int index=0;memset(lpFrameBuffer, 0, dwSize);memset(lpJpgBuffer, 0, dwJpg);dwRtnSize0 = dwRtnSize1 = 0;if (capGetPicture(index, lpFrameBuffer, dwSize,
13、lpJpgBuffer, dwJpg, dwRtnSize) = 0)/ m_CEUdp.SendData(const char *)lpJpgBuffer,dwRtnSize1);char tmp1440;int tmp_i=0;for(int i=0;idwRtnSize1;i+)tmptmp_i=lpJpgBufferi;tmp_i+;if(tmp_i=1440)m_CEUdp.SendData(tmp,1440);tmp_i=0;else if(i=dwRtnSize1-1)m_CEUdp.SendData(tmp,dwRtnSize1-(dwRtnSize1/1440)*1440);
14、tmp_i=0;以下是PC部分的關(guān)鍵代碼#pragma once#include “winsock2.h”/UDP支持#include “。.UDPUDP.h”/音頻支持#include “WaveIn.h”#include “waveout.h”/G726支持#include “g726.h”/視頻支持#include “Gdiplus.h”using namespace Gdiplus;#define VideoData_Size 1440 /每塊視頻數(shù)據(jù)包的大小#define Video_Width 320 /視頻寬度#define Video_Height 240 /視頻長度#defi
15、ne AudioData_Size 960 /每塊音頻數(shù)據(jù)包的大小#define Compr_AudioData_Size 120 /壓縮后音頻塊的大小/音頻輸入輸出變量CWaveIn *g_pIn;CWaveOut *g_pOut;char pinAudioData_Size,poutCompr_AudioData_Size;char wave_dataAudioData_Size;/UDP變量CUDP_CE m_CEUdp;/視頻輸入變量GdiplusStartupInput m_gdiPlusInPut;ULONG_PTR m_gdiPlusToken;char video_dataVi
16、deo_Width*Video_Height;int index;/視頻數(shù)據(jù)當前索引class AVClassprivate:public:/=/ 語法格式: void InitAV(CWnd * p)/ 實現(xiàn)功能: 初始化音頻和視頻,用于錄音、播放音頻,以及播放視頻/ 參數(shù): p為窗口類指針/ 返回值: 無/=void InitAV(CWnd * p,int local_port,CString remote_ip,int remote_port)./-UDP連接-/m_CEUdp.m_OnUdpRecv = OnUdpCERecv;DWORD nResult = m_CEUdp.Open(
17、p,local_port,remote_ip,remote_port);if (nResult =0)AfxMessageBox(_T(“打開端口失敗”);return;/-音頻-/g_pOut = new CWaveOut();g_pIn = new CWaveIn();g_pOut-StartPlay();g_pIn-StartRec(OnRecording,(DWORD)p);/-視頻-/GdiplusStartup( &m_gdiPlusToken, &m_gdiPlusInPut, NULL ); /初始化GDI+memset(video_data,0,Video_Width*Vid
18、eo_Height);index=0;/=/ 語法格式: void FreeAV()/ 實現(xiàn)功能: 釋放音頻、視頻/ 參數(shù): 無/ 返回值: 無/=void FreeAV()/-音頻-/g_pOut-StopPlay();g_pIn-StopRec();delete g_pOut;delete g_pIn;/-視頻-/GdiplusShutdown(m_gdiPlusToken); /銷毀GDI+/-UDP-/m_CEUdp.Close();/=/ 語法格式: void RecAndPlay(WPARAM wParam,LPARAM lParam,HWND hwnd)/ 實現(xiàn)功能: 接收網(wǎng)絡(luò)傳
19、來的音頻,以及播放/ 參數(shù): wParam,表示數(shù)據(jù);lParam,表示數(shù)據(jù)長度;hwnd,表示顯示視頻的窗口句柄/ 返回值: 無/=static void CALLBACK OnUdpCERecv(CWnd *pWnd,char* buf,int nLen,sockaddr * addr)/*測試收到的數(shù)據(jù)大小CString tmp;tmp.Format(L“%d”,nLen);MessageBox(0,tmp,0,0);return;*/-如果是音頻數(shù)據(jù)-/if(nLen=Compr_AudioData_Size)g726_Decode(buf,(unsigned char*)wave_d
20、ata);g_pOut-Play(wave_data,AudioData_Size);return;/-如果是視頻數(shù)據(jù)-/if(nLen=VideoData_Size)/完整的視頻數(shù)據(jù)塊for(int i=0;inLen;i+)video_dataindex=bufi;index+;return;/視頻數(shù)據(jù)塊的最后一塊for(int i=0;inLen;i+)video_dataindex=bufi;index+;/如果JPEG圖像特別大,則肯定是出錯,則拋棄if(indexVideo_Width*Video_Height)/MessageBox(0,“緩沖區(qū)出錯”,“錯誤信息”,0);ret
21、urn;tryIPicture *pPic;IStream *pStm ;/分配全局存儲空間HGLOBAL hGlobal=GlobalAlloc(GMEM_MOVEABLE,index);LPVOID pvData=NULL ;/鎖定分配內(nèi)存塊pvData=GlobalLock(hGlobal);/復(fù)制數(shù)據(jù)包video_data到pvDatamemcpy(pvData,video_data,index);GlobalUnlock(hGlobal);CreateStreamOnHGlobal(hGlobal,TRUE,&pStm);ULARGE_INTEGER pSeek;LARGE_INTEGER dlibMove = 0 ;pStm-Seek(dlibMove,STREAM_SEEK_SET ,&pSeek);/ Sleep(15);/裝入圖形文件if(FAILED(OleLoadPicture(pStm,index,TRUE,IID_IPicture,(LPVOID*)&pPic)/附:如果video_data這個數(shù)組包含的圖像有錯,則OleLoadPict
溫馨提示
- 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)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年甲基環(huán)狀硅氧烷項目可行性研究報告
- 現(xiàn)代企業(yè)網(wǎng)絡(luò)安全培訓(xùn)與教育
- 中國汽車隔音棉行業(yè)發(fā)展監(jiān)測及投資戰(zhàn)略規(guī)劃研究報告
- 2020-2025年中國商用洗碗機行業(yè)發(fā)展趨勢預(yù)測及投資規(guī)劃研究報告
- 如何寫貧困補助申請書
- 生產(chǎn)流程優(yōu)化高效率的生產(chǎn)秘訣
- 電子競技產(chǎn)業(yè)的辦公文化與團隊建設(shè)
- 2025年鐵葉輪項目投資可行性研究分析報告
- 2025年切換電音器接觸器項目可行性研究報告
- 知識產(chǎn)權(quán)助力旅游文化的商業(yè)價值挖掘
- GB/T 21114-2007耐火材料X射線熒光光譜化學(xué)分析熔鑄玻璃片法
- 特種設(shè)備安全監(jiān)察指令書填寫規(guī)范(特種設(shè)備安全法)參考范本
- 航空維修工程管理-第1章課件
- 《長方形的面積》-完整版課件
- 五年級上冊英語Module6Unit1Youcanplaybasketballwell外研社課件
- 工業(yè)企業(yè)現(xiàn)場監(jiān)測工況核查表
- 沉淀池及排水溝清理記錄表
- 玩具公司職位說明書匯編
- 化學(xué)專業(yè)英語元素周期表
- 04 第三章 環(huán)境污染物的生物轉(zhuǎn)運和生物轉(zhuǎn)化 -毒物動力學(xué)
- ic半導(dǎo)體測試基礎(chǔ)(中文版)參考范本
評論
0/150
提交評論