如何限制在 Safari(MacOS 和 iOS)中暂停时获取 hls 段文件

Posted

技术标签:

【中文标题】如何限制在 Safari(MacOS 和 iOS)中暂停时获取 hls 段文件【英文标题】:How to restrict fetching hls segment files on pause in Safari (MacOS and iOS) 【发布时间】:2021-09-24 09:30:53 【问题描述】:

我们生成段大小为 3 秒的 hls 文件。我们将 hlsjs 用于非 Safari 浏览器,Safari 支持原生 hls。

在 hlsjs 世界中,我们能够使用 maxMaxBufferLength 限制我们应该在缓冲区方面领先多少,因为我们无法为 Safari 找到类似的解决方案。在 Safari 中,加载视频 m3u8 后,即使我在一秒钟后暂停,在网络选项卡中我也可以看到正在获取我想要限制的所有片段。

由于公司政策,我无法分享我们的示例。但是,下面附上了一个 hls.js 的公共示例文件:

https://test-streams.mux.dev/x36xhzz/url_6/193039199_mp4_h264_aac_hq_7.m3u8 尝试在 Safari 中打开此网址,然后尝试暂停视频,您会看到它继续下载。就好像你使用 https://hls-js.netlify.app/demo/ 和 maxMaxBufferLength: 5 打开同一个一样不会发生。

ffmpeg 是否有一个选项可以使其受控缓冲区或我们应该通过监听事件为 Safari 做的一些解决方案?

在这里找到同样的问题 -> https://developer.apple.com/forums/thread/121074

【问题讨论】:

【参考方案1】:

查看this resource 后,它突出了以下事实:

hls.js 尝试缓冲最多字节数(默认为 60 MB),而不是缓冲最多 nb 秒。 这是为了模仿浏览器的行为(缓冲区驱逐算法在浏览器检测到视频缓冲区大小达到字节限制后启动)。

查看this script file here 的第175 和176 行显示maxBufferSize 的8 次以充当maxBufLen 是个好主意。您可能会考虑改变这一点。

【讨论】:

maxBufferSize、maxBufLen 和 maxMaxBufferLength 等 hls.js 配置不是我正在寻找的东西,我们如何在具有本机 hls 支持的浏览器上模仿相同的行为(意味着没有 hls.js参与)。 我想说的是,您要么自定义系统的 hls.js 响应,就像您显然所做的那样,要么您坐下来让原生支持做任何它设计的事情做。您不能同时拥有两者并期望获得相同的结果。我的理解是,这些参数应该仍然可以通过编程方式(通过浏览器类型检测辅助)或作为Safari 设置访问。即不要只考虑js。也可以是iosSafari 参数。【参考方案2】:

尝试从视频元素中删除 src 属性 removeAttribute('src');

您可能还需要调用视频元素的加载方法以避免浏览器崩溃

【讨论】:

以上是关于如何限制在 Safari(MacOS 和 iOS)中暂停时获取 hls 段文件的主要内容,如果未能解决你的问题,请参考以下文章

iOS 和 Safari macOS 中的 z-index 反转

MacOs 和 iOs 上 Safari 的 React 和 Axios GET 请求问题

macOS+iOS:Safari和Webkit停止支持SHA-1证书了

用户在iOS 13.4/macOS 10.15.4 Safari上发现有趣的Bug

HTML5 地理定位在 Safari 上不起作用 - Mac OS/iOS

Safari 14 Beta登场:macOS Catalina也可用