多媒体网络通信技术大作业
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
多媒体网络通信技术大作业
电信1203
朱银啸
0121209310309
1、题目:基于局域网的可视对讲系统设计
2、系统开发环境与工具:
(1)、硬件环境:实验室局域网
(2)、软件环境:WindowsXP操作系统
(3)、开发工具:自己熟悉的面向对象的网络通信编程工具与平台,相关音频、视频编码与传输协议类库
3、要求与评分标准:
(1)要求:在以上硬软件环境下,利用合适的开发工具,设计一套可视对讲软件,实现局域网内两台计算机之间的可视对讲功能,要求音视频信号连续性、实时性较好,满足正常交流需要。
(2)评分标准
代码
客户端请求连接线程(呼叫处理)关键代码如下:
DWORD WINAPI ConnectThreadFunc(LPVOID pParam)
{
CChatRoomDlg *pChatRoom = (CChatRoomDlg *)pParam; ASSERT(pChatRoom ! = NULL);
pChatRoom ->m_ConnectSock = socket (AF_INET ,SOCK_STREAM , IPPROTO_TCP);
if ( pChatRoom->m_ConnectSock == INVALID_SOCKET) { AfxMessageBox(_T("新建Socket 失败!"));
return FALSE;
}
CString strServIp;
pChatRoom->GetDlgItemText(IDC_IP_ADDR, strServIp);
int iPort = pChatRoom ->GetDlgItemInt (IDC_CONNECT_PORT);
if( iPort <= 0 || iPort > 65535 ) {
AfxMessageBox(_T("请输入合适的端口:1 - 65535"));
goto __Error_End;
}
char szIpAddr[16] = {0};
USES_CONVERSION;
strcpy_s(szIpAddr, 16, T2A(strServIp));
sockaddr_in server;
server.sin_family = AF_INET;
server.sin_port = htons(iPort);
server.sin_addr.s_addr = inet_addr(szIpAddr);
if(connect(pChatRoom->m_ConnectSock,(struct sockaddr*)&server, sizeof(struct sockaddr)) == SOCKET_ERROR )
{
AfxMessageBox(_T("连接失败,请重试!"));
goto __Error_End;
}
pChatRoom->ShowMsg(_T(" 系统信息:连接服务器成功!"));
while( TRUE ) {
if ( SOCKET_Select(pChatRoom->m_ConnectSock) ) {
TCHAR szBuf[MAX_BUF_SIZE] = {0};
int iRet = recv (pChatRoom->m_ConnectSock, (char*)szBuf, MAX_BUF_SIZE, 0);
if ( iRet > 0 ) {
pChatRoom->ShowMsg(szBuf);
}else{
pChatRoom->ShowMsg(_T("聊天服务器已停止,请重新进行连接!")); break;
}
}
Sleep(500);
}
__Error_End:
closesocket(pChatRoom->m_ConnectSock);
return TRUE;
}
//捕获窗口
BOOL VideoCapture::Initialize()
{
char devname[128]={0},devversion[128]={0};
int index=0;
BOOL ret = TRUE, ret1 = TRUE, ret2 = TRUE, ret3 = TRUE;
TRACE("VideoCapture::Initialize\n");
//创建一个AVICap捕获窗口
m_capwnd = capCreateCaptureWindow("Capture",WS_POPUP,0,0,1,1,0,0); if(!m_capwnd){
return FALSE;
}
//connect callback functions
ret = capSetUserData(m_capwnd,this);
//Change destroy functions also........
ret1 = capSetCallbackOnVideoStream(m_capwnd,OnCaptureVideo);
//得到已安装的捕获设备的名称及版本
ret2 = capGetDriverDescription(index,devname,100,devversion,100);
// Connect to webcam driver
//使一个捕获窗口与一个捕获设备连接或关联
ret3 = capDriverConnect(m_capwnd,index);
if(!(ret && ret1 && ret2 && ret3)){
// Device may be open already or it may not have been
// closed properly last time.
AfxMessageBox("Unable to open Video Capture Device");
// log.WriteString("\n Unable to connect driver to the window");
m_capwnd=NULL;
return FALSE;}
// Set the capture parameters
if(SetCapturePara()==FALSE)
{
// log.WriteString("\n Setting capture parameters failed"); capDriverDisconnect(m_capwnd); //使捕获窗口与一个捕获设备断开
return FALSE;