设为首页收藏本站

AnyChat技术支持论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

利用视频数据回调函数绘制视频

[复制链接]

21

主题

74

帖子

275

积分

中级会员

Rank: 3Rank: 3

积分
275
跳转到指定楼层
楼主
发表于 2016-1-5 14:38:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好,请问有没有关于利用视频数据回调函数来绘制视频的相关demo(c#)?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

沙发
发表于 2016-1-5 14:47:14 | 只看该作者
您好,视频数据回调函数拿到视频数据之后,Anychat默认自动显示,Windows平台AnyChat视频显示
所以,C#的示例程序参见src\client\c#。
回复 支持 反对

使用道具 举报

21

主题

74

帖子

275

积分

中级会员

Rank: 3Rank: 3

积分
275
板凳
 楼主| 发表于 2016-1-5 14:50:05 | 只看该作者
佰锐科技-邵光清 发表于 2016-1-5 14:47
您好,视频数据回调函数拿到视频数据之后,Anychat默认自动显示,Windows平台AnyChat视频显示
所以,C#的 ...

您好,根据文档说明“如果没有设置自动显示标志,而只设置了回调视频数据(BRAC_FUNC_VIDEO_CBDATA)标志时,AnyChat内部不会显示视频,而是将视频数据通过回调的方式(130. 视频数据回调函数)提交给应用程序,由应用程序自己来绘制;”
由于只有一路视频源,我想多路显示出来,只有利用视频数据回调函数的方法才能显示出来,所以,我想问一下,利用视频数据回调函数绘制视频的方法(c#)?
回复 支持 反对

使用道具 举报

地板
发表于 2016-1-5 15:07:37 | 只看该作者
hk92 发表于 2016-1-5 14:50
您好,根据文档说明“如果没有设置自动显示标志,而只设置了回调视频数据(BRAC_FUNC_VIDEO_CBDATA)标志 ...

您好,可以的,多路显示的视频绘制方面需要您自己来实现。
回复 支持 反对

使用道具 举报

21

主题

74

帖子

275

积分

中级会员

Rank: 3Rank: 3

积分
275
5#
 楼主| 发表于 2016-1-5 15:12:55 | 只看该作者
佰锐科技-邵光清 发表于 2016-1-5 15:07
您好,可以的,多路显示的视频绘制方面需要您自己来实现。

您好,请问有这方面的demo吗(c#)?
回复 支持 反对

使用道具 举报

6#
发表于 2016-1-5 15:23:23 | 只看该作者
hk92 发表于 2016-1-5 15:12
您好,请问有这方面的demo吗(c#)?

您好,一路视频源多路显示,我们没有这个demo,可以自己来实现。
回复 支持 反对

使用道具 举报

21

主题

74

帖子

275

积分

中级会员

Rank: 3Rank: 3

积分
275
7#
 楼主| 发表于 2016-1-5 15:25:01 | 只看该作者
佰锐科技-邵光清 发表于 2016-1-5 15:23
您好,一路视频源多路显示,我们没有这个demo,可以自己来实现。

您好,可以给一点思路吗?
回复 支持 反对

使用道具 举报

8#
发表于 2016-1-5 15:59:43 | 只看该作者
hk92 发表于 2016-1-5 15:25
您好,可以给一点思路吗?

您好,你可以参考如下代码:
  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-11-23 21:47 , Processed in 0.143969 second(s), 22 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

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