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.

  1. // ==UserScript==
  2. // @name YouTube 1080p
  3. // @namespace http://www.youtube.com/
  4. // @version 1.4.4
  5. // @description 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.
  6. // @match http://youtube.com/*
  7. // @match https://youtube.com/*
  8. // @match http://www.youtube.com/*
  9. // @match https://www.youtube.com/*
  10. // @grant none
  11. // @run-at document-end
  12. // ==/UserScript==
  13.  
  14.  
  15. youtubeOverride = function (unsafeWindow) {
  16. // qualities = ['auto', 'hd1080', 'hd720', 'large', 'medium', 'small', 'tiny'];
  17. // set the quality desired here:
  18. preferredQuality = 'hd1080';
  19. // overrideMaxAttempts = 30;
  20. overrideTryDelay = 1000;
  21. console.log('override script starting');
  22. if (location.pathname.indexOf("/embed/") === 0) {
  23. var player = unsafeWindow.yt.player.getPlayerByElement(unsafeWindow.document.getElementById("player"));
  24. if (player != null) {
  25. overridePlayer(player);
  26. } else {
  27. console.log('cannot get player api');
  28. }
  29. } else {
  30. tryToOverride();
  31. var target = document.getElementById('player');
  32. var MutationObserver = window.MutationObserver;
  33. var observer = new MutationObserver(function (mutations) {
  34. mutations.forEach(function (mutation) {
  35. if (mutation.target.id === 'player-unavailable') {
  36. console.log('player mutation detected');
  37. var player = unsafeWindow.document.getElementById('movie_player');
  38. if (player != null) {
  39. overridePlayer(player);
  40. } else {
  41. console.log('cannot get player api2');
  42. }
  43. }
  44. });
  45. });
  46. observer.observe(target, { childList: true, subtree: true });
  47. }
  48. function getPlayerApi() {
  49. if (location.pathname.indexOf("/embed/") === 0) {
  50. var player = unsafeWindow.yt.player.getPlayerByElement(unsafeWindow.document.getElementById("player"));
  51. return player;
  52. } else {
  53. return unsafeWindow.document.getElementById('movie_player');
  54. }
  55. }
  56. function tryToOverride(player) {
  57. console.log('quality override starting');
  58.  
  59. player = player != null ? player : getPlayerApi();
  60.  
  61. if (player == null || !('setPlaybackQuality' in player)) {
  62. console.log('error: setPlaybackQuality not available');
  63. return false;
  64. }
  65.  
  66. var qualityLevels = player.getAvailableQualityLevels();
  67. var qualityToSet = null;
  68. for (var i = 0; i < qualityLevels.length; i++) {
  69. if (qualityLevels[i].trim().toLowerCase() === preferredQuality) {
  70. qualityToSet = qualityLevels[i];
  71. break;
  72. }
  73. }
  74. if (qualityToSet == null) {
  75. qualityToSet = qualityLevels[0];
  76. }
  77. if (qualityToSet == null) {
  78. console.log('error: no quality levels available');
  79. return false;
  80. }
  81. player.setPlaybackQuality(qualityToSet);
  82. console.log('set quality to ' + qualityToSet);
  83. return qualityToSet == player.getPlaybackQuality();
  84. }
  85. function overridePlayer(player) {
  86. if (overridePlayer.running) {
  87. return;
  88. }
  89. overridePlayer.running = true;
  90. overrideTimeoutFunc.attempts = 0;
  91. overrideTimeoutFunc();
  92. function overrideTimeoutFunc() {
  93. overrideTimeoutFunc.attempts++;
  94. var success = tryToOverride(player);
  95. if (!success /*&& overrideTimeoutFunc.attempts < overrideMaxAttempts*/) {
  96. setTimeout(overrideTimeoutFunc, overrideTryDelay)
  97. } else {
  98. overridePlayer.running = false;
  99. }
  100. }
  101. }
  102. };
  103.  
  104. (function () {
  105. // inject script into page
  106. if (this.unsafeWindow != null) {
  107. youtubeOverride(unsafeWindow);
  108. } else {
  109. var scriptElem = document.createElement('script');
  110. scriptElem.setAttribute('type', 'text/javascript');
  111. scriptElem.text = '(' + youtubeOverride.toString() + ')(window);';
  112. document.documentElement.appendChild(scriptElem);
  113. document.documentElement.removeChild(scriptElem);
  114. }
  115. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址