1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
| <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <script type="text/javascript" src="https://unpkg.com/mediainfo.js/dist/mediainfo.min.js"></script>
<style> html, body{ margin:0; padding:0; } body * { box-sizing: border-box; } #wrapper { display: flex; flex-direction: column; height: 100%; padding: 8px; position: absolute; width: 100%; } #fileinput { padding-bottom: 8px; } #output { height: 100%; }
</style> </head> <body> <div id="wrapper"> <input type="file" id="fileinput" name="fileinput" /> <textarea id="output"></textarea> </div>
<script> const fileinput = document.getElementById('fileinput') const output = document.getElementById('output') const onChangeFile = (e, mediainfo) => { const file = fileinput.files[0] if (file) { output.value = 'Working…' const getSize = () => file.size const readChunk = (chunkSize, offset) =>{ return new Promise((resolve, reject) => { const reader = new FileReader() reader.onload = (event) => { if (event.target.error) { reject(event.target.error) } resolve(new Uint8Array(event.target.result)) } reader.readAsArrayBuffer(file.slice(offset, offset + chunkSize)) }) } mediainfo .analyzeData(getSize, readChunk) .then((result) => { output.value = result }) .catch((error) => { output.value = `An error occured:\n${error.stack}` }) } }
MediaInfo({ format: 'object', locateFile: (path, prefix) => prefix + path, }, (mediainfo) => { fileinput.addEventListener('change', (e) => onChangeFile(e, mediainfo)) })
</script> </body> </html>
|