- // ==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.");
- })();