您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
WebRTC Spoofer (Logitech Brio 4K & Blue Yeti Mic as Virtual Matrix 4) with Video & Audio Requested Good For Ome.tv an Uhmegle
// ==UserScript== // @name WebRTC Spoofer // @namespace http://tampermonkey.net/ // @version 8.0 // @description WebRTC Spoofer (Logitech Brio 4K & Blue Yeti Mic as Virtual Matrix 4) with Video & Audio Requested Good For Ome.tv an Uhmegle // @author Cxsmo // @match *://*/* // @grant none // @license MIT // ==/UserScript== (function () { 'use strict'; // Forcefully overwrite original methods const originalEnumerateDevices = navigator.mediaDevices.enumerateDevices.bind(navigator.mediaDevices); const originalGetUserMedia = navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices); // Webcam Emulation (Logitech Brio 4K) const brioProperties = { deviceId: "logitech-brio-4k-webcam-id", // Fake device ID groupId: "logitech-brio-group-id", // Fake group ID label: "Logitech BRIO 4K Stream Edition", // Fake webcam label kind: "videoinput", capabilities: { width: 3840, // 4K resolution height: 2160, frameRate: 60, // 60 FPS aspectRatio: 16 / 9, colorDepth: 10, // 10-bit color depth for higher-quality video }, }; // Microphone Emulation (Blue Yeti as Virtual Matrix 4) const blueYetiProperties = { deviceId: "blue-yeti-mic-id", // Fake device ID (for the Virtual Matrix 4 mic) groupId: "blue-yeti-group-id", // Fake group ID label: "Blue Yeti USB Microphone", // Fake mic label kind: "audioinput", capabilities: { sampleRate: 48000, // 48kHz sample rate channelCount: 2, // Stereo sound volume: 100, // Maximum volume }, }; // Override enumerateDevices to ensure fake device data navigator.mediaDevices.enumerateDevices = async function () { const devices = await originalEnumerateDevices(); // Force overriding the device label and IDs for video and audio devices return devices.map((device) => { if (device.kind === "videoinput") { // Force webcam properties (Logitech Brio 4K) return { ...device, deviceId: brioProperties.deviceId, groupId: brioProperties.groupId, label: brioProperties.label, }; } else if (device.kind === "audioinput") { // Force microphone properties to only show the Blue Yeti mic (Virtual Matrix 4) return { ...device, deviceId: blueYetiProperties.deviceId, groupId: blueYetiProperties.groupId, label: blueYetiProperties.label, }; } return device; }); }; // Override getUserMedia to ensure requested constraints match fake properties navigator.mediaDevices.getUserMedia = function (constraints) { // Handle video constraints (Logitech Brio 4K) if (!constraints.video && !constraints.audio) { // If neither audio nor video is requested, default to requesting both constraints.video = { width: { ideal: brioProperties.capabilities.width }, height: { ideal: brioProperties.capabilities.height }, frameRate: { ideal: brioProperties.capabilities.frameRate }, facingMode: "user", // Optional: set to front-facing camera }; } else if (constraints.video) { // If video is requested, apply the Logitech Brio-like settings constraints.video = { width: { ideal: brioProperties.capabilities.width }, height: { ideal: brioProperties.capabilities.height }, frameRate: { ideal: brioProperties.capabilities.frameRate }, facingMode: "user", // Optional: set to front-facing camera ...constraints.video, }; } // Handle audio constraints (Blue Yeti Mic as Virtual Matrix 4) if (!constraints.audio) { // If audio is not requested, apply default Blue Yeti settings constraints.audio = { deviceId: { ideal: blueYetiProperties.deviceId }, channelCount: { ideal: blueYetiProperties.capabilities.channelCount }, sampleRate: { ideal: blueYetiProperties.capabilities.sampleRate }, volume: blueYetiProperties.capabilities.volume, }; } else if (constraints.audio) { // If audio is requested, apply Blue Yeti microphone settings constraints.audio = { deviceId: { ideal: blueYetiProperties.deviceId }, channelCount: { ideal: blueYetiProperties.capabilities.channelCount }, sampleRate: { ideal: blueYetiProperties.capabilities.sampleRate }, volume: blueYetiProperties.capabilities.volume, ...constraints.audio, }; } return originalGetUserMedia(constraints); }; // Override getSettings for MediaStreamTrack to provide fake settings for streams const originalGetSettings = MediaStreamTrack.prototype.getSettings; MediaStreamTrack.prototype.getSettings = function () { const settings = originalGetSettings.call(this); return { ...settings, width: brioProperties.capabilities.width, height: brioProperties.capabilities.height, frameRate: brioProperties.capabilities.frameRate, aspectRatio: brioProperties.capabilities.aspectRatio, colorDepth: brioProperties.capabilities.colorDepth, sampleRate: blueYetiProperties.capabilities.sampleRate, channelCount: blueYetiProperties.capabilities.channelCount, volume: blueYetiProperties.capabilities.volume, }; }; // Add a check for the WebRTC environment and log the details function checkWebRTC() { if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) { console.log("WebRTC is supported on this page."); } else { console.warn("WebRTC is not supported. Some features may not work."); } } // Check WebRTC support on page load checkWebRTC(); // Add validation to block resolution 640x360 and only allow 1080p (1920x1080) or 4K (3840x2160) const originalMediaTrackConstraints = MediaStreamTrack.prototype.getSettings; MediaStreamTrack.prototype.getSettings = function () { const settings = originalMediaTrackConstraints.call(this); // Block 640x360 resolution by not allowing it in constraints if (settings.width === 640 && settings.height === 360) { console.warn("Blocked 640x360 resolution."); return { ...settings, width: 1920, // Force to 1080p resolution height: 1080, }; } // If the resolution is not 640x360, we allow 1080p (1920x1080) or 4K (3840x2160) if (settings.width <= 1920 && settings.height <= 1080) { console.log("Resolution allowed:", settings.width, settings.height); return settings; } else { // If the resolution is higher than 1080p, force to 4K resolution return { ...settings, width: 3840, // Force to Brio 4K resolution height: 2160, }; } }; // Log the result to make sure the spoofing works console.log("WebRTC Spoofer: Logitech Brio 4K webcam and Blue Yeti USB microphone (Virtual Matrix 4) emulation active."); })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址