JSFiddle - React, Tailwind, and code Playground

by rong cao

HTML

<script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
<script src="http://api.html5media.info/1.1.6/html5media.min.js"></script>
<video id="video" src="video.mp4" width="520" height="300" controls preload></video>

JavaScript

// http://v.youku.com/v_show/id_XNjc1MjQwNTQ4.html
var _id = 'XNjc1MjQwNTQ4';


function getFileIDMixString(seed) {
    var source = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ/\\:._-1234567890".split(''),
        mixed = [],
        index;
    for (var i = 0, len = source.length; i < len; i++) {
        seed = (seed * 211 + 30031) % 65536;
        index = Math.floor(seed / 65536 * source.length);
        mixed.push(source[index]);
        source.splice(index, 1);
    }
    return mixed.join('');
};

function getFileID(fileid, seed) {
    var mixed = getFileIDMixString(seed),
        ids = fileid.split("*"),
        realId = [],
        idx;
    for (var i = 0; i < ids.length; i++) {
        idx = parseInt(ids[i], 10);
        realId.push(mixed.charAt(idx));
    }
    return realId.join('');
};

function jsonp(url, callback) {
    $.ajax({
        url: url,
        dataType: 'jsonp',
        jsonp: '__callback',
        type: 'GET',
        success: function (param) {
            callback(param);
        }
    });
}


jsonp('http://v.youku.com/player/getPlaylist/VideoIDS/' + _id + '/Pf/4',

function (param) {
    var d = new Date(),
        fileid = getFileID(param.data[0]['streamfileids']['3gphd'], param.data[0]['seed']),
        sid = d.getTime() + "" + (1E3 + d.getMilliseconds()) + "" + (parseInt(Math.random() * 9E3)),
        k = param.data[0]['segs']['3gphd'][0]['k'],
        st = param.data[0]['segs']['3gphd'][0]['seconds'];
    mp4 = 'http://f.youku.com/player/getFlvPath/sid/' + sid + '_00/st/mp4/fileid/' + fileid + '?K=' + k + '&hd=1&myp=0&ts=1156&ypp=0&ymovie=1';
    console.log(mp4);
    $('#video').attr('src', mp4);
});