YouTube 标准画质

Support mobile web YouTube。只允许 YouTube 选择 1080P60、1080P30、720P60、720P30 画质。避免由于网络问题卡顿:高画质用不上费流量、低网速降画质瞎眼睛。

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         YouTube 标准画质
// @description  Support mobile web YouTube。只允许 YouTube 选择 1080P60、1080P30、720P60、720P30 画质。避免由于网络问题卡顿:高画质用不上费流量、低网速降画质瞎眼睛。
// @match        https://www.youtube.com/*
// @match        https://m.youtube.com/*
// @version       1.02
// @author         yzcjd
// @author2       ChatGPT4 辅助
// @namespace   https://greasyfork.org/users/1171320
// @license MIT
// ==/UserScript==


(function() {
  'use strict';

  // 定义优先顺序
  const preferredQualities = ['hd1080', 'hd720'];

  // 监听播放状态变化
  function hookPlayer() {
    const checkPlayer = () => {
      const player = document.getElementById('movie_player');

      if (!player || typeof player.getAvailableQualityLevels !== 'function') {
        setTimeout(checkPlayer, 500);
        return;
      }

      console.log('[YouTube Quality Filter] Player ready, binding events.');

      player.addEventListener('onStateChange', function(state) {
        if (state === 1) { // 播放开始
          console.log('[YouTube Quality Filter] Playing - enforcing quality.');
          enforceQuality(player);
        }
      });

      // 视频切换或重新加载时,也重新检测
      setInterval(() => {
        enforceQuality(player);
      }, 30000); // 每30秒强制一次,确保不会被降回高画质
    };

    checkPlayer();
  }

  function enforceQuality(player) {
    if (!player || typeof player.getAvailableQualityLevels !== 'function') return;

    const levels = player.getAvailableQualityLevels(); // 获取当前可用画质
    console.log('[YouTube Quality Filter] Available qualities:', levels);

    let targetQuality = null;

    if (levels.includes('hd1080')) {
      targetQuality = 'hd1080';
    } else if (levels.includes('hd720')) {
      targetQuality = 'hd720';
    }

    if (targetQuality) {
      console.log('[YouTube Quality Filter] Setting quality to:', targetQuality);
      player.setPlaybackQualityRange(targetQuality, targetQuality);
      player.setPlaybackQuality(targetQuality);
    }
  }

  // 监听YouTube内部的导航完成
  window.addEventListener('yt-navigate-finish', () => {
    console.log('[YouTube Quality Filter] Navigation detected - Re-hooking player.');
    setTimeout(hookPlayer, 1000);
  });

  // 初次加载
  hookPlayer();
})();