当前位置: 代码迷 >> C# >> 视频开发技术 视频设备枚举 C
  详细解决方案

视频开发技术 视频设备枚举 C

热度:304   发布时间:2016-05-05 05:12:27.0
视频开发技术 视频设备枚举 C#

由于小编之前使用过BR_Chat的音视频解决方案作视频会议系统开发,所以这里也就以当时的环境和处理机制简单做一个介绍。

1、BR_Chat-枚举本地视频采集设备-方法概述:
     DWORD BRAC_EnumVideoCapture(TCHAR** lpDeviceName, DWORD&
     dwDeviceNum);
     功能:枚举本地视频采集设备
     返回值:0 表示成功,否则为出错代码
参数:
lpDeviceName
视频设备名称,可为空,表示只获取设备数量;
dwDeviceNum
视频设备数量;
备注:
      该方法将会在内部分配缓冲区,外部使用完成之后,必需手工释放这些缓冲区,否则会造成内存泄露,由于内部采用了“GlobalAlloc”来分配高端内存,故外部需要调用“GlobalFree”来释放,而不能是 delete 或 free 方法,具体使用方法请参考BR_Chat SDK中 Demo 程序的源代码,SDK/src目录。

2、调用实现代码:

  1. int iDeviceCount = -1;
  2. IntPtr[] lpDevicePtrs;

  3. // 枚举系统所有的视频设备
  4. int ret = AnyChatCoreSDK.EnumVideoCapture(null, ref iDeviceCount);
  5. if(ret != 0 || iDeviceCount == 0)
  6.         return;
  7. lpDevicePtrs = new IntPtr[iDeviceCount];
  8. ret = AnyChatCoreSDK.EnumVideoCapture(lpDevicePtrs, ref iDeviceCount);

  9. cbxCamera.Items.Clear();
  10. foreach (IntPtr p in lpDevicePtrs)
  11. {
  12.         string device = Marshal.PtrToStringAnsi(p);    // 如果是Unicode版本,需要使用:Marshal.PtrToStringUni(p);
  13.         if (string.IsNullOrEmpty(device) == false)
  14.         {
  15.                 cbxCamera.Text = device;
  16.                 cbxCamera.Items.Add(device);
  17.         }
  18. }

  19. // 获取当前视频采集设备
  20. StringBuilder sb = new StringBuilder(1024);
  21. AnyChatCoreSDK.GetCurVideoCapture(sb, sb.Capacity);
  22. if (string.IsNullOrEmpty(sb.ToString()) == false)
  23.         cbxCamera.Text = sb.ToString();
  24. else if (cbxCamera.Items.Count > 0)
  25.         cbxCamera.Text = cbxCamera.Items[0].ToString();
  相关解决方案