HTML5 视频:检测带宽
HTML5 Video: Detecting Bandwidth
我有一个 1080p 的视频,我正在我的页面上以 HTML5 <video>
标签显示。
是否有一种简单的 javascript 方法来检测带宽,以便在用户的连接速度太慢而无法流式传输视频时,我可以将视频切换为较低质量的版本?类似于YouTube的"自动"视频大小选择器背后的逻辑。
根据您使用的播放器和编码平台,您可以对视频使用 HLS 编码。HLS代表HTTP Live Streaming,这是Apple开发的协议,主要用于解决此问题(以及其他)。
HLS基本上将您的视频文件分解为多个小文件,因此可以使用简单的Web服务器对其进行"伪"流式传输。使用 HLS,您还可以以多种分辨率进行编码,并且播放器可能能够切换到更低或更高的带宽。
唯一的缺点是大多数播放器使用Flash来播放HLS编码的内容。在这里查看它的实际效果: http://www.flashls.org/latest/examples/chromeless/
以下是flowplayer的HLS演示:http://demos.flowplayer.org/basics/hls.html
这是VideoJS的一个插件:https://github.com/videojs/videojs-contrib-hls
要在 HLS 中编码,您可以免费使用 ffmpeg 并将文件上传到您的服务器:https://www.ffmpeg.org/ffmpeg-formats.html#hls-1
或者,您可以使用基于云的解决方案,如AWS Transcoder或Brightcovehttps://aws.amazon.com/elastictranscoder/
在谷歌浏览器中,至少视频元素上有以下属性:
webkitVideoDecodedByteCount: 0
webkitAudioDecodedByteCount: 0
这些应该足以确定客户端解码视频的速度。在视频播放时,您将跟踪这些字节的增量量,从而为您提供客户端正在处理视频的字节/秒。
有关更新的答案:MPEG-DASH正在更换HLS。 HLS主要用于iOS领域。大多数桌面浏览器不打算支持它,而DASH是他们正在走向的标准。(但是,有很多播放器旨在允许您将HLS与HTML5视频播放器(如hls.js)一起使用)。DASH玩家包括Bitmovin,Google Shaka等。目前,许多人同时为HLS和DASH编码。HLS还支持碎片化的mp4。请注意,您需要在服务器端正确编码视频。其他资源:http://www.streamingmedia.com/Articles/Articles/Editorial/Featured-Articles/The-State-of-MPEG-DASH-2016-110099.aspx
我讨厌这个功能!这通常是错误的,如果我想等待 2 小时来加载我的当视频,而不是等待!没有可靠的方法可以准确地测量这一点,而无需向用户发送大型虚拟文件并测量到达他所花费的时间。
您应该依靠用户输入(并正确记住它!也不像YouTube!
简而言之,不要以YouTube为例。
有些付费服务可能会让您了解对方使用的带宽,例如网速。
数据准确性可能对您来说足够了,但我还没有机会亲自测试它。
- 如何检测是否有溢出
- 如何检测用于WebGL的专用或集成显卡
- 防止Alt+Shift默认操作或检测多种操作系统语言的Javascript
- 如何在使用selectBoxIt JQuery插件时检测选项更改
- 如何使用密码检测网络中的状态连接
- 使用JavaScript检测Flash
- 在不阻止默认行为的情况下检测IE10中的缩放
- 检测个位数整数时正在转换毫秒
- 检测电话窃听,即:<a href="电话:xxx">在UIWebview上
- 动态插入的表:JQuery未检测到最后一行
- 检测页面上某个元素中选择(突出显示)或单击的内容
- jQuery检测浏览器是否支持Zoom
- 检测iframe是否跨域的愚蠢方法
- 检测图像分辨率
- HTML5 视频:检测带宽
- 如何使用Modernizr进行用户带宽检测
- 使用jquery检测上传速度带宽
- 检测带宽/互联网连接速度在javascript
- 检测互联网速度/带宽
- 如何检测上传/下载带宽的状态