设为首页收藏本站

AnyChat技术支持论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 2542|回复: 1
打印 上一主题 下一主题

视频数据回调函数

[复制链接]

21

主题

74

帖子

275

积分

中级会员

Rank: 3Rank: 3

积分
275
跳转到指定楼层
楼主
发表于 2015-12-13 11:13:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好,能举个例子说明怎样通过客户端回调函数得到输出用户原始的视频采样帧数据YUV吗?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

沙发
发表于 2015-12-13 11:53:51 | 只看该作者
您好,请您参考视频回调API的说明,
  1. /**
  2. *        视频数据扩展回调(增加时间戳)
  3. *        @param dwUserid 用户ID号
  4. *        @param lpBuf 视频数据缓冲区
  5. *        @param dwLen 缓冲区大小
  6. *        @param bmiHeader 视频缓冲区的头信息,包含了视频的大小、颜色位数等信息
  7. *        @param dwTimeStamp 时间戳
  8. */
  9. void CALLBACK OnAnyChatVideoDataExCallBack(DWORD dwUserid, LPVOID lpBuf, DWORD dwLen, BITMAPINFOHEADER bmiHeader, DWORD dwTimeStamp, LPVOID lpUserValue)
  10. {
  11.         TRACE("VideoDataExCallBack: userid:%d, timestamp:%d\r\n", (int)dwUserid, dwTimeStamp);
  12.         CAnyChatInputVideoDlg* lpDlg = (CAnyChatInputVideoDlg*)lpUserValue;
  13.         CRect dispRect;
  14.         HWND hWnd;
  15.         if(lpDlg->m_dwRemoteUserId == dwUserid && dwUserid != -1)                                        // 远程用户
  16.         {
  17.                 hWnd = lpDlg->GetDlgItem(IDC_STATIC_REMOTEVIDEO)->GetSafeHwnd();
  18.                 lpDlg->GetDlgItem(IDC_STATIC_REMOTEVIDEO)->GetClientRect(dispRect);
  19.         }
  20.         else                                                                                                                                // 本地用户
  21.         {
  22.                 hWnd = lpDlg->GetDlgItem(IDC_STATIC_LOCALVIDEO)->GetSafeHwnd();
  23.                 lpDlg->GetDlgItem(IDC_STATIC_LOCALVIDEO)->GetClientRect(dispRect);
  24.         }
  25.        
  26.         //构建Bitmap  
  27.         BITMAPINFOHEADER  *lpbmi = (BITMAPINFOHEADER*)malloc(sizeof(BITMAPINFOHEADER)+dwLen);  
  28.         ZeroMemory(lpbmi,sizeof(BITMAPINFOHEADER)+dwLen);
  29.     memcpy((LPBYTE)lpbmi,&bmiHeader,sizeof(BITMAPINFOHEADER));
  30.         memcpy(((LPBYTE)lpbmi+sizeof(BITMAPINFOHEADER)),lpBuf,dwLen);  
  31.        
  32.         HDC hdc = ::GetDC(hWnd);
  33.         HDC dcMem = ::CreateCompatibleDC(hdc);  
  34.         HBITMAP hBitmap = CreateDIBitmap(hdc,lpbmi,CBM_INIT,(LPBYTE)lpbmi+sizeof(BITMAPINFOHEADER),(LPBITMAPINFO)lpbmi,DIB_RGB_COLORS);  
  35.         //绘图  
  36.         HBITMAP holdbm = (HBITMAP)SelectObject(dcMem,hBitmap);  
  37.         ::SetStretchBltMode(hdc,COLORONCOLOR);
  38.         ::StretchBlt(hdc,dispRect.left,dispRect.top,dispRect.Width(),dispRect.Height(),dcMem,0,0,bmiHeader.biWidth,bmiHeader.biHeight,SRCCOPY);
  39.        
  40.         SelectObject(dcMem,holdbm);  
  41.         ::DeleteDC(dcMem);
  42.         ::DeleteObject(hBitmap);
  43.         ::ReleaseDC(hWnd,hdc);
  44.         free(lpbmi);
  45.         lpbmi = NULL;
  46. }
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|AnyChat ( 粤ICP备13022410号-1 )  

GMT+8, 2024-4-20 09:16 , Processed in 0.105477 second(s), 21 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表