由于小编之前使用过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、调用实现代码:
- int iDeviceCount = -1;
- IntPtr[] lpDevicePtrs;
- // 枚举系统所有的视频设备
- int ret = AnyChatCoreSDK.EnumVideoCapture(null, ref iDeviceCount);
- if(ret != 0 || iDeviceCount == 0)
- return;
- lpDevicePtrs = new IntPtr[iDeviceCount];
- ret = AnyChatCoreSDK.EnumVideoCapture(lpDevicePtrs, ref iDeviceCount);
- cbxCamera.Items.Clear();
- foreach (IntPtr p in lpDevicePtrs)
- {
- string device = Marshal.PtrToStringAnsi(p); // 如果是Unicode版本,需要使用:Marshal.PtrToStringUni(p);
- if (string.IsNullOrEmpty(device) == false)
- {
- cbxCamera.Text = device;
- cbxCamera.Items.Add(device);
- }
- }
- // 获取当前视频采集设备
- StringBuilder sb = new StringBuilder(1024);
- AnyChatCoreSDK.GetCurVideoCapture(sb, sb.Capacity);
- if (string.IsNullOrEmpty(sb.ToString()) == false)
- cbxCamera.Text = sb.ToString();
- else if (cbxCamera.Items.Count > 0)
- cbxCamera.Text = cbxCamera.Items[0].ToString();