我有一个 1080p 视频,我在<video>
页面上的 HTML5 标记中显示。
是否有一种简单的(ish)javascript 方法来检测带宽,因此如果用户的连接速度太慢而无法流式传输视频,我可以将视频切换为较低质量的版本?类似于 YouTube 的“自动”视频尺寸选择器背后的逻辑。
我有一个 1080p 视频,我在<video>
页面上的 HTML5 标记中显示。
是否有一种简单的(ish)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 或 Brightcove https://aws.amazon.com/elastictranscoder/
在谷歌浏览器中,视频元素至少有以下属性:
webkitVideoDecodedByteCount: 0
webkitAudioDecodedByteCount: 0
这些应该足以确定客户端解码视频的速度。随着视频的播放,您将跟踪这些字节的增量数量,从而为您提供字节/秒,客户端正在处理视频。
如需更新的答案:MPEG-DASH 正在替换 HLS。HLS 主要用于 iOS 领域。大多数桌面浏览器不打算支持它,而 DASH 是他们正在朝着的标准。(但是,有很多播放器旨在让您将 HLS 与 hls.js 等 HTML5 视频播放器一起使用)。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 小时来加载我的 dang 视频,那就等吧!如果不向用户发送一个大的虚拟文件并测量到达他所花费的时间,就没有可靠的方法来准确测量这一点。
您应该依靠用户输入(并正确记住它!也与 YouTube 不同!)。
总之,不要以 YouTube 为例。
有些付费服务可能会告诉您对方使用的带宽,例如netspeed。
数据准确性可能对您来说已经足够了,但我还没有机会亲自测试它。