- 浏览: 150544 次
- 性别:
- 来自: 广州
最新评论
-
yinren13:
说的便捷的视频会议,我们公司的遥控器一按就能开始的视频会议tu ...
便捷视频会议 -
xujinquan19:
...
可视通讯与移植、跨平台开发 -
xujinquan19:
...
Android 平台下的即时通讯 -
xujinquan19:
...
Android 平台下的即时通讯 -
xujinquan19:
...
Android 平台下的即时通讯
以下为anychat视频通讯系统中的部分回调函数源码:
具体可以在
http://download.csdn.net/detail/xujinquan19/4512304
http://download.csdn.net/detail/xujinquan19/4513223
http://download.csdn.net/detail/xujinquan19/4513024
下载
- /**
- * 视频数据回调函数
- */
- void CALLBACK VideoData_CallBack(DWORD dwUserid, LPVOID lpBuf, DWORD dwLen, BITMAPINFOHEADER bmiHeader, LPVOID lpUserValue)
- {
- CBRAnyChatSDKDemoDlg* pDemoDlg = (CBRAnyChatSDKDemoDlg*)lpUserValue;
- if(pDemoDlg)
- pDemoDlg->DrawUserVideo(dwUserid,lpBuf,dwLen,bmiHeader);
- }
- /**
- * 音频数据回调函数
- */
- void CALLBACK AudioData_CallBack(DWORD dwUserid, LPVOID lpBuf, DWORD dwLen, WAVEFORMATEX waveFormatEx, LPVOID lpUserValue)
- {
- CBRAnyChatSDKDemoDlg* pDemoDlg = (CBRAnyChatSDKDemoDlg*)lpUserValue;
- if(pDemoDlg)
- {
- // do something ...
- }
- }
- /**
- * 音量更改回调函数
- */
- void CALLBACK VolumeChange_CallBack(BRAC_AudioDevice device, DWORD dwCurrentVolume, LPVOID lpUserValue)
- {
- CBRAnyChatSDKDemoDlg* pDemoDlg = (CBRAnyChatSDKDemoDlg*)lpUserValue;
- if(pDemoDlg)
- {
- if(device == BRAC_AD_WAVEIN)
- pDemoDlg->OnWaveInVolumeChange(dwCurrentVolume);
- else
- pDemoDlg->OnWaveOutVolumeChange(dwCurrentVolume);
- }
- }
- // 透明通道数据回调函数定义
- void CALLBACK TransBuffer_CallBack(DWORD dwUserid, LPBYTE lpBuf, DWORD dwLen, LPVOID lpUserValue)
- {
- CBRAnyChatSDKDemoDlg* pDemoDlg = (CBRAnyChatSDKDemoDlg*)lpUserValue;
- if(pDemoDlg)
- {
- CString strNotify;
- strNotify.Format("TransBuffer_CallBack:dwUserid-%d, bufSize-%d",dwUserid,dwLen);
- pDemoDlg->AppendLogString(strNotify);
- }
- }
- // 透明通道数据扩展回调函数定义
- void CALLBACK TransBufferEx_CallBack(DWORD dwUserid, LPBYTE lpBuf, DWORD dwLen, DWORD wParam, DWORD lParam, DWORD dwTaskId, LPVOID lpUserValue)
- {
- CBRAnyChatSDKDemoDlg* pDemoDlg = (CBRAnyChatSDKDemoDlg*)lpUserValue;
- if(pDemoDlg)
- {
- BOOL bSuccess = FALSE;
- if(dwLen > 1000)
- {
- bSuccess = lpBuf[1000] == 'Y' ? TRUE : FALSE;
- }
- CString strNotify;
- strNotify.Format("TransBufferEx_CallBack:dwUserid-%d, bufSize-%d,verify:%s",dwUserid,dwLen,bSuccess ? "Success" : "Fail");
- pDemoDlg->AppendLogString(strNotify);
- }
- }
- // 文件传输回调函数定义
- void CALLBACK TransFile_CallBack(DWORD dwUserid, LPCTSTR lpFileName, LPCTSTR lpTempFilePath, DWORD dwFileLength, DWORD wParam, DWORD lParam, DWORD dwTaskId, LPVOID lpUserValue)
- {
- CBRAnyChatSDKDemoDlg* pDemoDlg = (CBRAnyChatSDKDemoDlg*)lpUserValue;
- if(pDemoDlg)
- {
- CString strNotify;
- strNotify.Format("TransFile_CallBack:dwUserid-%d, lpFileName-%s, lpTempFilePath-%s",dwUserid,lpFileName,lpTempFilePath);
- pDemoDlg->AppendLogString(strNotify);
- }
- }
- // 录像、快照任务完成回调函数定义
- void CALLBACK RecordSnapShot_CallBack(DWORD dwUserid, LPCTSTR lpFileName, DWORD dwParam, BOOL bRecordType, LPVOID lpUserValue)
- {
- CBRAnyChatSDKDemoDlg* pDemoDlg = (CBRAnyChatSDKDemoDlg*)lpUserValue;
- if(pDemoDlg)
- {
- CString strNotify;
- strNotify.Format("%s CallBack:dwUserid-%d, FilePathName-%s",bRecordType?"Record":"SnapShot",(int)dwUserid,lpFileName);
- pDemoDlg->AppendLogString(strNotify);
- }
- }
- // SDK Filter 通信数据回调函数定义
- void CALLBACK SDKFilterData_CallBack(LPBYTE lpBuf, DWORD dwLen, LPVOID lpUserValue)
- {
- CBRAnyChatSDKDemoDlg* pDemoDlg = (CBRAnyChatSDKDemoDlg*)lpUserValue;
- if(pDemoDlg)
- {
- CString strNotify;
- strNotify.Format("SDK Filter CallBack:%s",lpBuf);
- pDemoDlg->AppendLogString(strNotify);
- }
- }
- /**
- * 绘制用户视频
- * 数据来源于回调函数
- * @param dwUserid 用户ID号
- * @param lpBuf 视频数据缓冲区
- * @param dwLen 缓冲区大小
- * @param bmiHeader 视频缓冲区的头信息,包含了视频的大小、颜色位数等信息
- */
- void CBRAnyChatSDKDemoDlg::DrawUserVideo(DWORD dwUserid, LPVOID lpBuf, DWORD dwLen, BITMAPINFOHEADER bmiHeader)
- {
- // 根据用户ID号找到合适的显示区域
- DWORD dwSite = -1;
- for(INT i=0; i<DEMO_SHOW_USER_NUM; i++)
- {
- if(m_iUserID[i] == (INT)dwUserid)
- {
- dwSite = i;
- break;
- }
- }
- if(dwSite == -1)
- return;
- CRect dispRect = m_UserRect[dwSite];
- //构建Bitmap
- BITMAPINFOHEADER *lpbmi = (BITMAPINFOHEADER*)malloc(sizeof(BITMAPINFOHEADER)+dwLen);
- ZeroMemory(lpbmi,sizeof(BITMAPINFOHEADER)+dwLen);
- memcpy((LPBYTE)lpbmi,&bmiHeader,sizeof(bmiHeader));
- memcpy(((LPBYTE)lpbmi+sizeof(BITMAPINFOHEADER)),lpBuf,dwLen);
- HDC hdc = ::GetDC(m_hWnd);
- HDC dcMem = ::CreateCompatibleDC(hdc);
- HBITMAP hBitmap = CreateDIBitmap(hdc,lpbmi,CBM_INIT,(LPBYTE)lpbmi+sizeof(BITMAPINFOHEADER),(LPBITMAPINFO)lpbmi,DIB_RGB_COLORS);
- //绘图
- HBITMAP holdbm = (HBITMAP)SelectObject(dcMem,hBitmap);
- ::SetStretchBltMode(hdc,COLORONCOLOR);
- ::StretchBlt(hdc,dispRect.left,dispRect.top,dispRect.Width(),dispRect.Height(),dcMem,0,0,bmiHeader.biWidth,bmiHeader.biHeight,SRCCOPY);
- SelectObject(dcMem,holdbm);
- ::DeleteDC(dcMem);
- ::DeleteObject(hBitmap);
- ::ReleaseDC(m_hWnd,hdc);
- free(lpbmi);
- lpbmi = NULL;
- }
- BOOL CBRAnyChatSDKDemoDlg::OnInitDialog()
- {
- CDialog::OnInitDialog();
- // IDM_ABOUTBOX must be in the system command range.
- ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
- ASSERT(IDM_ABOUTBOX < 0xF000);
- CMenu* pSysMenu = GetSystemMenu(FALSE);
- if (pSysMenu != NULL)
- {
- CString strAboutMenu;
- strAboutMenu.LoadString(IDS_ABOUTBOX);
- if (!strAboutMenu.IsEmpty())
- {
- pSysMenu->AppendMenu(MF_SEPARATOR);
- pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
- }
- }
- SetIcon(m_hIcon, TRUE); // Set big icon
- SetIcon(m_hIcon, FALSE); // Set small icon
- // 初始化每个视频显示位置信息
- GetDlgItem(IDC_STATIC_USER0)->ShowWindow(SW_HIDE);
- GetDlgItem(IDC_STATIC_USER0)->GetClientRect(m_UserRect[0]);
- GetDlgItem(IDC_STATIC_USER0)->ClientToScreen(m_UserRect[0]);
- ScreenToClient(m_UserRect[0]);
- GetDlgItem(IDC_STATIC_USER1)->ShowWindow(SW_HIDE);
- GetDlgItem(IDC_STATIC_USER1)->GetClientRect(m_UserRect[1]);
- GetDlgItem(IDC_STATIC_USER1)->ClientToScreen(m_UserRect[1]);
- ScreenToClient(m_UserRect[1]);
- GetDlgItem(IDC_STATIC_USER2)->ShowWindow(SW_HIDE);
- GetDlgItem(IDC_STATIC_USER2)->GetClientRect(m_UserRect[2]);
- GetDlgItem(IDC_STATIC_USER2)->ClientToScreen(m_UserRect[2]);
- ScreenToClient(m_UserRect[2]);
- GetDlgItem(IDC_STATIC_USER3)->ShowWindow(SW_HIDE);
- GetDlgItem(IDC_STATIC_USER3)->GetClientRect(m_UserRect[3]);
- GetDlgItem(IDC_STATIC_USER3)->ClientToScreen(m_UserRect[3]);
- ScreenToClient(m_UserRect[3]);
- // 隐藏录像状态标志
- GetDlgItem(IDC_STATIC_RECORDSTATE0)->ShowWindow(SW_HIDE);
- GetDlgItem(IDC_STATIC_RECORDSTATE1)->ShowWindow(SW_HIDE);
- GetDlgItem(IDC_STATIC_RECORDSTATE2)->ShowWindow(SW_HIDE);
- GetDlgItem(IDC_STATIC_RECORDSTATE3)->ShowWindow(SW_HIDE);
- for(INT i=0; i<DEMO_SHOW_USER_NUM; i++)
- {
- m_iUserID[i] = -1;
- }
- m_dwTransTaskId = -1;
- m_iPort = 8906;
- m_iRoomId = 1;
- SetDlgItemText(IDC_IPADDRESS_SERVER,"demo.anychat.cn");
- SetDlgItemText(IDC_EDIT_USERNAME,"AnyChat5");
- UpdateData(FALSE);
- return TRUE; // return TRUE unless you set the focus to a control
- }
- void CBRAnyChatSDKDemoDlg::OnSysCommand(UINT nID, LPARAM lParam)
- {
- if ((nID & 0xFFF0) == IDM_ABOUTBOX)
- {
- CAboutDlg dlgAbout;
- dlgAbout.DoModal();
- }
- else
- {
- CDialog::OnSysCommand(nID, lParam);
- }
- }
- // If you add a minimize button to your dialog, you will need the code below
- // to draw the icon. For MFC applications using the document/view model,
- // this is automatically done for you by the framework.
发表评论
-
手机视频会议
2012-11-16 14:03 845在这个时代,手机被开发者们所赋予的意义已经远远超出了大众的期望 ... -
音视频对话开发
2012-09-20 17:21 747AnyChat for Android是佰锐科技继2010年发 ... -
浅谈网络语音技术
2012-08-31 14:35 972浅谈网络语音技术 当我们使用像Sky ... -
H.264视频编码标准在网络视频监控系统中的应用 .
2012-08-24 15:13 992【摘 要】本文介绍了ITU-T最新高性能视频压缩标准H.264 ... -
安卓平台下的即时通讯
2012-08-24 15:12 976基于Android 平台简易即时通讯的研究与设计 摘要 ... -
iOS音视频封装与传输demo
2012-08-24 15:01 2033ios没有直接得api用来封装传输rtp,但是经常有用到得接收 ... -
手机音视频应用开发(专注于Symbian、iPhone、Android等跨平台音视频应用开发方案)
2012-08-24 14:47 1151一款好的手机应用, 能让用户在第一分钟就爱上他, 一款烂的手 ... -
手机视频通讯开发
2012-08-24 14:46 823如今,3G网络快速发展 ... -
音视频点播直播系统
2012-08-20 10:32 1476音视频点播直 ... -
网络游戏与实时视频结合,拉动网游的进步 .
2012-08-20 09:58 8172011年被称为中国网络 ... -
android视频开发
2012-08-16 17:31 1023摘要:论文简单介绍Android 平台的特性,主要阐述了基于A ... -
android视频聊天软件推荐
2012-08-15 17:00 1065正在当前那个社会 ... -
音视频交流服务系统
2012-03-15 16:22 911下面的这个平台是一种视频服务的应用,比如A(客户端)打视频电话 ... -
音视频开发平台
2012-03-15 16:12 839近日,腾讯公司发布了Q ... -
即时通讯开发平台(音视频)
2012-03-15 16:11 935近日,腾讯公司发布了Q ... -
视频开发与视讯系统的选择
2012-02-22 12:08 981随着Internet的发展,宽 ... -
手机视频之营销模式
2012-02-16 10:43 9063G时代的逼近,手机视 ... -
手机视频应用开发
2011-12-30 14:56 787AnyChat for Android是佰锐科技继2010年发 ... -
手机移动终端与PC进行音视频聊天和监控的开发
2011-11-08 11:15 1009针对目前市场 ... -
音视频通讯、视频电话介绍
2011-08-04 18:03 821远程视频,可以拉近人们遥远的距离,天南地北,只需要一个网络一台 ...
相关推荐
小编最近在开发一款音视频即时通讯软件,在开发过程中,受到了一款demo的启发和帮助,因此将此demo源码分享出来,希望能够帮助到大家。 VS打开这个demo后(AnyChatCSharpDemo.sln)---F5执行报错,会生成文件(\bin\...
本资源提供的"音视频对讲Demo源码"是一个基于Android Studio的项目工程,旨在帮助开发者理解和实践音视频通信的实现。 首先,我们要理解音视频对讲的核心技术组件。在Android平台上,通常会用到以下技术: 1. **...
通过分析源代码,可以学习到如何在实际项目中应用XMPP协议。 总结,基于XMPP的Android即时通讯DEMO涉及到的知识点包括XMPP协议原理、Android客户端开发、连接管理和消息处理、用户身份验证以及安全性等。通过深入...
在“demo-app-android-quick-start-master”这个压缩包中,包含了融云实时通讯Demo的源代码,通过分析和学习这些代码,开发者可以更深入地理解融云SDK的工作原理和集成方法,从而在自己的项目中灵活应用。...
在"C# UDP通讯demo"中,我们可以看到一个简单的C#实现UDP通信的示例。这个项目可能包含了两个关键部分:一个作为服务器端(监听端),另一个作为客户端(发送端)。下面将详细介绍这两个部分以及相关的知识点。 **...
一个开源的即时通信demo,需要前后端配合使用,主要用于学习交流,为大家提供即时通讯的开发思路,许多功能需要自行开发,开发的初衷旨在快速建立企业内部通讯系统、内网交流、社区交流。 ### 支持功能 - 支持单聊...
这个“xmpp通讯协议demo”是展示如何在Android平台上利用XMPP协议进行即时通讯的一个示例项目。它表明开发者使用了Eclipse IDE进行初始开发,并且可以转换为Android Studio(AS)项目以便于进一步的Android开发。 ...
开发者可以通过研究这个示例项目的源代码,了解如何在实际应用中使用PJSIP进行视频通话的实现。 **优化与注意事项** 在实际应用中,还需要考虑网络条件、设备性能等因素进行优化,例如: - **网络适应性**:通过...
可以实现双向音视频交互、电视直播、音视频上传、文字交流、文件传输等功能,提供C++和Objective-C两种编程接口可二次开发,应用程序界面及业务流程可由...SDK包里面提供了Demo程序源代码(基于xcode 4工程)供参考。
UDP通讯DEMO(C#)是基于C#编程语言实现的一个通信示例,它演示了如何在Windows和WINCE操作系统上进行用户数据报协议(UDP)的通信。UDP是一种无连接的、不可靠的传输层协议,它在互联网协议族中扮演着重要的角色,...
这个"及时通讯demo"项目提供了一个基础的即时通讯应用框架,帮助开发者了解和学习如何构建这样的系统。以下是该demo可能包含的关键知识点: 1. **用户注册与登录**:在即时通讯应用中,用户首先需要注册账号并进行...
AnyChat for iPhone基于iOS 4.3研发,目前支持iPhone 3G、iPhone 3GS、iPhone 4、iPad、iPad2等硬件设备,SDK包里面提供了Demo程序源代码(基于xcode 4工程)供参考。 AnyChat for iPhone可与其它平台的AnyChat...
android落花效果+字体渐变的Demo源码.rar android高仿QQ的即时通讯(附带服务端).rar listview 滑动删除(具体效果360手机卫士后台通知).rar “遇见”android应用源码.rar 安卓手机(android)wifi传送文件源码.rar ...
【标题】"Myjingle-0.3 Demo源码"是一个开源项目,它展示了如何使用Google的libjingle库来实现实时通信功能,特别是语言呼叫和音频通话。这个Demo对于开发者来说是一个宝贵的学习资源,它揭示了如何利用XMPP协议进行...
10. **代码优化**:尽管是DEMO,但优化仍然是一个值得考虑的问题,尤其是在处理大量视频数据时。优化可能包括算法改进、内存管理、减少不必要的计算等。 通过研究这个DEMO,开发者可以掌握如何在C++环境中与海康DVR...
本DEMO应该包含了上述所有步骤,通过运行和分析源代码,开发者可以更深入地理解Android UDP socket通信的工作原理,从而在自己的项目中灵活运用。同时,注意在实际应用中,应考虑数据的序列化和反序列化、错误处理...
功能介绍 ... 2、访客管理(访客黑名单、访客对话) 3、日志管理 (操作日志、异常日志) 4、 系统监控 (实时监控、... 5、网址+‘/demo/demo’,可以查看当前坐席和访客列表需要的话,也可以放在其他网站,供测试调用。
在学习和使用这个通讯类Demo时,你可以通过阅读代码、运行示例和调试来深入理解这些概念,并将其应用于自己的项目中。同时,博客链接(http://mp.blog.csdn.net/mdeditor/index/79119867)可能提供了更详细的解释和...
这个是基于WebRTC 2014年5月的trunk源代码,该代码演示在android中如何使用MediaEngine进行视频、音频通讯(包括AECM AGC NS) 在setting中取消loopback并加入内网对方IP,拉开一定距离就可以进行对话。 是个不错的...
在"demo2"这个文件中,可能包含了实现上述功能的Java源代码,通过阅读和分析这段代码,可以深入理解如何在Java中实现UDP网络通信,以及在实际应用中如何利用UDP的特点。对于学习和实践Java网络编程,这个示例是一个...