使用Chrome、Selenium和Python更改假网络摄像头文件(.y4m)设备名称

nzkunb0c  于 2023-09-28  发布在  Go
关注(0)|答案(1)|浏览(145)

我试图打开Chrome与一个假的网络摄像头文件,这是.y4m如下:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager as cdm

service = Service(cdm().install())
options = Options()
options.add_argument("--use-fake-device-for-media-stream")
options.add_argument("--use-file-for-fake-video-capture=fake_web_cam.y4m")
driver = webdriver.Chrome(service=service, options=options)

它完全可以工作,但问题是当在一些网站中选择此凸轮时,凸轮名称与. y4m文件的路径相同。我找了很多,但没有找到解决这个问题的方法。

2uluyalo

2uluyalo1#

很不幸这是不可能的。通过查看Chromium源,您将发现原因。
link包含最常见的Chrome参数及其在源代码中的引用。如果单击--use-file-for-fake-video-capture,将打开media_switches.cc。检查它的引用,你会看到在file_video_capture_device_factory.cc中有一个函数GetFilePathFromCommandLine

base::FilePath GetFilePathFromCommandLine() {
  base::FilePath command_line_file_path =
      base::CommandLine::ForCurrentProcess()->GetSwitchValuePath(
          switches::kUseFileForFakeVideoCapture);
  return command_line_file_path;
}

通过检查此函数的引用,您可以在同一个文件中看到以下代码:

devices_info.emplace_back(
      VideoCaptureDeviceDescriptor(GetFilePathFromCommandLine().AsUTF8Unsafe(),
                                   kFileVideoCaptureDeviceName, api));

VideoCaptureDeviceDescriptorvideo_capture_device_descriptor.cc中定义如下:

VideoCaptureDeviceDescriptor::VideoCaptureDeviceDescriptor(
    const std::string& display_name,
    const std::string& device_id,
    VideoCaptureApi capture_api,
    const VideoCaptureControlSupport& control_support,
    VideoCaptureTransportType transport_type)
    : device_id(device_id),
      facing(VideoFacingMode::MEDIA_VIDEO_FACING_NONE),
      capture_api(capture_api),
      transport_type(transport_type),
      display_name_(TrimDisplayName(display_name)),
      control_support_(control_support) {}

因此,文件路径默认为display_name,无法更改。
您可以使用其他替代方法从视频文件创建虚拟网络摄像头,例如OBS工作室,SplitCam。

相关问题