新闻中心

EEPW首页 > 消费电子 > 设计应用 > 基于wince的网络音视频通信

基于wince的网络音视频通信

作者:时间:2011-01-14来源:网络收藏

wince网络音通讯

本文引用地址:http://www.eepw.com.cn/article/166249.htm

wince网络音视频通讯


下位机为 mini2440 ,其操作系统是WINCE 5.0,需要在下位机上插入USB摄像头(中星微301,驱动为15分钟限制版),以及插入麦克风耳机;

上位机为普通的PC,需要插入麦克风耳机;

上位机和下位机的开发环境为Visual Studio 2005。

接下来,说说这个东东的功能,和工作原理:

网络传输,首先把mini2440与USB摄像头连接在一起,通过USB摄像头捕捉图像(320 x 240,15fps),然后通过UDP协议发送至PC端,在PC屏幕上以15fps的速度显示。

网络传输,首先在mini2440和PC上都插入麦克风耳机,两者都同时录音,并以G.726编码,然后把压缩包通过UDP协议发送至对方,而在录音的同时,也对来自对方的压缩包用G.726解码,然后再在耳机播放

最后,说说这个版本相对于以前的改进:

把以前的RTP改为UDP,实践证明,在这个系统中,用UDP的效率会比RTP好,毕竟不需要用到RTP的流量监测等高级功能,仅仅能通信就行了;

以前版本基于100M网卡,现在支持10M网卡了,在100M网卡的机器上,可以直接把JPEG图片发过去,但是,在10M的网卡是,每次数据包最大为1440比特,因此要兼容10M网卡,就需要把图像分割成多个1440大小的数据包,分别发送了。

网络音通信

下面说说关键的源代码:

以下是WINCE部分的代码

#pragma once

#include “winsock2.h”

//RTP支持

#include “。.UDPUDP.h”

//支持

#include “WaveIn.h”

#include “WaveOut.h”

//G726支持

#include “g726.h”

//摄像头支持

#include “。video\zc030xlib.h”

#define Video_Width 320 //视频宽度

#define Video_Height 240 //视频长度

#define AudioData_Size 960 //每块音频数据包的大小

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

// 实现功能: 初始化音频和视频,用于录音、播放音频,以及播放视频

// 参数: 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 下一页

关键词: 音频 视频

评论


相关推荐

技术专区

关闭