File: workerFLV.js

Recommend this page to a friend!
  Classes of Dantigny francois  >  JavaScript FLV Parser  >  workerFLV.js  >  Download  
File: workerFLV.js
Role: Example script
Content type: text/plain
Description: Main class worker
Class: JavaScript FLV Parser
Parse and extract information from FLV video files
Author: By
Last change: Added files via upload
Date: 2 months ago
Size: 7,488 bytes
 

Contents

Class file image Download
importScripts('FLVInfo_min.js');


        function duree(s) {

            function onetotwo(Pint) {
                if (Pint < 10) {
                    return '0' + Pint.toString();
                } else {
                    return Pint.toString();
                }
            }

            function onetothree(Pint) {
                if (Pint < 10) {
                    return '00' + Pint.toString();
                } else {
                    if (Pint < 100) {
                        return '0' + Pint.toString();
                    } else {
                        return Pint.toString();
                    }
                }
            }

            var out = '';
            var lhh = '';
            var lmn = '';
            var lss = '';
            var lms = '';
            lhh = Math.floor(s / 3600);
            lmn = Math.floor((s - lhh * 3600) / 60);
            lss = Math.floor(s - lhh * 3600 - lmn * 60);
            lms = Math.ceil((s - lhh * 3600 - lmn * 60 - lss) * 1000);
            if (lhh > 0) {
                lhh = lhh.toString() + ":";
                out = lhh;
            }
            if (lmn > 0) {
                if (out.length == 0) {
                    out = lmn.toString() + ":";
                } else {
                    out = out + onetotwo(lmn) + ":";
                }
            } else {
                if (out.length > 0) {
                    out = out + "00:";
                }
            }
            if (lss > 0) {
                if (out.length == 0) {
                    out = lss.toString();
                } else {
                    out = out + onetotwo(lss);
                }
            } else {
                if (out.length == 0) {
                    out = "0";
                } else {
                    out = out + "00";
                }
            }
            if (lms != 0) {
                out = out + '.' + onetothree(lms);
            }
            return out;
        }

        function humanFileSize(size) {
            var i = Math.floor(Math.log(size) / Math.log(1024));
            return (size / Math.pow(1024, i)).toFixed(2) * 1 + ' ' + ['o', 'ko', 'Mo', 'Go', 'To'][i];
        };

        function humanBitrate(size) {
            var i = Math.floor(Math.log(size) / Math.log(1024));
            return (size / Math.pow(1024, i)).toFixed(2) * 1 + ' ' + ['bps', 'kbps', 'Mbps', 'Gbps', 'Tbps'][i];
        };

        function human_reading(info) {
            info.text = "ArouG's FLV Infos :\n";
            info.text += "-------------------\n";
            if (info.parseMetaDataBREAK){
                info.text = "MetaDataParsing has been broken :\n";    
            }
            if (info.parseFlagsBREAK){
                info.text = "BEWARE : FLV parsing has been broken and factor 2 is supposed\n";    
            }
            info.text += "File : " + info.filename + "\n";

            var d= new Date(info.filedate);    
            info.text += "Date : " + (d.getFullYear()) + '/' + (d.getMonth() + 1) + '/' + d.getDate() + ' ' + d.getHours() + ':' + d.getMinutes() + "\n";
            info.text += "Size : " + humanFileSize(info.filesize) + "\n";
            info.text += "Version FLV : "+info.FLVVers+"\n";
            info.dureeS = (info.lastStampTime - info.firstStampTime) / 1000;
            info.text += "Duration : " + duree(info.dureeS) + "\n";

            var Gbitrate = 0;
            Gbitrate = (info.AudionbB + info.VideonbB) * 8 / info.dureeS;     // kbps
            info.text += "Global bitrate : " + humanBitrate(Gbitrate) + "\n";
                
            if (info.onMetaData.metadatacreator){
                info.text += "Creator : " + info.onMetaData.metadatacreator + "\n";
            }    
            var tot = 0;
            if (info.AudionbB > 0) tot += 1;
            if (info.VideonbB > 0) tot += 1;
            info.text += "Count of streams : " + tot + "\n";
            info.text += "\n";

            if (info.VideonbB > 0){
                info.text += "Video Track Id : " + info.VideoCodecId + "\n";
                info.text += "Video Codec : " + info.VideoCodec;
                if (info.onMetaData.videocodecid){
                    if (isNaN(info.onMetaData.videocodecid)){
                        info.text += " (" + info.onMetaData.videocodecid + ")";    
                    }
                }
                info.text += "\n";
                info.text += "Size = " + humanFileSize(info.VideonbB) + "\n";
                info.text += "Bitrate : " + humanBitrate(info.VideonbB * 8 / info.dureeS) + "\n"; 
                if (info.onMetaData.framerate){
                    info.text += "Framerate : " + (info.onMetaData.framerate * info.factor) + " FPS\n"; 
                } else {
                    tot = Math.round(info.VideoTagsCount / (info.lastStampTime - info.firstStampTime)) / 1000;
                    info.text += "Framerate : " + tot + " FPS (*)\n"; 
                } 
                if (info.onMetaData.width){
                    info.text += "Width : " + (info.onMetaData.width * info.factor) + "\n";
                    info.text += "Heidth : " + (info.onMetaData.height * info.factor) + "\n";
                }
                info.text += "\n";
            }

            if (info.AudionbB > 0){
                info.text += "Audio Track Id : " + info.AudioCodecId + "\n";
                info.text += "Audio Codec : " + info.AudioFormat;
                if (info.onMetaData.audiocodecid){
                    if (isNaN(info.onMetaData.audiocodecid)){
                        info.text += " (" + info.onMetaData.audiocodecid + ")";    
                    }
                }    
                info.text += "\n";
                info.text += "Size = " + humanFileSize(info.AudionbB) + "\n";
                info.text += "Bitrate : " + humanBitrate(info.AudionbB * 8 / info.dureeS) + "\n"; 
                if (info.AudioFormat == 'AAC'){
                    info.text += "Profile : " + info.modeAAC + "\n";
                    info.text += "Count of channels : " + info.AACnbChannels + " (" + info.AACConfigChannels + ")\n";
                    if (info.onMetaData.audiosamplerate){
                        info.text += "Sampling : " + (info.factor * info.onMetaData.audiosamplerate / 1000) + " kHz\n";
                    } else {
                        info.text += "Sampling : " + (info.AudioSampling) + " kHz (*)\n";
                    }
                } else {
                    tot = 1;
                    if (info.AudioMode == "stereo"){
                        tot =2;
                    }
                    info.text += "Count of channels : " + tot + "\n";
                    info.text += "Mode : " + info.AudioMode + "\n";
                    info.text += "Sampling : " + (info.AudioSampling) + " kHz\n";
                }

            }
            return info.text;
        }


onmessage = function(event) {

  var file = event.data;
  var speedy = event.data.speedy;
    if (file.type == 'video/x-flv'){ 
        flv(file, function(err, info) {
          if (err) {
            console.log('error : ' + err);
            postMessage({
              'data' : 'error : ' + err
            });
          } else {
            sortie_texte = human_reading(info);
            postMessage({
              'data' : sortie_texte
            });
            //console.log(sortie_texte);
          }
        });
    } else {
        postMessage({'data' : 'nop'});
    }    
  }