新聞中心

        EEPW首頁 > 消費電子 > 設(shè)計應(yīng)用 > 基于wince的網(wǎng)絡(luò)音視頻通信

        基于wince的網(wǎng)絡(luò)音視頻通信

        作者: 時間:2011-01-14 來源:網(wǎng)絡(luò) 收藏

        wince網(wǎng)絡(luò)音通訊

        本文引用地址:http://www.104case.com/article/166249.htm

        wince網(wǎng)絡(luò)音視頻通訊


        下位機為 mini2440 ,其操作系統(tǒng)是WINCE 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ā)送至對方,而在錄音的同時,也對來自對方的壓縮包用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支持

        #include “。.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;

        char pin[AudioData_Size],pout[Compr_AudioData_Size];

        char waveout[AudioData_Size];

        //攝像頭輸入變量

        DWORD dwSize;

        DWORD dwJpg;

        DWORD dwRtnSize[2];/* 0 - for bmp, 1 - for jpeg */

        LPBYTE lpFrameBuffer;

        LPBYTE lpJpgBuffer ;

        //控制變量

        bool isCameraEnabled;

        //UDP

        CUDP_CE m_CEUdp;

        class AVClass

        {

        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(p,local_port,remote_ip,remote_port);

        if (nResult 《=0)

        {

        AfxMessageBox(_T(“打開端口失敗”));

        return;

        }

        //------------------------控制變量-----------------------//

        isCameraEnabled=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;//出錯,釋放空間

        }


        上一頁 1 2 3 下一頁

        關(guān)鍵詞: 音頻 視頻

        評論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 株洲市| 逊克县| 崇信县| 涟源市| 老河口市| 安塞县| 确山县| 墨玉县| 雅安市| 中卫市| 利辛县| 周口市| 纳雍县| 新营市| 延庆县| 枣强县| 富裕县| 蚌埠市| 沭阳县| 抚宁县| 岳普湖县| 兴海县| 灌阳县| 七台河市| 巴彦淖尔市| 新泰市| 阿鲁科尔沁旗| 建昌县| 惠水县| 敖汉旗| 荥经县| 高平市| 建水县| 孟连| 上林县| 和静县| 如东县| 长岛县| 犍为县| 泸西县| 延川县|