YouTube Default Override

change default YouTube video quality

当前为 2014-12-24 提交的版本,查看 最新版本

// ==UserScript==
// @name        YouTube Default Override
// @namespace   http://www.youtube.com/
// @version     1.0
// @description change default YouTube video quality
// @include     http://youtube.com/*
// @include     https://youtube.com/*
// @include     http://www.youtube.com/*
// @include     https://www.youtube.com/*
// @run-at      document-end
// ==/UserScript==


//qualities = ["auto", "hd1080", "hd720", "large", "medium", "small", "tiny"];

youtubeOverride = {
    enabled: true,
    maxAttempts: 50,
    tryTimeout: 333,

    quality: "hd720",
    overrideQuality: function () {
        console.log("quality override starting");
        var player = document.getElementById("movie_player");
        var qualityToSet = null;
        if (player && player.setPlaybackQuality) {
            var qualityLevels = player.getAvailableQualityLevels();
            for (var i = 0; i < qualityLevels.length; i++) {
                if (qualityLevels[i].trim().toLowerCase() === youtubeOverride.quality) {
                    qualityToSet = qualityLevels[i];
                    break;
                }
            }
            if (qualityToSet == null) {
                qualityToSet = qualityLevels[0];
            }
            if (qualityToSet != null) {
            	player.setPlaybackQuality(qualityToSet);
            	console.log("set quality to " + qualityToSet);
            } else {
                console.log("error: no quality levels available");
            }
        } else {
            console.log("cannot get player api");
            console.log(player);
        }
        return qualityToSet != null;
    },

    override: function () {
        if (youtubeOverride.enabled) {
            console.log("override script starting")
            
            var maxAttempts = youtubeOverride.maxAttempts;
            var tryTimeout = youtubeOverride.tryTimeout;

            function callUntilTrue(f, maxAttempts, timeout) {
                var timeoutTryFunc = function () {
                    if (!f()) {
                        if (timeoutTryFunc.attempts < maxAttempts) {
                            timeoutTryFunc.attempts++;
                            setTimeout(timeoutTryFunc, timeout);
                        } else {
                            console.error("ERROR: timeout try failed");
                        }
                    } else {
                        console.log("timeout try succeeded on #" + timeoutTryFunc.attempts);
                    }
                };
                timeoutTryFunc.attempts = 1;
                setTimeout(timeoutTryFunc, 0);
            }

            callUntilTrue(youtubeOverride.overrideQuality, maxAttempts, tryTimeout);
        }
    },
    
    getPlayer: function () {
        return document.getElementById("movie_player");
    },
};

youtubeOverride.override()