`
xujinquan19
  • 浏览: 150544 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

视频通讯demo源码

 
阅读更多

以下为anychat视频通讯系统中的部分回调函数源码:

具体可以在

http://download.csdn.net/detail/xujinquan19/4512304

http://download.csdn.net/detail/xujinquan19/4513223

http://download.csdn.net/detail/xujinquan19/4513024

下载

 

  1. /**  
  2.  *  视频数据回调函数  
  3.  */  
  4. void CALLBACK VideoData_CallBack(DWORD dwUserid, LPVOID lpBuf, DWORD dwLen, BITMAPINFOHEADER bmiHeader, LPVOID lpUserValue)   
  5. {   
  6.     CBRAnyChatSDKDemoDlg*   pDemoDlg = (CBRAnyChatSDKDemoDlg*)lpUserValue;   
  7.     if(pDemoDlg)   
  8.         pDemoDlg->DrawUserVideo(dwUserid,lpBuf,dwLen,bmiHeader);   
  9. }   
  10. /**  
  11.  *  音频数据回调函数  
  12.  */  
  13. void CALLBACK AudioData_CallBack(DWORD dwUserid, LPVOID lpBuf, DWORD dwLen, WAVEFORMATEX waveFormatEx, LPVOID lpUserValue)   
  14. {   
  15.     CBRAnyChatSDKDemoDlg*   pDemoDlg = (CBRAnyChatSDKDemoDlg*)lpUserValue;   
  16.     if(pDemoDlg)   
  17.     {   
  18.         // do something ...   
  19.     }   
  20. }   
  21.   
  22. /**  
  23.  *  音量更改回调函数  
  24.  */  
  25. void CALLBACK VolumeChange_CallBack(BRAC_AudioDevice device, DWORD dwCurrentVolume, LPVOID lpUserValue)   
  26. {   
  27.     CBRAnyChatSDKDemoDlg*   pDemoDlg = (CBRAnyChatSDKDemoDlg*)lpUserValue;   
  28.     if(pDemoDlg)   
  29.     {   
  30.         if(device == BRAC_AD_WAVEIN)   
  31.             pDemoDlg->OnWaveInVolumeChange(dwCurrentVolume);   
  32.         else  
  33.             pDemoDlg->OnWaveOutVolumeChange(dwCurrentVolume);   
  34.     }   
  35. }   
  36. // 透明通道数据回调函数定义   
  37. void CALLBACK TransBuffer_CallBack(DWORD dwUserid, LPBYTE lpBuf, DWORD dwLen, LPVOID lpUserValue)   
  38. {   
  39.     CBRAnyChatSDKDemoDlg*   pDemoDlg = (CBRAnyChatSDKDemoDlg*)lpUserValue;   
  40.     if(pDemoDlg)   
  41.     {   
  42.         CString strNotify;   
  43.         strNotify.Format("TransBuffer_CallBack:dwUserid-%d, bufSize-%d",dwUserid,dwLen);   
  44.         pDemoDlg->AppendLogString(strNotify);   
  45.     }   
  46. }   
  47.   
  48. // 透明通道数据扩展回调函数定义   
  49. void CALLBACK TransBufferEx_CallBack(DWORD dwUserid, LPBYTE lpBuf, DWORD dwLen, DWORD wParam, DWORD lParam, DWORD dwTaskId, LPVOID lpUserValue)   
  50. {   
  51.     CBRAnyChatSDKDemoDlg*   pDemoDlg = (CBRAnyChatSDKDemoDlg*)lpUserValue;   
  52.     if(pDemoDlg)   
  53.     {   
  54.         BOOL bSuccess = FALSE;   
  55.         if(dwLen > 1000)   
  56.         {   
  57.             bSuccess = lpBuf[1000] == 'Y' ? TRUE : FALSE;   
  58.         }   
  59.         CString strNotify;   
  60.         strNotify.Format("TransBufferEx_CallBack:dwUserid-%d, bufSize-%d,verify:%s",dwUserid,dwLen,bSuccess ? "Success" : "Fail");   
  61.         pDemoDlg->AppendLogString(strNotify);   
  62.     }      
  63. }   
  64. // 文件传输回调函数定义   
  65. void CALLBACK TransFile_CallBack(DWORD dwUserid, LPCTSTR lpFileName, LPCTSTR lpTempFilePath, DWORD dwFileLength, DWORD wParam, DWORD lParam, DWORD dwTaskId, LPVOID lpUserValue)   
  66. {   
  67.     CBRAnyChatSDKDemoDlg*   pDemoDlg = (CBRAnyChatSDKDemoDlg*)lpUserValue;   
  68.     if(pDemoDlg)   
  69.     {   
  70.         CString strNotify;   
  71.         strNotify.Format("TransFile_CallBack:dwUserid-%d, lpFileName-%s, lpTempFilePath-%s",dwUserid,lpFileName,lpTempFilePath);   
  72.         pDemoDlg->AppendLogString(strNotify);   
  73.     }   
  74. }   
  75.   
  76. // 录像、快照任务完成回调函数定义   
  77. void CALLBACK RecordSnapShot_CallBack(DWORD dwUserid, LPCTSTR lpFileName, DWORD dwParam, BOOL bRecordType, LPVOID lpUserValue)   
  78. {   
  79.     CBRAnyChatSDKDemoDlg*   pDemoDlg = (CBRAnyChatSDKDemoDlg*)lpUserValue;   
  80.     if(pDemoDlg)   
  81.     {   
  82.         CString strNotify;   
  83.         strNotify.Format("%s CallBack:dwUserid-%d, FilePathName-%s",bRecordType?"Record":"SnapShot",(int)dwUserid,lpFileName);   
  84.         pDemoDlg->AppendLogString(strNotify);   
  85.     }   
  86. }   
  87.   
  88. // SDK Filter 通信数据回调函数定义   
  89. void CALLBACK SDKFilterData_CallBack(LPBYTE lpBuf, DWORD dwLen, LPVOID lpUserValue)   
  90. {   
  91.     CBRAnyChatSDKDemoDlg*   pDemoDlg = (CBRAnyChatSDKDemoDlg*)lpUserValue;   
  92.     if(pDemoDlg)   
  93.     {   
  94.         CString strNotify;   
  95.         strNotify.Format("SDK Filter CallBack:%s",lpBuf);   
  96.         pDemoDlg->AppendLogString(strNotify);   
  97.     }   
  98. }   
  99.   
  100. /**  
  101.  *  绘制用户视频  
  102.  *  数据来源于回调函数  
  103.  *  @param dwUserid 用户ID号  
  104.  *  @param lpBuf 视频数据缓冲区  
  105.  *  @param dwLen 缓冲区大小  
  106.  *  @param bmiHeader 视频缓冲区的头信息,包含了视频的大小、颜色位数等信息  
  107.  */  
  108. void CBRAnyChatSDKDemoDlg::DrawUserVideo(DWORD dwUserid, LPVOID lpBuf, DWORD dwLen, BITMAPINFOHEADER bmiHeader)   
  109. {   
  110.     // 根据用户ID号找到合适的显示区域   
  111.     DWORD dwSite = -1;   
  112.     for(INT i=0; i<DEMO_SHOW_USER_NUM; i++)   
  113.     {   
  114.         if(m_iUserID[i] == (INT)dwUserid)   
  115.         {   
  116.             dwSite = i;   
  117.             break;   
  118.         }   
  119.     }   
  120.     if(dwSite == -1)   
  121.         return;   
  122.   
  123.     CRect dispRect = m_UserRect[dwSite];   
  124.   
  125.     //构建Bitmap     
  126.     BITMAPINFOHEADER  *lpbmi = (BITMAPINFOHEADER*)malloc(sizeof(BITMAPINFOHEADER)+dwLen);     
  127.     ZeroMemory(lpbmi,sizeof(BITMAPINFOHEADER)+dwLen);   
  128.     memcpy((LPBYTE)lpbmi,&bmiHeader,sizeof(bmiHeader));   
  129.     memcpy(((LPBYTE)lpbmi+sizeof(BITMAPINFOHEADER)),lpBuf,dwLen);     
  130.   
  131.     HDC hdc = ::GetDC(m_hWnd);   
  132.     HDC dcMem = ::CreateCompatibleDC(hdc);     
  133.     HBITMAP hBitmap = CreateDIBitmap(hdc,lpbmi,CBM_INIT,(LPBYTE)lpbmi+sizeof(BITMAPINFOHEADER),(LPBITMAPINFO)lpbmi,DIB_RGB_COLORS);     
  134.     //绘图     
  135.     HBITMAP holdbm = (HBITMAP)SelectObject(dcMem,hBitmap);     
  136.     ::SetStretchBltMode(hdc,COLORONCOLOR);   
  137.     ::StretchBlt(hdc,dispRect.left,dispRect.top,dispRect.Width(),dispRect.Height(),dcMem,0,0,bmiHeader.biWidth,bmiHeader.biHeight,SRCCOPY);   
  138.   
  139.     SelectObject(dcMem,holdbm);     
  140.     ::DeleteDC(dcMem);   
  141.     ::DeleteObject(hBitmap);   
  142.     ::ReleaseDC(m_hWnd,hdc);   
  143.     free(lpbmi);   
  144.     lpbmi = NULL;   
  145. }   
  146.   
  147. BOOL CBRAnyChatSDKDemoDlg::OnInitDialog()   
  148. {   
  149.     CDialog::OnInitDialog();   
  150.   
  151.     // IDM_ABOUTBOX must be in the system command range.   
  152.     ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);   
  153.     ASSERT(IDM_ABOUTBOX < 0xF000);   
  154.   
  155.     CMenu* pSysMenu = GetSystemMenu(FALSE);   
  156.     if (pSysMenu != NULL)   
  157.     {   
  158.         CString strAboutMenu;   
  159.         strAboutMenu.LoadString(IDS_ABOUTBOX);   
  160.         if (!strAboutMenu.IsEmpty())   
  161.         {   
  162.             pSysMenu->AppendMenu(MF_SEPARATOR);   
  163.             pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);   
  164.         }   
  165.     }   
  166.   
  167.     SetIcon(m_hIcon, TRUE);         // Set big icon   
  168.     SetIcon(m_hIcon, FALSE);        // Set small icon   
  169.        
  170.     // 初始化每个视频显示位置信息   
  171.     GetDlgItem(IDC_STATIC_USER0)->ShowWindow(SW_HIDE);   
  172.     GetDlgItem(IDC_STATIC_USER0)->GetClientRect(m_UserRect[0]);     
  173.     GetDlgItem(IDC_STATIC_USER0)->ClientToScreen(m_UserRect[0]);   
  174.     ScreenToClient(m_UserRect[0]);   
  175.   
  176.     GetDlgItem(IDC_STATIC_USER1)->ShowWindow(SW_HIDE);   
  177.     GetDlgItem(IDC_STATIC_USER1)->GetClientRect(m_UserRect[1]);     
  178.     GetDlgItem(IDC_STATIC_USER1)->ClientToScreen(m_UserRect[1]);   
  179.     ScreenToClient(m_UserRect[1]);   
  180.   
  181.     GetDlgItem(IDC_STATIC_USER2)->ShowWindow(SW_HIDE);   
  182.     GetDlgItem(IDC_STATIC_USER2)->GetClientRect(m_UserRect[2]);     
  183.     GetDlgItem(IDC_STATIC_USER2)->ClientToScreen(m_UserRect[2]);   
  184.     ScreenToClient(m_UserRect[2]);   
  185.   
  186.     GetDlgItem(IDC_STATIC_USER3)->ShowWindow(SW_HIDE);   
  187.     GetDlgItem(IDC_STATIC_USER3)->GetClientRect(m_UserRect[3]);     
  188.     GetDlgItem(IDC_STATIC_USER3)->ClientToScreen(m_UserRect[3]);   
  189.     ScreenToClient(m_UserRect[3]);   
  190.   
  191.     // 隐藏录像状态标志   
  192.     GetDlgItem(IDC_STATIC_RECORDSTATE0)->ShowWindow(SW_HIDE);   
  193.     GetDlgItem(IDC_STATIC_RECORDSTATE1)->ShowWindow(SW_HIDE);   
  194.     GetDlgItem(IDC_STATIC_RECORDSTATE2)->ShowWindow(SW_HIDE);   
  195.     GetDlgItem(IDC_STATIC_RECORDSTATE3)->ShowWindow(SW_HIDE);   
  196.        
  197.     for(INT i=0; i<DEMO_SHOW_USER_NUM; i++)   
  198.     {   
  199.         m_iUserID[i] = -1;   
  200.     }   
  201.        
  202.     m_dwTransTaskId = -1;   
  203.   
  204.     m_iPort = 8906;   
  205.     m_iRoomId = 1;   
  206.     SetDlgItemText(IDC_IPADDRESS_SERVER,"demo.anychat.cn");   
  207.     SetDlgItemText(IDC_EDIT_USERNAME,"AnyChat5");   
  208.     UpdateData(FALSE);   
  209.     return TRUE;  // return TRUE  unless you set the focus to a control   
  210. }   
  211.   
  212. void CBRAnyChatSDKDemoDlg::OnSysCommand(UINT nID, LPARAM lParam)   
  213. {   
  214.     if ((nID & 0xFFF0) == IDM_ABOUTBOX)   
  215.     {   
  216.         CAboutDlg dlgAbout;   
  217.         dlgAbout.DoModal();   
  218.     }   
  219.     else  
  220.     {   
  221.         CDialog::OnSysCommand(nID, lParam);   
  222.     }   
  223. }   
  224.   
  225. // If you add a minimize button to your dialog, you will need the code below   
  226. //  to draw the icon.  For MFC applications using the document/view model,   
  227. //  this is automatically done for you by the framework.  
分享到:
评论

相关推荐

    音视频即时通讯demo源码(C#)

    小编最近在开发一款音视频即时通讯软件,在开发过程中,受到了一款demo的启发和帮助,因此将此demo源码分享出来,希望能够帮助到大家。 VS打开这个demo后(AnyChatCSharpDemo.sln)---F5执行报错,会生成文件(\bin\...

    音视频对讲Demo源码

    本资源提供的"音视频对讲Demo源码"是一个基于Android Studio的项目工程,旨在帮助开发者理解和实践音视频通信的实现。 首先,我们要理解音视频对讲的核心技术组件。在Android平台上,通常会用到以下技术: 1. **...

    Android 即时通讯demo

    通过分析源代码,可以学习到如何在实际项目中应用XMPP协议。 总结,基于XMPP的Android即时通讯DEMO涉及到的知识点包括XMPP协议原理、Android客户端开发、连接管理和消息处理、用户身份验证以及安全性等。通过深入...

    融云实时通讯demo

    在“demo-app-android-quick-start-master”这个压缩包中,包含了融云实时通讯Demo的源代码,通过分析和学习这些代码,开发者可以更深入地理解融云SDK的工作原理和集成方法,从而在自己的项目中灵活应用。...

    c#UDP通讯demo.rar

    在"C# UDP通讯demo"中,我们可以看到一个简单的C#实现UDP通信的示例。这个项目可能包含了两个关键部分:一个作为服务器端(监听端),另一个作为客户端(发送端)。下面将详细介绍这两个部分以及相关的知识点。 **...

    源码分享一个开源的即时通信demo,H5即时通讯聊天系统源码

    一个开源的即时通信demo,需要前后端配合使用,主要用于学习交流,为大家提供即时通讯的开发思路,许多功能需要自行开发,开发的初衷旨在快速建立企业内部通讯系统、内网交流、社区交流。 ### 支持功能 - 支持单聊...

    xmpp通讯协议demo

    这个“xmpp通讯协议demo”是展示如何在Android平台上利用XMPP协议进行即时通讯的一个示例项目。它表明开发者使用了Eclipse IDE进行初始开发,并且可以转换为Android Studio(AS)项目以便于进一步的Android开发。 ...

    pjsip最新版本带视频demo

    开发者可以通过研究这个示例项目的源代码,了解如何在实际应用中使用PJSIP进行视频通话的实现。 **优化与注意事项** 在实际应用中,还需要考虑网络条件、设备性能等因素进行优化,例如: - **网络适应性**:通过...

    iphone视频通讯平台 源代码

    可以实现双向音视频交互、电视直播、音视频上传、文字交流、文件传输等功能,提供C++和Objective-C两种编程接口可二次开发,应用程序界面及业务流程可由...SDK包里面提供了Demo程序源代码(基于xcode 4工程)供参考。

    UDP通讯DEMO(C#)

    UDP通讯DEMO(C#)是基于C#编程语言实现的一个通信示例,它演示了如何在Windows和WINCE操作系统上进行用户数据报协议(UDP)的通信。UDP是一种无连接的、不可靠的传输层协议,它在互联网协议族中扮演着重要的角色,...

    及时通讯demo

    这个"及时通讯demo"项目提供了一个基础的即时通讯应用框架,帮助开发者了解和学习如何构建这样的系统。以下是该demo可能包含的关键知识点: 1. **用户注册与登录**:在即时通讯应用中,用户首先需要注册账号并进行...

    iPhone视频通讯系统包

    AnyChat for iPhone基于iOS 4.3研发,目前支持iPhone 3G、iPhone 3GS、iPhone 4、iPad、iPad2等硬件设备,SDK包里面提供了Demo程序源代码(基于xcode 4工程)供参考。 AnyChat for iPhone可与其它平台的AnyChat...

    Android应用源码30套安卓源码合集.zip

    android落花效果+字体渐变的Demo源码.rar android高仿QQ的即时通讯(附带服务端).rar listview 滑动删除(具体效果360手机卫士后台通知).rar “遇见”android应用源码.rar 安卓手机(android)wifi传送文件源码.rar ...

    Myjingle-0.3 Demo源码

    【标题】"Myjingle-0.3 Demo源码"是一个开源项目,它展示了如何使用Google的libjingle库来实现实时通信功能,特别是语言呼叫和音频通话。这个Demo对于开发者来说是一个宝贵的学习资源,它揭示了如何利用XMPP协议进行...

    海康硬盘录像机源码DEMO

    10. **代码优化**:尽管是DEMO,但优化仍然是一个值得考虑的问题,尤其是在处理大量视频数据时。优化可能包括算法改进、内存管理、减少不必要的计算等。 通过研究这个DEMO,开发者可以掌握如何在C++环境中与海康DVR...

    android UDP socket通讯,演示demo

    本DEMO应该包含了上述所有步骤,通过运行和分析源代码,开发者可以更深入地理解Android UDP socket通信的工作原理,从而在自己的项目中灵活运用。同时,注意在实际应用中,应考虑数据的序列化和反序列化、错误处理...

    .NET即时通讯系统源码 聊天系统源码

    功能介绍 ... 2、访客管理(访客黑名单、访客对话) 3、日志管理 (操作日志、异常日志) 4、 系统监控 (实时监控、... 5、网址+‘/demo/demo’,可以查看当前坐席和访客列表需要的话,也可以放在其他网站,供测试调用。

    通讯类demo.

    在学习和使用这个通讯类Demo时,你可以通过阅读代码、运行示例和调试来深入理解这些概念,并将其应用于自己的项目中。同时,博客链接(http://mp.blog.csdn.net/mdeditor/index/79119867)可能提供了更详细的解释和...

    WebRTCDemo android 源代码

    这个是基于WebRTC 2014年5月的trunk源代码,该代码演示在android中如何使用MediaEngine进行视频、音频通讯(包括AECM AGC NS) 在setting中取消loopback并加入内网对方IP,拉开一定距离就可以进行对话。 是个不错的...

    udp网络通讯协议demo

    在"demo2"这个文件中,可能包含了实现上述功能的Java源代码,通过阅读和分析这段代码,可以深入理解如何在Java中实现UDP网络通信,以及在实际应用中如何利用UDP的特点。对于学习和实践Java网络编程,这个示例是一个...

Global site tag (gtag.js) - Google Analytics