2012-12-24 60 views
2

我需要在他們的手機上發送視頻給我的客戶,但每個客戶端以不同的方式連接到互聯網,連接速度很慢,而且速度很快,而且我有兩個視頻版本,所以我可以發送小的一個來減慢連接,大到快速。檢測我的手機上的互聯網連接類型

setInterval(function(){ 
    if(navigator.onLine){ 
     $("body").html("Connected."); 
    }else{ 
     $("body").html("Not connected."); 
    } 
},1000); 

上面的代碼返回,如果連接與否。

現在的問題是:

有沒有辦法檢測我的手機上的互聯網連接類型?如3G,WIFI等。

+0

您可能可以通過請求已知大小的文件/圖像並對響應進行計時來估計速度,而不是獲取_type_連接。 – MrWhite

+0

@Rory McCrossan我該怎麼做,因爲我是新手在stackoverflow。 –

+0

@AymanHussein您需要重溫您的舊問題,並點擊答案左側的綠色勾號,以最好地回答您的問題 –

回答

4

你可以編寫類似於this的東西。

var imageAddr = "http://www.tranquilmusic.ca/images/cats/Cat2.JPG" + "?n=" + Math.random(); 
    var startTime, endTime; 
    var downloadSize = 5616998; 
    var download = new Image(); 
    download.onload = function() { 
     endTime = (new Date()).getTime(); 
     showResults(); 
    } 
    startTime = (new Date()).getTime(); 
    download.src = imageAddr; 

    function showResults() { 
     var duration = (endTime - startTime)/1000; //Math.round() 
     var bitsLoaded = downloadSize * 8; 
     var speedBps = (bitsLoaded/duration).toFixed(2); 
     var speedKbps = (speedBps/1024).toFixed(2); 
     var speedMbps = (speedKbps/1024).toFixed(2); 
     alert("Your connection speed is: \n" + 
       speedBps + " bps\n" + 
       speedKbps + " kbps\n" + 
       speedMbps + " Mbps\n"); 
    }​ 

您可以使用此代碼來檢測客戶端網絡速度。您無法檢測連接類型。 256+ kb的文件足以檢測速度。

4

如果平臺公開了某些特定的API,但它不是暴露給JavaScript的常規瀏覽器API的一部分,那麼您只能這樣做。所以簡短的回答是:不。

另一種方法是向已知大小的文件發出請求並查看需要多長時間才能傳輸,從中可以推斷出連接的速度,但這意味着額外的流量,因此請務必選擇該文件很好(它應該很小,以免產生太多的移動流量,但不能太小,以致於沒有從下載中獲得任何有用的信息)。

不幸的是,這可能不會告訴你很多,因爲移動客戶端可能會在任何時候從一個連接切換到完全不同的連接。更重要的是,就完全相同的連接而言,從服務器接收數據所花費的時間可能會大不相同,這取決於影響移動客戶端的許多因素。因此,如果這是一個視頻應用程序,這實際上應該由服務器來控制,並且如果服務器看到發送的數據包太少,則應該決定降低視頻的質量。有媒體服務器可以做到這一點,例如Red5,WowzaAdobe Media Server

3

一種方法是請求文件並查看下載需要多長時間。一個例子見this

如果您的客戶使用的是移動設備,則您網站下載的每個額外字節都可能會使用這些字節。此外,影響下載文件需要多長時間的因素還有很多,「連接類型」只是其中之一。

但是,這種方法應該給你一個很好的近似值。

0

原始問題沒有區分(A)下載和(B)上傳的連接速度(是的,他需要將視頻發送給最終用戶,但可能是用戶剛剛上傳的視頻)。接受的答案對測量下載速度很有用。

對於上傳速度,您可能會考慮在隱藏窗體的隱藏窗體字段中嵌入base64編碼的圖像。還要創建一個隱藏的iframe,並將隱藏的表單定位到隱藏的iframe中。通過javascript提交隱藏表單,將當前時間存儲在JS變量中。在結果頁面上,當onload觸發時,通過javascript在iframe和其父窗口之間進行通信,發送onload事件觸發的時間。比較開始時間和結束時間,併除以傳輸的字節數。

爲了遵守瀏覽器的同源策略,您需要將iframe中的文檔與包含iframe的窗口中的文檔放在同一個域中。