新聞中心

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

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

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

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

本文引用地址:http://m.butianyuan.cn/article/166249.htm

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


下位機(jī)為 mini2440 ,其操作系統(tǒng)是WINCE 5.0,需要在下位機(jī)上插入USB攝像頭(中星微301,驅(qū)動為15分鐘限制版),以及插入麥克風(fēng)耳機(jī);

上位機(jī)為普通的PC,需要插入麥克風(fēng)耳機(jī);

上位機(jī)和下位機(jī)的開發(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)耳機(jī),兩者都同時錄音,并以G.726編碼,然后把壓縮包通過UDP協(xié)議發(fā)送至對方,而在錄音的同時,也對來自對方的壓縮包用G.726解碼,然后再在耳機(jī)播放。

最后,說說這個版本相對于以前的改進(jìn):

把以前的RTP改為UDP,實(shí)踐證明,在這個系統(tǒng)中,用UDP的效率會比RTP好,畢竟不需要用到RTP的流量監(jiān)測等高級功能,僅僅能通信就行了;

以前版本基于100M網(wǎng)卡,現(xiàn)在支持10M網(wǎng)卡了,在100M網(wǎng)卡的機(jī)器上,可以直接把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)

// 實(shí)現(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)閉