├── README ├── webm ├── The_Google_Story.webm └── sync_def_PF-0_AF-33-BG_FF-33.webm ├── README.md ├── js ├── script.js └── ajax.js └── vpxdec.html /README: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /webm/The_Google_Story.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dominikhlbg/vp8-webm-javascript-decoder/HEAD/webm/The_Google_Story.webm -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | VP8---WebM-JavaScript-Decoder 2 | ============================= 3 | 4 | Source code in dixie.js 5 | 6 | 7 | http://webpjs.appspot.com -------------------------------------------------------------------------------- /webm/sync_def_PF-0_AF-33-BG_FF-33.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dominikhlbg/vp8-webm-javascript-decoder/HEAD/webm/sync_def_PF-0_AF-33-BG_FF-33.webm -------------------------------------------------------------------------------- /js/script.js: -------------------------------------------------------------------------------- 1 | // Copyright 2011 Google Inc. All Rights Reserved. 2 | // 3 | // This code is licensed under the same terms as WebM: 4 | // Software License Agreement: http://www.webmproject.org/license/software/ 5 | // Additional IP Rights Grant: http://www.webmproject.org/license/additional/ 6 | // ----------------------------------------------------------------------------- 7 | // 8 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 9 | // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 10 | // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 11 | // IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 12 | // INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 13 | // BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 14 | // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 15 | // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 16 | // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 17 | // EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 18 | // 19 | // ----------------------------------------------------------------------------- 20 | // 21 | // Author: John Koleszar (jkoleszar@google.com) 22 | // Dominik Homberger (dominik.homberger@gmail.com) 23 | 24 | function EventListener(obj,evt,fnc,useCapture){ 25 | if (!useCapture) useCapture=false; 26 | if (obj.addEventListener){ 27 | obj.addEventListener(evt,fnc,useCapture); 28 | return true; 29 | } else if (obj.attachEvent) return obj.attachEvent("on"+evt,fnc); 30 | } 31 | 32 | function disabledbuttons() { 33 | var buttons = document.getElementsByTagName('input'); 34 | for(var i=0;i 0) { 66 | evt.preventDefault(); 67 | evt.stopPropagation(); 68 | var file = files[0]; 69 | if (typeof FileReader !== "undefined") { 70 | if(!isActive) { 71 | var freader = new FileReader(); 72 | freader.onload = function (evt) { 73 | isActive=true; 74 | disabledbuttons(); 75 | webmdata(evt.target.result.split('').map(function(e){return e.charCodeAt(0) & 0xff})); 76 | }; 77 | freader.readAsBinaryString(file); 78 | } else alert('refresh your browser to add a new file'); 79 | } else { 80 | alert('Your Browser don\'t support the Filereader API'); 81 | } 82 | } 83 | }, false); 84 | } -------------------------------------------------------------------------------- /js/ajax.js: -------------------------------------------------------------------------------- 1 | // Copyright 2011 Google Inc. All Rights Reserved. 2 | // 3 | // This code is licensed under the same terms as WebM: 4 | // Software License Agreement: http://www.webmproject.org/license/software/ 5 | // Additional IP Rights Grant: http://www.webmproject.org/license/additional/ 6 | // ----------------------------------------------------------------------------- 7 | // 8 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 9 | // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 10 | // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 11 | // IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 12 | // INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 13 | // BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 14 | // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 15 | // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 16 | // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 17 | // EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 18 | // 19 | // ----------------------------------------------------------------------------- 20 | // 21 | // Author: John Koleszar (jkoleszar@google.com) 22 | // Dominik Homberger (dominik.homberger@gmail.com) 23 | 24 | "use strict"; 25 | function createRequestObject() { 26 | var ro = new XMLHttpRequest(); 27 | return ro; 28 | } 29 | 30 | var http = createRequestObject(); 31 | 32 | function convertResponseBodyToText(IEByteArray) { 33 | var ByteMapping = {}; 34 | for ( var i = 0; i < 256; i++ ) { 35 | for ( var j = 0; j < 256; j++ ) { 36 | ByteMapping[ String.fromCharCode( i + j * 256 ) ] = 37 | String.fromCharCode(i) + String.fromCharCode(j); 38 | } 39 | } 40 | var rawBytes = IEBinaryToArray_ByteStr(IEByteArray); 41 | var lastChr = IEBinaryToArray_ByteStr_Last(IEByteArray); 42 | return rawBytes.replace(/[\s\S]/g, 43 | function( match ) { return ByteMapping[match]; }) + lastChr; 44 | } 45 | 46 | var IEBinaryToArray_ByteStr_Script = 47 | "\r\n"+ 48 | "\r\n"; 62 | document.write(IEBinaryToArray_ByteStr_Script); 63 | 64 | function readfile(callback,filename) { 65 | http.open('get', filename); 66 | 67 | if (http.overrideMimeType) 68 | http.overrideMimeType('text/plain; charset=x-user-defined'); 69 | else 70 | http.setRequestHeader('Accept-Charset', 'x-user-defined'); 71 | 72 | http.send(null); 73 | http.onreadystatechange = function() { 74 | if(http.readyState == 4){ 75 | if (typeof http.responseBody=='undefined') { 76 | var response = http.responseText.split('').map(function(e){return e.charCodeAt(0) & 0xff}); 77 | //alert(response); 78 | if (callback) callback(response); 79 | } else { 80 | var response = convertResponseBodyToText(http.responseBody).split('').map(function(e){return e.charCodeAt(0) & 0xff}); 81 | if (callback) callback(response); 82 | http.onreadystatechange=null; 83 | } 84 | } 85 | }; 86 | } 87 | 88 | -------------------------------------------------------------------------------- /vpxdec.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | VP8 - WebM JavaScript Decoder for every browser 6 | 17 | 22 | 23 | 24 | 25 | 91 | 92 | 93 | 94 | 95 |

VP8 - WebM JavaScript Decoder for every browser

96 |

Example Files:

97 |

98 | 99 | 100 |

101 | 102 |
Timecode:
103 |
Frame:
104 |
Render:
105 |
106 |
107 |
108 | VP8 - WebM JavaScript Decoder for every browser - This script work with Internet Explorer 9, Safari 4/5, Google Chrome, Mozilla Firefox, Opera, IPhone/IPad (iOS) & Android - implemented by Dominik Homberger 109 | 110 | 111 | --------------------------------------------------------------------------------