2

我需要在他们的手机上向我的客户发送视频,但是每个客户端以不同的方式连接到互联网,连接速度很慢,速度很快,我有 2 个来自视频的版本,所以我可以将小的发送到慢速连接,将大的发送到快.

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

上面的代码返回是否连接。

现在的问题是:

有没有办法在我的手机上检测互联网连接类型?比如3G、WIFI……等。

4

4 回答 4

4

如果平台公开了一些特定的 API,那么您只能这样做,但它不是公开给 JavaScript 的常规浏览器 API 的一部分。所以简短的回答是:不。

另一种方法是向已知大小的文件发出请求,并查看传输需要多长时间,从中可以推断出连接速度,但这意味着额外的流量,因此请务必选择好文件(它应该很小,以免产生过多的移动流量,但也不能太小,以至于您无法从下载中获得任何有用的信息)。

不幸的是,这可能不会告诉你太多,因为作为移动客户端,客户端很可能随时从一个连接切换到一个完全不同的连接。更重要的是,在完全相同的连接上,从服务器接收数据所需的时间可能会从一秒到下一秒大不相同,这取决于影响移动客户端的许多因素。所以如果这是一个视频应用程序,这真的应该由服务器控制,如果服务器发现发送的数据包太少,它应该决定降低视频质量。有媒体服务器可以做到这一点,例如Red5WowzaAdob​​e Media Server

于 2012-12-24T12:50:17.323 回答
4

您可以编写与此类似的代码。

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 的文件足以检测速度。

于 2012-12-24T13:00:44.500 回答
3

一种方法是请求文件并查看下载需要多长时间。请参阅示例。

如果您的客户在移动设备上,您的网站下载的每个额外字节都可能会花费他们。此外,影响下载文件所需时间的因素有很多,“连接类型”只是其中之一。

然而,这个方法应该给你一个很好的近似值。

于 2012-12-24T12:54:56.083 回答
0

最初的问题没有区分(A)下载和(B)上传的连接速度(是的,他需要将视频发送给最终用户,但也许这是用户刚刚上传的视频)。接受的答案对于测量下载速度很有用。

对于上传速度,您可以考虑在隐藏表单的隐藏表单字段中嵌入 base64 编码的图像。还要制作一个隐藏的 iframe,并将隐藏的表单定位到隐藏的 iframe。通过 javascript 提交隐藏表单,将当前时间存储在 JS 变量中。在结果页面上,当 onload 触发时,通过 javascript 在 iframe 与其父窗口之间进行通信,发送 onload 事件触发的时间。比较开始时间和结束时间,然后除以传输的字节数。

您需要使 iframe 中的文档与包含 iframe 的窗口中的文档位于同一域中,以遵守浏览器的同源策略。

于 2014-06-10T21:31:12.450 回答