2016-10-15 10 views
3

以下のスクリプトを使用して、ネットワークに接続されたシステムのインターネット速度を検出します。参照javascript to detect internet speedJavascript - インターネット速度/帯域幅を検出する

ただし、速度結果はhttps://fast.com/http://www.speedtest.net/で異なります。

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" 
     ]); 
    } 
} 

ここでのポイントは、ユーザーのインターネット接続速度に基づいてビデオの品質ランタイムを変更することです。私はネットワーク速度を取得し、それをサーバーに渡し、そのビデオ品質に基づいて変更する必要があります。

どうすれば同じことができますか?

+0

ユーザーのダウンロード速度をサーバーで強制的にテストしていることに注意してください。ユーザーが遠く離れているとレイテンシが高くなり、ダウンロード速度が低下します。サイトspeedtest.netは、テストを実行するために最も近いサーバーを使用し、ユーザーにこのサーバーに対する実際の待ち時間を示します。だから、あなたのユーザーが地球上のどこにいるかによって、良いレイテンシは期待できません。 –

答えて

0

ネットワークの速度は、使用可能な帯域幅によって異なります。したがって、特定の間隔でスピードテストを実行する必要があります(たとえば、10秒または15秒ごとに)。しかし、あなたがパフォーマンスとひずみを損なうことなくこれらのテストを実行することができても、あなたはブラウザに入れます。あなたの次の目的は、ビデオの品質をより低い品質に変更することです。単純なビデオsrcスイッチではないため、やはり頭痛になります。

適応ビットレートストリーミングは、あなたが探しているものです。その機能を提供するメディアサーバーがいくつかあります。あなたが理解し、プレイアラウンドするためのオープンソースの何かを探しているなら、Google Shaka Playerを試すことができます。 https://github.com/google/shaka-player

もう1つ注目すべきは、アダプティブビットレートストリーミングは、プラグインのヘルプなしでIEでは動作しません。

関連する問題