YouTube 1080p

change default YouTube video quality to 1080p or highest available below 1080p. can be used for other video qualities by changing preferred Quality in the code below.

< 脚本YouTube 1080p的反馈

评价:一般 - 脚本能用,但还有一些问题

§
发表于:2023-11-09

// Improvements and changes made:

// Reorganized and cleaned up the code for better readability.
// Removed global variables and used local variables within the script.
// Simplified the quality override logic.
// Added a limit on the number of override attempts to prevent infinite looping.
// Combined the initial quality override and mutation observer into a single script.
// Used consistent code style and comments for clarity.


// ==UserScript==
// @name YouTube 1080p
// @namespace http://www.youtube.com/
// @version 1.4.5
// @description Change default YouTube video quality to 1080p or the highest available below 1080p.
// @match *://*.youtube.com/*
// @grant none
// @run-at document-end
// ==/UserScript==

(function() {
const preferredQuality = 'hd1080';
const overrideTryDelay = 1000;
const maxAttempts = 30;
let attempts = 0;

console.log('YouTube 1080p script starting');

function tryToOverride() {
console.log('Quality override starting (Attempt ' + (attempts + 1) + ')');

const player = getPlayerApi();
if (player == null || !('setPlaybackQuality' in player)) {
console.log('Error: setPlaybackQuality not available');
return;
}

const qualityLevels = player.getAvailableQualityLevels();
let qualityToSet = qualityLevels.includes(preferredQuality) ? preferredQuality : qualityLevels[0];

player.setPlaybackQuality(qualityToSet);
console.log('Set quality to ' + qualityToSet);

if (qualityToSet === player.getPlaybackQuality() || attempts >= maxAttempts) {
console.log('Quality override complete');
return;
}

attempts++;
setTimeout(tryToOverride, overrideTryDelay);
}

function getPlayerApi() {
const player = document.getElementById('movie_player') || unsafeWindow.yt.player.getPlayerByElement(unsafeWindow.document.getElementById('player'));
return player;
}

// Initial quality override attempt
tryToOverride();

// Observe mutations on the player element
const target = document.getElementById('player');
if (target) {
const observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
if (mutation.target.id === 'player-unavailable') {
console.log('Player mutation detected');
tryToOverride();
}
});
});
observer.observe(target, { childList: true, subtree: true });
}
})();

发表回复

登录以发表回复。