您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Use codecs with hardware accleration supported for media playback on YouTube
// ==UserScript== // @name YouTube Codecs - Hardware Acceleration Only // @name:zh-TW YouTube Codecs - Hardware Acceleration Only // @name:zh-HK YouTube Codecs - Hardware Acceleration Only // @name:zh-CN YouTube Codecs - Hardware Acceleration Only // @name:ja YouTube Codecs - Hardware Acceleration Only // @name:ko YouTube Codecs - Hardware Acceleration Only // @name:vi YouTube Codecs - Hardware Acceleration Only // @name:de YouTube Codecs - Hardware Acceleration Only // @name:fr YouTube Codecs - Hardware Acceleration Only // @name:it YouTube Codecs - Hardware Acceleration Only // @name:es YouTube Codecs - Hardware Acceleration Only // @description Use codecs with hardware accleration supported for media playback on YouTube // @description:zh-TW Use codecs with hardware accleration supported for media playback on YouTube // @description:zh-HK Use codecs with hardware accleration supported for media playback on YouTube // @description:zh-CN Use codecs with hardware accleration supported for media playback on YouTube // @description:ja Use codecs with hardware accleration supported for media playback on YouTube // @description:ko Use codecs with hardware accleration supported for media playback on YouTube // @description:vi Use codecs with hardware accleration supported for media playback on YouTube // @description:de Use codecs with hardware accleration supported for media playback on YouTube // @description:fr Use codecs with hardware accleration supported for media playback on YouTubee // @description:it Use codecs with hardware accleration supported for media playback on YouTube // @description:es Use codecs with hardware accleration supported for media playback on YouTube // @namespace http://tampermonkey.net/ // @version 0.0.2 // @author CY Fung // @match https://www.youtube.com/* // @match https://www.youtube.com/embed/* // @match https://www.youtube-nocookie.com/embed/* // @exclude https://www.youtube.com/live_chat* // @exclude https://www.youtube.com/live_chat_replay* // @exclude /^https?://\S+\.(txt|png|jpg|jpeg|gif|xml|svg|manifest|log|ini)[^\/]*$/ // @icon https://www.google.com/s2/favicons?sz=64&domain=youtube.com // @grant none // @run-at document-start // @license MIT // // @compatible firefox Violentmonkey // @compatible firefox Tampermonkey // @compatible firefox FireMonkey // @compatible chrome Violentmonkey // @compatible chrome Tampermonkey // @compatible opera Violentmonkey // @compatible opera Tampermonkey // @compatible safari Stay // @compatible edge Violentmonkey // @compatible edge Tampermonkey // @compatible brave Violentmonkey // @compatible brave Tampermonkey // // @unwrap // @allFrames true // @inject-into page // ==/UserScript== (function (__Promise__) { 'use strict'; /** @type {globalThis.PromiseConstructor} */ const Promise = (async () => { })().constructor; // YouTube hacks Promise in WaterFox Classic and "Promise.resolve(0)" nevers resolve. if (typeof VideoEncoder !== 'function' || typeof VideoEncoder.isConfigSupported !== 'function') { console.error('VideoEncoder.isConfigSupported is not supported'); return; } const storageKey = '__codecs_vvgZHhgVKfAlY0__'; let useCache = false; let useAV1 = false; const getMap = () => { const v = localStorage[storageKey] if (v) { try { const obj = JSON.parse(v); const resMap = new Map(Object.entries(obj)); useCache = true; return resMap; } catch (e) { } } return new Map(); } const objectKey = '__codecs_qyg8YVnvXJZ9E5__'; const __codecs__ = window[objectKey] || (window[objectKey] = getMap()); const testCodec = async (codec) => { if (!codec) return null; if (__codecs__.has(codec)) return __codecs__.get(codec); __codecs__.set(codec, null); const config = { codec: codec, hardwareAcceleration: 'prefer-hardware', width: 1920, height: 1080, bitrate: 12_000_000, bitrateMode: "variable", framerate: 60, sampleRate: 48000, numberOfChannels: 2, }; let supported = false; try { const resV = await VideoDecoder.isConfigSupported(config); const resA = await AudioDecoder.isConfigSupported(config); if (resV.supported === true || resA.supported === true) { supported = true; } } catch (e) { console.warn(e) } __codecs__.set(codec, supported); return supported; } const getCodecResult = (codec) => { if (codec.length === 30 && /^av01\.0\.\d\dM\.\d\d\b/.test(`${codec}`)) { // av01.0.05M.08.0.110.05.01.06.0 codec = codec.substring(0, 13); // av01.0.05M.08 } let q = __codecs__.get(codec); return q; } // reference: https://cobalt.googlesource.com/cobalt/+/refs/tags/24.lts.40/starboard/nplb/media_can_play_mime_and_key_system_test_helpers.h // https://cconcolato.github.io/media-mime-support/mediacapabilities.html if (useCache) { console.log('[yt-codecs-hardware-acceleration-only] (init) load from cache') } else { Promise.all([ "avc1.420034", "hvc1.1.6.L123.00", "vp8", // "vp09.00.10.08", // "av01.0.04M.08", "vp09.02.51.10.01.09.16.09.00", "vp09.02.51.10.01.09.99.99.00", "vp09.02.50.10.01.09.16.09.00", "vp09.02.50.10.01.09.99.99.00", "vp09.02.41.10.01.09.16.09.00", "vp09.02.41.10.01.09.99.99.00", "vp09.02.40.10.01.09.16.09.00", "vp09.02.40.10.01.09.99.99.00", "vp09.02.31.10.01.09.16.09.00", "vp09.02.31.10.01.09.99.09.00", "vp09.02.30.10.01.09.16.09.00", "vp09.02.30.10.01.09.99.09.00", "vp09.02.21.10.01.09.16.09.00", "vp09.02.21.10.01.09.99.09.00", "vp09.02.11.10.01.09.16.09.00", "vp09.02.11.10.01.09.99.09.00", "vp09.02.10.10.01.09.16.09.00", "vp09.02.10.10.01.09.99.09.00", "mp4a.40.5", "mp4a.40.2", "opus", "vp9", "vp09.00.51.08.01.01.01.01.00", "vp09.00.51.08", "vp09.00.50.08", "vp09.00.41.08", "vp09.00.40.08", "vp09.00.31.08", "vp09.00.30.08", "vp09.00.21.08", "vp09.00.20.08", "vp09.00.11.08", "vp09.00.10.08", "avc1.640028", "avc1.4d401e", "avc1.4d4015", "avc1.4d400c", "avc1.42001E", "avc1.4d401f", "avc1.64001F", "avc1.4d4020", "avc1.64002a", "avc1.64002A", "avc1.4D4020", "avc1.4D401F", "avc1.4D401E", "avc1.4D4015", "avc1.4D400C", "avc1.4d002a", "avc1.4d0028", "avc1.6e0034", "av01.0.00M.08", "av01.0.01M.08", "av01.0.02M.08", "av01.0.03M.08", "av01.0.04M.08", "av01.0.05M.08", "av01.0.06M.08", "av01.0.07M.08", "av01.0.08M.08", "av01.0.09M.08", "av01.0.12M.08", "av01.0.13M.08", "av01.0.14M.08", "av01.0.15M.08", "av01.0.16M.08", "av01.0.17M.08", "av01.0.18M.08", "av01.0.19M.08", "av01.0.00M.10", "av01.0.01M.10", "av01.0.02M.10", "av01.0.03M.10", "av01.0.04M.10", "av01.0.05M.10", "av01.0.06M.10", "av01.0.07M.10", "av01.0.08M.10", "av01.0.09M.10", "av01.0.12M.10", "av01.0.13M.10", "av01.0.14M.10", "av01.0.15M.10", "av01.0.16M.10", "av01.0.17M.10", "av01.0.18M.10", "av01.0.19M.10", /* "av01.0.00M.10.0.110.09.16.09.0", "av01.0.01M.10.0.110.09.16.09.0", "av01.0.02M.10.0.110.09.16.09.0", "av01.0.03M.10.0.110.09.16.09.0", "av01.0.04M.10.0.110.09.16.09.0", "av01.0.05M.10.0.110.09.16.09.0", "av01.0.06M.10.0.110.09.16.09.0", "av01.0.07M.10.0.110.09.16.09.0", "av01.0.08M.10.0.110.09.16.09.0", "av01.0.09M.10.0.110.09.16.09.0", "av01.0.12M.10.0.110.09.16.09.0", "av01.0.13M.10.0.110.09.16.09.0", "av01.0.14M.10.0.110.09.16.09.0", "av01.0.15M.10.0.110.09.16.09.0", "av01.0.16M.10.0.110.09.16.09.0", "av01.0.17M.10.0.110.09.16.09.0", "av01.0.18M.10.0.110.09.16.09.0", "av01.0.19M.10.0.110.09.16.09.0", "av01.0.00M.08.0.110.05.01.06.0", "av01.0.01M.08.0.110.05.01.06.0", "av01.0.02M.08.0.110.05.01.06.0", "av01.0.03M.08.0.110.05.01.06.0", "av01.0.04M.08.0.110.05.01.06.0", "av01.0.05M.08.0.110.05.01.06.0", "av01.0.06M.08.0.110.05.01.06.0", "av01.0.07M.08.0.110.05.01.06.0", "av01.0.08M.08.0.110.05.01.06.0", "av01.0.09M.08.0.110.05.01.06.0", "av01.0.12M.08.0.110.05.01.06.0", "av01.0.13M.08.0.110.05.01.06.0", "av01.0.14M.08.0.110.05.01.06.0", "av01.0.15M.08.0.110.05.01.06.0", "av01.0.16M.08.0.110.05.01.06.0", "av01.0.17M.08.0.110.05.01.06.0", "av01.0.18M.08.0.110.05.01.06.0", "av01.0.19M.08.0.110.05.01.06.0", "av01.0.00M.08.0.110.06.01.06.0", "av01.0.01M.08.0.110.06.01.06.0", "av01.0.02M.08.0.110.06.01.06.0", "av01.0.03M.08.0.110.06.01.06.0", "av01.0.04M.08.0.110.06.01.06.0", "av01.0.05M.08.0.110.06.01.06.0", "av01.0.06M.08.0.110.06.01.06.0", "av01.0.07M.08.0.110.06.01.06.0", "av01.0.08M.08.0.110.06.01.06.0", "av01.0.09M.08.0.110.06.01.06.0", "av01.0.12M.08.0.110.06.01.06.0", "av01.0.13M.08.0.110.06.01.06.0", "av01.0.14M.08.0.110.06.01.06.0", "av01.0.15M.08.0.110.06.01.06.0", "av01.0.16M.08.0.110.06.01.06.0", "av01.0.17M.08.0.110.06.01.06.0", "av01.0.18M.08.0.110.06.01.06.0", "av01.0.19M.08.0.110.06.01.06.0", */ "av01.0.00M.08", "av01.0.00M.10", "av01.0.00M.12", "av01.0.00H.08", "av01.0.00H.10", "av01.0.00H.12", "av01.0.01M.08", "av01.0.01M.10", "av01.0.01M.12", "av01.0.01H.08", "av01.0.01H.10", "av01.0.01H.12", "av01.0.02M.08", "av01.0.02M.10", "av01.0.02M.12", "av01.0.02H.08", "av01.0.02H.10", "av01.0.02H.12", "av01.0.03M.08", "av01.0.03M.10", "av01.0.03M.12", "av01.0.03H.08", "av01.0.03H.10", "av01.0.03H.12", "av01.0.04M.08", "av01.0.04M.10", "av01.0.04M.12", "av01.0.04H.08", "av01.0.04H.10", "av01.0.04H.12", "av01.0.05M.08", "av01.0.05M.10", "av01.0.05M.12", "av01.0.05H.08", "av01.0.05H.10", "av01.0.05H.12", "av01.0.06M.08", "av01.0.06M.10", "av01.0.06M.12", "av01.0.06H.08", "av01.0.06H.10", "av01.0.06H.12", "av01.0.07M.08", "av01.0.07M.10", "av01.0.07M.12", "av01.0.07H.08", "av01.0.07H.10", "av01.0.07H.12", "av01.0.08M.08", "av01.0.08M.10", "av01.0.08M.12", "av01.0.08H.08", "av01.0.08H.10", "av01.0.08H.12", "av01.0.09M.08", "av01.0.09M.10", "av01.0.09M.12", "av01.0.09H.08", "av01.0.09H.10", "av01.0.09H.12", "av01.0.10M.08", "av01.0.10M.10", "av01.0.10M.12", "av01.0.10H.08", "av01.0.10H.10", "av01.0.10H.12", "av01.0.11M.08", "av01.0.11M.10", "av01.0.11M.12", "av01.0.11H.08", "av01.0.11H.10", "av01.0.11H.12", "av01.0.12M.08", "av01.0.12M.10", "av01.0.12M.12", "av01.0.12H.08", "av01.0.12H.10", "av01.0.12H.12", "av01.0.13M.08", "av01.0.13M.10", "av01.0.13M.12", "av01.0.13H.08", "av01.0.13H.10", "av01.0.13H.12", "av01.0.14M.08", "av01.0.14M.10", "av01.0.14M.12", "av01.0.14H.08", "av01.0.14H.10", "av01.0.14H.12", "av01.0.15M.08", "av01.0.15M.10", "av01.0.15M.12", "av01.0.15H.08", "av01.0.15H.10", "av01.0.15H.12", "av01.0.16M.08", "av01.0.16M.10", "av01.0.16M.12", "av01.0.16H.08", "av01.0.16H.10", "av01.0.16H.12", "av01.0.17M.08", "av01.0.17M.10", "av01.0.17M.12", "av01.0.17H.08", "av01.0.17H.10", "av01.0.17H.12", "av01.0.18M.08", "av01.0.18M.10", "av01.0.18M.12", "av01.0.18H.08", "av01.0.18H.10", "av01.0.18H.12", "av01.0.19M.08", "av01.0.19M.10", "av01.0.19M.12", "av01.0.19H.08", "av01.0.19H.10", "av01.0.19H.12", "av01.0.20M.08", "av01.0.20M.10", "av01.0.20M.12", "av01.0.20H.08", "av01.0.20H.10", "av01.0.20H.12", "av01.0.21M.08", "av01.0.21M.10", "av01.0.21M.12", "av01.0.21H.08", "av01.0.21H.10", "av01.0.21H.12", "av01.0.22M.08", "av01.0.22M.10", "av01.0.22M.12", "av01.0.22H.08", "av01.0.22H.10", "av01.0.22H.12", "av01.0.23M.08", "av01.0.23M.10", "av01.0.23M.12", "av01.0.23H.08", "av01.0.23H.10", "av01.0.23H.12", "av01.0.31M.08", "av01.0.31M.10", "av01.0.31M.12", "av01.0.31H.08", "av01.0.31H.10", "av01.0.31H.12", "av01.1.00M.08", "av01.1.00M.10", "av01.1.00M.12", "av01.1.00H.08", "av01.1.00H.10", "av01.1.00H.12", "av01.1.01M.08", "av01.1.01M.10", "av01.1.01M.12", "av01.1.01H.08", "av01.1.01H.10", "av01.1.01H.12", "av01.1.02M.08", "av01.1.02M.10", "av01.1.02M.12", "av01.1.02H.08", "av01.1.02H.10", "av01.1.02H.12", "av01.1.03M.08", "av01.1.03M.10", "av01.1.03M.12", "av01.1.03H.08", "av01.1.03H.10", "av01.1.03H.12", "av01.1.04M.08", "av01.1.04M.10", "av01.1.04M.12", "av01.1.04H.08", "av01.1.04H.10", "av01.1.04H.12", "av01.1.05M.08", "av01.1.05M.10", "av01.1.05M.12", "av01.1.05H.08", "av01.1.05H.10", "av01.1.05H.12", "av01.1.06M.08", "av01.1.06M.10", "av01.1.06M.12", "av01.1.06H.08", "av01.1.06H.10", "av01.1.06H.12", "av01.1.07M.08", "av01.1.07M.10", "av01.1.07M.12", "av01.1.07H.08", "av01.1.07H.10", "av01.1.07H.12", "av01.1.08M.08", "av01.1.08M.10", "av01.1.08M.12", "av01.1.08H.08", "av01.1.08H.10", "av01.1.08H.12", "av01.1.09M.08", "av01.1.09M.10", "av01.1.09M.12", "av01.1.09H.08", "av01.1.09H.10", "av01.1.09H.12", "av01.1.10M.08", "av01.1.10M.10", "av01.1.10M.12", "av01.1.10H.08", "av01.1.10H.10", "av01.1.10H.12", "av01.1.11M.08", "av01.1.11M.10", "av01.1.11M.12", "av01.1.11H.08", "av01.1.11H.10", "av01.1.11H.12", "av01.1.12M.08", "av01.1.12M.10", "av01.1.12M.12", "av01.1.12H.08", "av01.1.12H.10", "av01.1.12H.12", "av01.1.13M.08", "av01.1.13M.10", "av01.1.13M.12", "av01.1.13H.08", "av01.1.13H.10", "av01.1.13H.12", "av01.1.14M.08", "av01.1.14M.10", "av01.1.14M.12", "av01.1.14H.08", "av01.1.14H.10", "av01.1.14H.12", "av01.1.15M.08", "av01.1.15M.10", "av01.1.15M.12", "av01.1.15H.08", "av01.1.15H.10", "av01.1.15H.12", "av01.1.16M.08", "av01.1.16M.10", "av01.1.16M.12", "av01.1.16H.08", "av01.1.16H.10", "av01.1.16H.12", "av01.1.17M.08", "av01.1.17M.10", "av01.1.17M.12", "av01.1.17H.08", "av01.1.17H.10", "av01.1.17H.12", "av01.1.18M.08", "av01.1.18M.10", "av01.1.18M.12", "av01.1.18H.08", "av01.1.18H.10", "av01.1.18H.12", "av01.1.19M.08", "av01.1.19M.10", "av01.1.19M.12", "av01.1.19H.08", "av01.1.19H.10", "av01.1.19H.12", "av01.1.20M.08", "av01.1.20M.10", "av01.1.20M.12", "av01.1.20H.08", "av01.1.20H.10", "av01.1.20H.12", "av01.1.21M.08", "av01.1.21M.10", "av01.1.21M.12", "av01.1.21H.08", "av01.1.21H.10", "av01.1.21H.12", "av01.1.22M.08", "av01.1.22M.10", "av01.1.22M.12", "av01.1.22H.08", "av01.1.22H.10", "av01.1.22H.12", "av01.1.23M.08", "av01.1.23M.10", "av01.1.23M.12", "av01.1.23H.08", "av01.1.23H.10", "av01.1.23H.12", "av01.1.31M.08", "av01.1.31M.10", "av01.1.31M.12", "av01.1.31H.08", "av01.1.31H.10", "av01.1.31H.12", "av01.2.00M.08", "av01.2.00M.10", "av01.2.00M.12", "av01.2.00H.08", "av01.2.00H.10", "av01.2.00H.12", "av01.2.01M.08", "av01.2.01M.10", "av01.2.01M.12", "av01.2.01H.08", "av01.2.01H.10", "av01.2.01H.12", "av01.2.02M.08", "av01.2.02M.10", "av01.2.02M.12", "av01.2.02H.08", "av01.2.02H.10", "av01.2.02H.12", "av01.2.03M.08", "av01.2.03M.10", "av01.2.03M.12", "av01.2.03H.08", "av01.2.03H.10", "av01.2.03H.12", "av01.2.04M.08", "av01.2.04M.10", "av01.2.04M.12", "av01.2.04H.08", "av01.2.04H.10", "av01.2.04H.12", "av01.2.05M.08", "av01.2.05M.10", "av01.2.05M.12", "av01.2.05H.08", "av01.2.05H.10", "av01.2.05H.12", "av01.2.06M.08", "av01.2.06M.10", "av01.2.06M.12", "av01.2.06H.08", "av01.2.06H.10", "av01.2.06H.12", "av01.2.07M.08", "av01.2.07M.10", "av01.2.07M.12", "av01.2.07H.08", "av01.2.07H.10", "av01.2.07H.12", "av01.2.08M.08", "av01.2.08M.10", "av01.2.08M.12", "av01.2.08H.08", "av01.2.08H.10", "av01.2.08H.12", "av01.2.09M.08", "av01.2.09M.10", "av01.2.09M.12", "av01.2.09H.08", "av01.2.09H.10", "av01.2.09H.12", "av01.2.10M.08", "av01.2.10M.10", "av01.2.10M.12", "av01.2.10H.08", "av01.2.10H.10", "av01.2.10H.12", "av01.2.11M.08", "av01.2.11M.10", "av01.2.11M.12", "av01.2.11H.08", "av01.2.11H.10", "av01.2.11H.12", "av01.2.12M.08", "av01.2.12M.10", "av01.2.12M.12", "av01.2.12H.08", "av01.2.12H.10", "av01.2.12H.12", "av01.2.13M.08", "av01.2.13M.10", "av01.2.13M.12", "av01.2.13H.08", "av01.2.13H.10", "av01.2.13H.12", "av01.2.14M.08", "av01.2.14M.10", "av01.2.14M.12", "av01.2.14H.08", "av01.2.14H.10", "av01.2.14H.12", "av01.2.15M.08", "av01.2.15M.10", "av01.2.15M.12", "av01.2.15H.08", "av01.2.15H.10", "av01.2.15H.12", "av01.2.16M.08", "av01.2.16M.10", "av01.2.16M.12", "av01.2.16H.08", "av01.2.16H.10", "av01.2.16H.12", "av01.2.17M.08", "av01.2.17M.10", "av01.2.17M.12", "av01.2.17H.08", "av01.2.17H.10", "av01.2.17H.12", "av01.2.18M.08", "av01.2.18M.10", "av01.2.18M.12", "av01.2.18H.08", "av01.2.18H.10", "av01.2.18H.12", "av01.2.19M.08", "av01.2.19M.10", "av01.2.19M.12", "av01.2.19H.08", "av01.2.19H.10", "av01.2.19H.12", "av01.2.20M.08", "av01.2.20M.10", "av01.2.20M.12", "av01.2.20H.08", "av01.2.20H.10", "av01.2.20H.12", "av01.2.21M.08", "av01.2.21M.10", "av01.2.21M.12", "av01.2.21H.08", "av01.2.21H.10", "av01.2.21H.12", "av01.2.22M.08", "av01.2.22M.10", "av01.2.22M.12", "av01.2.22H.08", "av01.2.22H.10", "av01.2.22H.12", "av01.2.23M.08", "av01.2.23M.10", "av01.2.23M.12", "av01.2.23H.08", "av01.2.23H.10", "av01.2.23H.12", "av01.2.31M.08", "av01.2.31M.10", "av01.2.31M.12", "av01.2.31H.08", "av01.2.31H.10", "av01.2.31H.12", "avc1.42000a", "avc1.42000b", "avc1.42000c", "avc1.42000d", "avc1.420014", "avc1.420015", "avc1.420016", "avc1.42001e", "avc1.42001f", "avc1.420020", "avc1.420028", "avc1.420029", "avc1.42002a", "avc1.420032", "avc1.420033", "avc1.420034", "avc1.42400a", "avc1.42400b", "avc1.42400c", "avc1.42400d", "avc1.424014", "avc1.424015", "avc1.424016", "avc1.42401e", "avc1.42401f", "avc1.424020", "avc1.424028", "avc1.424029", "avc1.42402a", "avc1.424032", "avc1.424033", "avc1.424034", "avc1.4d000a", "avc1.4d000b", "avc1.4d000c", "avc1.4d000d", "avc1.4d0014", "avc1.4d0015", "avc1.4d0016", "avc1.4d001e", "avc1.4d001f", "avc1.4d0020", "avc1.4d0028", "avc1.4d0029", "avc1.4d002a", "avc1.4d0032", "avc1.4d0033", "avc1.4d0034", "avc1.4d400a", "avc1.4d400b", "avc1.4d400c", "avc1.4d400d", "avc1.4d4014", "avc1.4d4015", "avc1.4d4016", "avc1.4d401e", "avc1.4d401f", "avc1.4d4020", "avc1.4d4028", "avc1.4d4029", "avc1.4d402a", "avc1.4d4032", "avc1.4d4033", "avc1.4d4034", "avc1.58000a", "avc1.58000b", "avc1.58000c", "avc1.58000d", "avc1.580014", "avc1.580015", "avc1.580016", "avc1.58001e", "avc1.58001f", "avc1.580020", "avc1.580028", "avc1.580029", "avc1.58002a", "avc1.580032", "avc1.580033", "avc1.580034", "avc1.64000a", "avc1.64000b", "avc1.64000c", "avc1.64000d", "avc1.640014", "avc1.640015", "avc1.640016", "avc1.64001e", "avc1.64001f", "avc1.640020", "avc1.640028", "avc1.640029", "avc1.64002a", "avc1.640032", "avc1.640033", "avc1.640034", "avc1.64080a", "avc1.64080b", "avc1.64080c", "avc1.64080d", "avc1.640814", "avc1.640815", "avc1.640816", "avc1.64081e", "avc1.64081f", "avc1.640820", "avc1.640828", "avc1.640829", "avc1.64082a", "avc1.640832", "avc1.640833", "avc1.640834", "avc1.6e000a", "avc1.6e000b", "avc1.6e000c", "avc1.6e000d", "avc1.6e0014", "avc1.6e0015", "avc1.6e0016", "avc1.6e001e", "avc1.6e001f", "avc1.6e0020", "avc1.6e0028", "avc1.6e0029", "avc1.6e002a", "avc1.6e0032", "avc1.6e0033", "avc1.6e0034", "avc1.6e100a", "avc1.6e100b", "avc1.6e100c", "avc1.6e100d", "avc1.6e1014", "avc1.6e1015", "avc1.6e1016", "avc1.6e101e", "avc1.6e101f", "avc1.6e1020", "avc1.6e1028", "avc1.6e1029", "avc1.6e102a", "avc1.6e1032", "avc1.6e1033", "avc1.6e1034", "avc1.7a000a", "avc1.7a000b", "avc1.7a000c", "avc1.7a000d", "avc1.7a0014", "avc1.7a0015", "avc1.7a0016", "avc1.7a001e", "avc1.7a001f", "avc1.7a0020", "avc1.7a0028", "avc1.7a0029", "avc1.7a002a", "avc1.7a0032", "avc1.7a0033", "avc1.7a0034", "avc1.7a100a", "avc1.7a100b", "avc1.7a100c", "avc1.7a100d", "avc1.7a1014", "avc1.7a1015", "avc1.7a1016", "avc1.7a101e", "avc1.7a101f", "avc1.7a1020", "avc1.7a1028", "avc1.7a1029", "avc1.7a102a", "avc1.7a1032", "avc1.7a1033", "avc1.7a1034", "avc1.f4000a", "avc1.f4000b", "avc1.f4000c", "avc1.f4000d", "avc1.f40014", "avc1.f40015", "avc1.f40016", "avc1.f4001e", "avc1.f4001f", "avc1.f40020", "avc1.f40028", "avc1.f40029", "avc1.f4002a", "avc1.f40032", "avc1.f40033", "avc1.f40034", "avc1.f4100a", "avc1.f4100b", "avc1.f4100c", "avc1.f4100d", "avc1.f41014", "avc1.f41015", "avc1.f41016", "avc1.f4101e", "avc1.f4101f", "avc1.f41020", "avc1.f41028", "avc1.f41029", "avc1.f4102a", "avc1.f41032", "avc1.f41033", "avc1.f41034", "avc1.2c000a", "avc1.2c000b", "avc1.2c000c", "avc1.2c000d", "avc1.2c0014", "avc1.2c0015", "avc1.2c0016", "avc1.2c001e", "avc1.2c001f", "avc1.2c0020", "avc1.2c0028", "avc1.2c0029", "avc1.2c002a", "avc1.2c0032", "avc1.2c0033", "avc1.2c0034", "av01.0.08H.10", "hev1.1.6.L93.B0", "hev1.2.4.L120.B0", "avc1.4d400b", "mp4v.20.3", "avc1.42001E, mp4a.40.2", "avc1.64001F, mp4a.40.2", "vp9.2", "av99.0.05M.08", "ec-3", "ac-3", ].map(testCodec)).then(() => { try { localStorage[storageKey] = JSON.stringify(Object.fromEntries(__codecs__.entries())); } catch (e) { } console.log('[yt-codecs-hardware-acceleration-only] (init) check done') }).catch(console.warn); } const supportedFormatsConfig = () => { function typeTest(type) { if (typeof type === 'string' && type.startsWith('video/')) { if (useAV1) { if (type.includes('av01')) { if (/codecs[\x20-\x7F]+\bav01\b/.test(type)) return true; } else if (type.includes('av1')) { if (/codecs[\x20-\x7F]+\bav1\b/.test(type)) return true; } } } } // return a custom MIME type checker that can defer to the original function function makeModifiedTypeChecker(origChecker, dx) { // Check if a video type is allowed return function (type) { let m; if (m = /codecs="([^"\r\n]*?)"/.exec(type)) { const codec = m[1]; const codecRes = getCodecResult(codec); if (codecRes === false) return ""; if (codecRes === undefined) { testCodec(codec); console.warn('[yt-codecs-hardware-acceleration-only] new format', type) } } let res = undefined; if (type === undefined) res = false; else res = typeTest(type); if (res === undefined) res = origChecker.apply(this, arguments); else res = !dx ? res : (res ? "probably" : ""); // console.debug(20, type, res) return res; }; } // Override video element canPlayType() function const proto = (HTMLVideoElement || 0).prototype; if (proto && typeof proto.canPlayType == 'function') { proto.canPlayType = makeModifiedTypeChecker(proto.canPlayType, true); } // Override media source extension isTypeSupported() function const mse = window.MediaSource; // Check for MSE support before use if (mse && typeof mse.isTypeSupported == 'function') { mse.isTypeSupported = makeModifiedTypeChecker(mse.isTypeSupported); } } function enableAV1() { // This is the setting to force AV1 // localStorage['yt-player-av1-pref'] = '8192'; try { Object.defineProperty(localStorage.constructor.prototype, 'yt-player-av1-pref', { get() { if (this === localStorage) return '8192'; return this.getItem('yt-player-av1-pref'); }, set(nv) { this.setItem('yt-player-av1-pref', nv); return true; }, enumerable: true, configurable: true }); } catch (e) { // localStorage['yt-player-av1-pref'] = '8192'; } if (localStorage['yt-player-av1-pref'] !== '8192') { console.warn('Use YouTube AV1 is not supported in your browser.'); return; } useAV1 = true; } let promise = null; try { promise = navigator.mediaCapabilities.decodingInfo({ type: "file", video: { contentType: "video/mp4; codecs=av01.0.05M.08.0.110.05.01.06.0", height: 1080, width: 1920, framerate: 30, bitrate: 2826848, }, audio: { contentType: "audio/webm; codecs=opus", channels: "2.1", samplerate: 44100, bitrate: 255236, } }); } catch (e) { promise = null; } const msgAV1NotSupported = 'Your browser does not support AV1. You might conside to use the latest version of Google Chrome or Mozilla FireFox.'; const callback = (result) => { if (result && result.supported && result.smooth) enableAV1(); else { console.warn("yt-codecs-hardware-acceleration-only", msgAV1NotSupported); } }; (promise || Promise.resolve(0)).catch(callback).then(callback); supportedFormatsConfig(); })(Promise);