UNPKG

dji_srt_parser

Version:

Parses and interprets DJI's drones SRT metadata

147 lines (143 loc) 4.48 kB
'use_strict'; function preload(file, cb) { let loadFileBrowser = function (file) { let readTextFile = function (file, f) { let rawFile = new XMLHttpRequest(); rawFile.open('GET', file, true); rawFile.onreadystatechange = function () { if (rawFile.readyState === 4) { if (rawFile.status === 200 || rawFile.status == 0) { let allText = rawFile.responseText; cb(allText); } } }; rawFile.send(null); }; readTextFile(file, context.flow); }; let loadFileNode = function (file) { let http = require('http'); var fs = require('fs'); fs.readFile(file, function (err, data) { if (err) { throw err; } cb(data.toString()); }); }; if (typeof window === 'undefined') { loadFileNode(file); } else { loadFileBrowser(file); } } let files = [ 'mavic_pro', 'mavic_air', 'old_format', 'mavic_pro_buggy', 'mavic_2_style', 'p4p_sample' ]; let DJISRTParser = require('../index'); let i = 0; preload(files[i] + '.SRT', confirm); let DJIfile; function confirm(data) { DJIfile = DJISRTParser(data, files[i] + '.SRT'); if (DJIfile) { console.log('\nLoaded file ' + DJIfile.getFileName()); console.log( 'The video was recorded on ' + new Date(DJIfile.metadata().stats.DATE) ); if (DJIfile.metadata().stats.HOME) { console.log( "The drone's home was set to " + DJIfile.metadata().stats.HOME[0].LATITUDE + 'º,' + DJIfile.metadata().stats.HOME[0].LONGITUDE + 'º' ); } else { console.log('\x1b[31m%s\x1b[0m', 'Home data missing'); } if (DJIfile.metadata().stats.SPEED) { console.log( 'Average 3D speed was ' + Math.round(DJIfile.metadata().stats.SPEED.THREED.avg) + ' km/h' ); } else { console.log('\x1b[31m%s\x1b[0m', 'Speed data missing'); } let elevation; if (DJIfile.metadata().stats.BAROMETER) { elevation = DJIfile.metadata().stats.BAROMETER.max; } else if (DJIfile.metadata().stats.HB) { elevation = DJIfile.metadata().stats.HB.max; } else if (DJIfile.metadata().stats.HS) { elevation = DJIfile.metadata().stats.HS.max; } else if ( DJIfile.metadata().stats.GPS && DJIfile.metadata().stats.GPS.SATELLITES ) { elevation = DJIfile.metadata().stats.GPS.SATELLITES.max; } if (elevation) { console.log('Highest registered elevation was ' + elevation + ' meters'); } else { console.log('\x1b[31m%s\x1b[0m', 'No elevation data'); } if (typeof DJIfile.metadata().stats.DURATION !== 'number') { console.log('\x1b[31m%s\x1b[0m', 'Duration is missing'); } else { console.log( 'The video recorded for ' + DJIfile.metadata().stats.DURATION / 1000 + ' seconds' ); } if (DJIfile.metadata().stats.GPS) { console.log( 'While flying for ' + Math.round(DJIfile.metadata().stats.DISTANCE) + ' meters' ); } else { console.log('\x1b[31m%s\x1b[0m', 'GPS data missing'); } if ( DJIfile.metadata().packets[0].FNUM != undefined && DJIfile.metadata().packets[0].SHUTTER != undefined && DJIfile.metadata().packets[0].ISO != undefined ) { console.log( 'Initial aperture was F' + DJIfile.metadata().packets[0].FNUM + ', shutter speed was 1/' + DJIfile.metadata().packets[0].SHUTTER + ' and ISO was ' + DJIfile.metadata().packets[0].ISO ); } else { console.log( '\x1b[31m%s\x1b[0m', 'Some camera data missing (ISO, Shutter or Fnum)' ); } if (!DJIfile.metadata().stats.EV) { console.log('The camera was probably using auto-exposure'); } else if (DJIfile.metadata().stats.EV.avg === 0) { console.log('The image looks properly exposed'); } else if (DJIfile.metadata().stats.EV.avg > 0) { console.log('The image looks overexposed'); } else if (DJIfile.metadata().stats.EV.avg < 0) { console.log('The image looks underexposed'); } i++; if (i < files.length) preload(files[i] + '.SRT', confirm); } else { console.log('\x1b[31m%s\x1b[0m', 'Failed to load'); } }