UNPKG

dashjs

Version:

A reference client implementation for the playback of MPEG DASH via Javascript and compliant browsers.

14 lines (13 loc) 2.96 kB
'use strict';/* $Date: 2007-06-12 18:02:31 $ */// from: http://bannister.us/weblog/2007/06/09/simple-base64-encodedecode-javascript/ // Handles encode/decode of ASCII and Unicode strings. var UTF8={};UTF8.encode=function(s){var u=[];for(var i=0;i<s.length;++i){var c=s.charCodeAt(i);if(c<0x80){u.push(c);}else if(c<0x800){u.push(0xC0|c>>6);u.push(0x80|63&c);}else if(c<0x10000){u.push(0xE0|c>>12);u.push(0x80|63&c>>6);u.push(0x80|63&c);}else{u.push(0xF0|c>>18);u.push(0x80|63&c>>12);u.push(0x80|63&c>>6);u.push(0x80|63&c);}}return u;};UTF8.decode=function(u){var a=[];var i=0;while(i<u.length){var v=u[i++];if(v<0x80){// no need to mask byte }else if(v<0xE0){v=(31&v)<<6;v|=63&u[i++];}else if(v<0xF0){v=(15&v)<<12;v|=(63&u[i++])<<6;v|=63&u[i++];}else{v=(7&v)<<18;v|=(63&u[i++])<<12;v|=(63&u[i++])<<6;v|=63&u[i++];}a.push(String.fromCharCode(v));}return a.join('');};var BASE64={};(function(T){var encodeArray=function encodeArray(u){var i=0;var a=[];var n=0|u.length/3;while(0<n--){var v=(u[i]<<16)+(u[i+1]<<8)+u[i+2];i+=3;a.push(T.charAt(63&v>>18));a.push(T.charAt(63&v>>12));a.push(T.charAt(63&v>>6));a.push(T.charAt(63&v));}if(2==u.length-i){var v=(u[i]<<16)+(u[i+1]<<8);a.push(T.charAt(63&v>>18));a.push(T.charAt(63&v>>12));a.push(T.charAt(63&v>>6));a.push('=');}else if(1==u.length-i){var v=u[i]<<16;a.push(T.charAt(63&v>>18));a.push(T.charAt(63&v>>12));a.push('==');}return a.join('');};var R=function(){var a=[];for(var i=0;i<T.length;++i){a[T.charCodeAt(i)]=i;}a['='.charCodeAt(0)]=0;return a;}();var decodeArray=function decodeArray(s){var i=0;var u=[];var n=0|s.length/4;while(0<n--){var v=(R[s.charCodeAt(i)]<<18)+(R[s.charCodeAt(i+1)]<<12)+(R[s.charCodeAt(i+2)]<<6)+R[s.charCodeAt(i+3)];u.push(255&v>>16);u.push(255&v>>8);u.push(255&v);i+=4;}if(u){if('='==s.charAt(i-2)){u.pop();u.pop();}else if('='==s.charAt(i-1)){u.pop();}}return u;};var ASCII={};ASCII.encode=function(s){var u=[];for(var i=0;i<s.length;++i){u.push(s.charCodeAt(i));}return u;};ASCII.decode=function(u){for(var i=0;i<s.length;++i){a[i]=String.fromCharCode(a[i]);}return a.join('');};BASE64.decodeArray=function(s){var u=decodeArray(s);return new Uint8Array(u);};BASE64.encodeASCII=function(s){var u=ASCII.encode(s);return encodeArray(u);};BASE64.decodeASCII=function(s){var a=decodeArray(s);return ASCII.decode(a);};BASE64.encode=function(s){var u=UTF8.encode(s);return encodeArray(u);};BASE64.decode=function(s){var u=decodeArray(s);return UTF8.decode(u);};})("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/");/*The following polyfills are not used in dash.js but have caused multiplayer integration issues. Therefore commenting them out. if (undefined === btoa) { var btoa = BASE64.encode; } if (undefined === atob) { var atob = BASE64.decode; } */if(typeof exports!=='undefined'){exports.decode=BASE64.decode;exports.decodeArray=BASE64.decodeArray;exports.encode=BASE64.encode;exports.encodeASCII=BASE64.encodeASCII;} //# sourceMappingURL=base64.js.map