hi i was wondering if this code is portable at all, it seems to use a stats API to collect some information, it would be great to automatically detect files. let me know.

application.calculateClientBw = function(p_client)

{



    p_client.payload = new Array();

    for (var i=0; i<1200; i++){

        p_client.payload[i] = Math.random();    //16K approx

    }



    var res = new Object();

    res.latency = 0;

    res.cumLatency = 1;

    res.bwTime = 0;

    res.count = 0;

    res.sent = 0;

    res.client = p_client;

    var stats = p_client.getStats();

    var now = (new Date()).getTime()/1;

    res.pakSent = new Array();

    res.pakRecv = new Array();

    res.beginningValues = {b_down:stats.bytes_out, b_up:stats.bytes_in, time:now};

    res. {



        var now = (new Date()).getTime()/1;

        this.pakRecv[this.count] = now;

        //trace( "Packet interval = " + (this.pakRecv[this.count] - this.pakSent[this.count])*1  );

        this.count++;

        var timePassed = (now - this.beginningValues.time);



        if (this.count == 1) {

            this.latency = Math.min(timePassed, 800);

            this.latency = Math.max(this.latency, 10);

        }





        //trace("count = " + this.count + ", sent = " + this.sent + ", timePassed = " + timePassed);



        // If we have a hi-speed network with low latency send more to determine

        // better bandwidth numbers, send no more than 6 packets

        if ( this.count == 2 && (timePassed<2000))

        {

            this.pakSent[res.sent++] = now;

            this.cumLatency++;

            this.client.call("onBWCheck", res, this.client.payload);

        }

        else if ( this.sent == this.count )

        {   

            // See if we need to normalize latency

            if ( this.latency >= 100 )

            { // make sure we detect sattelite and modem correctly

                if (  this.pakRecv[1] - this.pakRecv[0] > 1000 )

                {

                    this.latency = 100;

                }

            }



            delete this.client.payload;

            // Got back responses for all the packets compute the bandwidth.

            var stats = this.client.getStats();

            var deltaDown = (stats.bytes_out - this.beginningValues.b_down)*8/1000;

            var deltaTime = ((now - this.beginningValues.time) - (this.latency * this.cumLatency) )/1000;

            if ( deltaTime <= 0 )

                deltaTime = (now - this.beginningValues.time)/1000;

           

            var kbitDown = Math.round(deltaDown/deltaTime);



            trace("onBWDone: kbitDown = " + kbitDown + ", deltaDown= " + deltaDown + ", deltaTime = " + deltaTime + ", latency = " + this.latency + "KBytes " + (stats.bytes_out - this.beginningValues.b_down)/1024) ;



            this.client.call("onBWDone", null, kbitDown,  deltaDown, deltaTime, this.latency );

        }

    }

    res.pakSent[res.sent++] = now;

    p_client.call("onBWCheck", res, "");

    res.pakSent[res.sent++] = now;

    p_client.call("onBWCheck", res, p_client.payload);



}


_______________________________________________
Red5 mailing list
[email protected]
http://osflash.org/mailman/listinfo/red5_osflash.org

Reply via email to