2016-10-15 2 views
3

Verwenden Sie das folgende Skript, um die Internetgeschwindigkeit eines mit einem Netzwerk verbundenen Systems zu erkennen. Referenz javascript to detect internet speedJavascript - Erkennen von Internetgeschwindigkeit/Bandbreite

Allerdings sind die Geschwindigkeitsergebnisse sowohl bei https://fast.com/ als auch bei http://www.speedtest.net/ unterschiedlich.

var imageAddr = "http://www.kenrockwell.com/contax/images/g2/examples/31120037-5mb.jpg"; 
var downloadSize = 4995374; //bytes 

function ShowProgressMessage(msg) { 
    if (console) { 
     if (typeof msg == "string") { 
      console.log(msg); 
     } else { 
      for (var i = 0; i < msg.length; i++) { 
       console.log(msg[i]); 
      } 
     } 
    } 

    var oProgress = document.getElementById("progress"); 
    if (oProgress) { 
     var actualHTML = (typeof msg == "string") ? msg : msg.join("<br />"); 
     oProgress.innerHTML = actualHTML; 
    } 
} 

function InitiateSpeedDetection() { 
    ShowProgressMessage("Loading the image, please wait..."); 
    window.setTimeout(MeasureConnectionSpeed, 1); 
};  

if (window.addEventListener) { 
    window.addEventListener('load', InitiateSpeedDetection, false); 
} else if (window.attachEvent) { 
    window.attachEvent('onload', InitiateSpeedDetection); 
} 

function MeasureConnectionSpeed() { 
    var startTime, endTime; 
    var download = new Image(); 
    download.onload = function() { 
     endTime = (new Date()).getTime(); 
     showResults(); 
    } 

    download.onerror = function (err, msg) { 
     ShowProgressMessage("Invalid image, or error downloading"); 
    } 

    startTime = (new Date()).getTime(); 
    var cacheBuster = "?nnn=" + startTime; 
    download.src = imageAddr + cacheBuster; 

    function showResults() { 
     var duration = (endTime - startTime)/1000; 
     var bitsLoaded = downloadSize * 8; 
     var speedBps = (bitsLoaded/duration).toFixed(2); 
     var speedKbps = (speedBps/1024).toFixed(2); 
     var speedMbps = (speedKbps/1024).toFixed(2); 
     ShowProgressMessage([ 
      "Your connection speed is:", 
      speedBps + " bps", 
      speedKbps + " kbps", 
      speedMbps + " Mbps" 
     ]); 
    } 
} 

Der Punkt hier ist die Laufzeit der Videoqualität basierend auf der Internetverbindungsgeschwindigkeit des Benutzers zu ändern. Ich muss die Netzwerkgeschwindigkeit abrufen, sie an den Server weitergeben und basierend darauf wird die Videoqualität geändert.

Wie erreiche ich das Gleiche?

+0

Beachten Sie, dass Sie die Downloadrate des Benutzers testen, indem Sie ihn zwingen, ein Image auf Ihrem Server herunterzuladen. Wenn der Benutzer weit davon entfernt ist, wird die Latenz hoch und die Downloadrate leidet darunter. Die Website speedtest.net verwendet den nächstgelegenen Server, um den Test auszuführen, und zeigt dem Benutzer die tatsächliche Latenzzeit für diesen Server an. Je nachdem, wo sich Ihr Benutzer auf dem Globus befindet, sollten Sie keine gute Latenz erwarten. –

Antwort

0

Die Netzwerkgeschwindigkeit hängt von der verfügbaren Bandbreite ab. Daher müssen Sie den Geschwindigkeitstest in bestimmten Intervallen ausführen, etwa alle 10 oder 15 Sekunden. Aber selbst wenn Sie in der Lage sind, diese Tests durchzuführen, ohne die Leistung und die Belastung zu beeinträchtigen, die Sie dem Browser auferlegen. Ihr nächstes Ziel wird es sein, die Qualität des Videos auf eine niedrigere Qualität zu ändern, was wiederum ein Kopfschmerz sein wird, da es kein einfacher Video-Quellcode-Schalter sein wird.

Adaptive Bitrate Streaming ist derjenige, den Sie suchen. Es gibt einige Medienserver, die diese Funktionalität bereitstellen. Wenn Sie nach etwas Open Source suchen, das Sie besser verstehen und ausprobieren können, können Sie den Google Shaka Player ausprobieren. https://github.com/google/shaka-player.

Eine weitere Sache zu beachten ist Adaptive Bitrate Streaming wird im IE ohne Plug-in-Hilfe nicht funktionieren.