新聞中心

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

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

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

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

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

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


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

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

上位機(jī)和下位機(jī)的開發(fā)環(huán)境為Visual Studio 2005。

接下來(lái),說(shuō)說(shuō)這個(gè)東東的功能,和工作原理:

網(wǎng)絡(luò)傳輸,首先把mini2440與USB攝像頭連接在一起,通過(guò)USB攝像頭捕捉圖像(320 x 240,15fps),然后通過(guò)UDP協(xié)議發(fā)送至PC端,在PC屏幕上以15fps的速度顯示。

網(wǎng)絡(luò)傳輸,首先在mini2440和PC上都插入麥克風(fēng)耳機(jī),兩者都同時(shí)錄音,并以G.726編碼,然后把壓縮包通過(guò)UDP協(xié)議發(fā)送至對(duì)方,而在錄音的同時(shí),也對(duì)來(lái)自對(duì)方的壓縮包用G.726解碼,然后再在耳機(jī)播放。

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

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

以前版本基于100M網(wǎng)卡,現(xiàn)在支持10M網(wǎng)卡了,在100M網(wǎng)卡的機(jī)器上,可以直接把JPEG圖片發(fā)過(guò)去,但是,在10M的網(wǎng)卡是,每次數(shù)據(jù)包最大為1440比特,因此要兼容10M網(wǎng)卡,就需要把圖像分割成多個(gè)1440大小的數(shù)據(jù)包,分別發(fā)送了。

網(wǎng)絡(luò)音通信

下面說(shuō)說(shuō)關(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 //視頻長(zhǎng)度

#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:

//=====================================================================

// 語(yǔ)法格式: void InitAV(CWnd * p)

// 實(shí)現(xiàn)功能: 初始化音頻和視頻,用于錄音、播放音頻,以及播放視頻

// 參數(shù): p為窗口類指針

// 返回值: 無(wú)

//=====================================================================

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;//出錯(cuò),釋放空間

}


上一頁(yè) 1 2 3 下一頁(yè)

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

評(píng)論


相關(guān)推薦

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

關(guān)閉