由于小编之前使用过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();
视频开发技术 视频设备枚举 C#
原文:http://blog.csdn.net/little_rui/article/details/42638413