Youtube H.264

use H.264 on youtube. based on https://github.com/erkserkserks/h264ify.

目前为 2015-02-17 提交的版本,查看 最新版本

// ==UserScript==
// @name         Youtube H.264
// @namespace    http://www.youtube.com
// @version      1.0.0
// @description  use H.264 on youtube. based on https://github.com/erkserkserks/h264ify.
// @match        http://youtube.com/*
// @match        https://youtube.com/*
// @match        http://www.youtube.com/*
// @match        https://www.youtube.com/*
// @grant        none
// @run-at       document-start
// ==/UserScript==


// code from https://github.com/erkserkserks/h264ify/blob/master/src/inject/inject.js

/**
 * The MIT License (MIT)
 *
 * Copyright (c) 2015 erkserkserks
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */
(function() {
    // Override video element canPlayType() function
    var videoElem = document.createElement('video');
    var origCanPlayType = videoElem.canPlayType.bind(videoElem);
    videoElem.__proto__.canPlayType = function(type) {
        if (type === undefined) return '';
        // If queried about webM/vp8/vp8 support, say we don't support them
        if (type.indexOf('webm') != -1 ||
            type.indexOf('vp8') != -1 ||
            type.indexOf('vp9') != -1) {
            return '';
        }
        // Otherwise, ask the browser
        return origCanPlayType(type);
    }
    
    // Override media source extension isTypeSupported() function
    var mse = window.MediaSource;
    var origIsTypeSupported = mse.isTypeSupported.bind(mse);
    mse.isTypeSupported = function(type) {
        if (type === undefined) return '';
        // If queried about webM/vp8/vp8 support, say we don't support them
        if (type.indexOf('webm') != -1 ||
            type.indexOf('vp8') != -1 ||
            type.indexOf('vp9') != -1) {
            return '';
        }
        // Otherwise, ask the browser
        return origIsTypeSupported(type);
    }
})();