我正在使用 video.js 播放 m3u8 文件中具有多种质量的 HLS 视频流。我注意到 video.js 选择的质量低于给定质量的预期质量。我用另一个 HLS 播放器检查了相同的流和带宽,chrome 的“Native MPEG-Dash + HLS Playback”扩展,它提供了更高的质量,没有缓冲。这是一致的。
我还修改了m3u8文件,作弊,篡改声明的带宽以反映相关TS段的带宽低于实际带宽。然后我在相同的条件下再次播放视频。这次 video.js 有点作弊,选择了更高质量的视频,仍然没有缓冲。我的结论是,虽然 video.js 能够获得更高的质量,但它选择了较低质量的文件,可能是为了安全起见,比其他播放器具有更高的安全边际。
问题:如何降低 video.js 的安全边际?与总是播放低质量相比,我更喜欢具有缓冲风险的更高质量。
好吧,我真的花了好几年的时间才花时间逐步完成所有 video.js 代码并最终弄清楚为什么会发生这种情况,但这绝对值得!
VideoJS 通过排除一些基于启发式的视频轨道(表示)来确定要播放的第一个片段。
但是默认情况下它不使用设备像素比(在典型的智能手机或视网膜显示器上可能是 2 或 3)来计算显示播放器的宽度和高度,除非您启用
useDevicePixelRatio
选项。
所以对于我的 8 秒循环视频,它将首先选择 360 像素版本而不是 1080 像素版本。它看起来很糟糕!
所以一旦我设置了这两个选项,我就会在手机上获得 1080 视频大小,但在具有 1x 分辨率的模拟旧手机上会获得较小的 720。
hls: {
limitRenditionByPlayerDimensions: true,
useDevicePixelRatio: true
}
您还可以将以下选项添加到
hls
。我不会推荐bandwidth
除非你真的需要忽略带宽并选择一个完全基于播放器尺寸的版本:
useNetworkInformationApi
Uses browser API to estimate bandwidth. This maxes out at 10Mbps (to avoid [fingerprinting][1]) but if video.js thinks the bandwidth is higher based on observation it will use the higher value.
bandwidth
Override bandwidth estimate. To make the player ignore bandwidth when making decisions about which version to pick you can set this to `bandwidth: 10e6` which is 10Mbps or even `Number.MAX_VALUE`
我刚刚在相关的 Github 问题上添加了注释videoJS 如何确定第一段的质量? 建议更改默认值或改进文档。