为什么不能webrtcfind它build议的捕获器?

我正在C++创build一个webrtc-based Windows应用C++ 。 我正在尝试初始化一个对等peerconnection 。 我被卡在拿取相机的部分。 我正在使用以下代码来查找启动stream媒体的摄像机(从peerconnection客户端示例中复制):

 rtc::scoped_ptr<cricket::DeviceManagerInterface> dev_manager(cricket::DeviceManagerFactory::Create()); if (!dev_manager->Init()) { LOG(LS_ERROR) << "Can't create device manager"; return NULL; } std::vector<cricket::Device> devs; if (!dev_manager->GetVideoCaptureDevices(&devs)) { LOG(LS_ERROR) << "Can't enumerate video devices"; return NULL; } std::vector<cricket::Device>::iterator dev_it = devs.begin(); cricket::VideoCapturer* capturer = NULL; for (; dev_it != devs.end(); ++dev_it) { capturer = dev_manager->CreateVideoCapturer(*dev_it); if (capturer != NULL) break; } 

在此过程之后, capturer是空的。 我浏览代码,看看有什么不对。 dev_manager成功初始化, devs获得一个单一的条目(我的networking摄像头)的名字:

 "logitech HD webcam c270" 

和一个ID:

 "\\\\?\\usb#vid_046d&pid_0825&mi_00#7&2dbd1a82&1&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\\{bbefb6c7-2fc4-4139-bb8b-a58bba724083}" 

但是在CreateVideoCapturer()调用之后, capturer仍然是空的。 我在控制台中得到一个警告:

 Warning(webrtcvideocapturer.cc:175): Failed to find capturer for id: \\?\usb#vid_046d&pid_0825&mi_00#7&2dbd1a82&1&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\{bbefb6c7-2fc4-4139-bb8b-a58bba724083} 

我检查了,如果我得到devs ,这一场比赛,他们这样做的ID。 我的应用程序的整个日志可以在这个pastebin中find。 正如您所看到的,在尝试将相机分配为捕捉器并失败后,应用程序在videosource.cc某个assert(capturer != NULL)调用上videosource.cc

相机没有使用,也不是缺陷。 peerconnection客户端示例完美工作,并使用相同的代码。 我想我错过了webrtc初始化的一些步骤,但我无法find哪一步。

编辑附加信息

我正在debugging通过图书馆。 在第160行的webrtcvideocapturer.cc中有以下代码:

 int num_cams = info->NumberOfDevices(); char vcm_id[256] = ""; bool found = false; for (int index = 0; index < num_cams; ++index) { char vcm_name[256]; int32 i = info->GetDeviceName(index, vcm_name, ARRAY_SIZE(vcm_name), vcm_id, ARRAY_SIZE(vcm_id)); if (i != -1) { if (device.name == reinterpret_cast<char*>(vcm_name)) { found = true; break; } } } if (!found) { LOG(LS_WARNING) << "Failed to find capturer for id: " << device.id; factory_->DestroyDeviceInfo(info); return false; } 

这部分有两个问题。 首先,如果我进入info->NumberOfDevices()它告诉我,该函数的唯一内容是行return 0; 。 我试图在那里硬编码,至less进入for循环。 然后当我进入info->GetDeviceName()调用它显示我该函数的内容是return -1;

这两个函数意味着由一个从webrtc::VideoCaptureModule::DeviceInfoinheritance的类来实现,所以显然有一些没有初始化的东西需要初始化。 试图拿到相机之前我还需要做些什么?

你链接了哪些库?

由于Google WebRTC源代码正在迅速变化,因此很难将问题追溯到源代码级别。

但是我记得当我不小心将外部捕获模块库(video_capture_module_impl ??)或者(我不确定)省略内部impl(video_capture_module_internal_impl ??)时发生了几乎相同的问题。