视频通讯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.  

猜你喜欢

转载自xujinquan19.iteye.com/blog/1721806