简介
作为我项目的一部分,我有一个接收视频流的播放器。我希望它在流开始和结束时自动播放和自动停止,所以我引入了一个检查,看看流是否处于活动状态,并在每种情况下启动和/或停止播放器。
这是一个企业网站,有时会有高达3000个用户同时看到流,我们测试了15000个同时使用的用户。
大多数用户使用此功能没有问题。然而,对于一小部分用户,流在传输的某个点错误地停止为完成。
这是一个Angular FE,使用Clappr播放器。AFAI可以告诉这在Windows和Chrome中发生。
问题
在研究其中一个案例时,我在控制台中发现了以下内容:
Uncaught (in promise) DOMException: The play() request was interrupted because
video-only background media was paused to save power.
https://developer.chrome.com/blog/play-request-was-interrupted/
这是一台装有Chrome的Windows机器。错误中出现的真实的URL是一个缩短的URL。我用完整的URL替换,因为SO不允许发布缩短的URL。所以我转到Chrome配置并找到性能选项:记忆保护器和节能器。我以为我找到了解决方案。很明显:这些配置中的一种可能在用户改变标签并将流留在后台之后停止流。
但这是当我更大的问题开始.首先,我试图找到确切的选项,将这样做.经过多次试验和错误,我发现Memory Saver不会这样做,因为它运行后,它重新加载页面时返回到它.在我的情况下,页面保持加载与错误消息.
省电并没有停止视频.它删除平滑滚动,可能其他的东西,但没有停止视频AFAI可以体验.即使经过长时间.
我把所有的节能选项,我可以找到在Windows和无法使它停止视频。
除此之外,错误消息(https://developer.chrome.com/blog/play-request-was-interrupted/)中显示的URL有2个AFAIU不相关错误的解决方案:
Uncaught (in promise) DOMException: The play() request was interrupted
by a call to pause().
和
Uncaught (in promise) DOMException: The play() request was interrupted
by a new load request.
这是由于无法访问流而暂停后的播放尝试引起的。在我的情况下,暂停是为了保存电力(尽管我无法在所有省电选项都打开的情况下重现它)。我找不到任何关于我得到的特定错误的参考,甚至在Chromium或Clappr的源代码中也没有。
问题
所以现在我需要一种方法来可靠地重现显示错误消息的错误。那么问题就来了:究竟是什么原因导致了这个特定的错误消息?
我的应用程序本身不节能。但我找不到任何产生该错误消息的节能选项。
在我找到一种方法来可靠地重现问题后,我需要找到一种方法来避免视频停止。因此,在这个问题的答案中加上一个加号将是一种方法。
一些有用的信息
我只能在特定版本的Chrome和Windows中找到这两个选项(内存和节能模式):111.0.5563.148(正式版)64位
没有任何Chromium版本具有此编号。Linux中编号相同的Chromium版本没有这2个选项。此外,大多数Chrome/Chromium版本只有内存节省选项,而较新的版本没有。我提到Chromium是因为Google出于安全原因不允许下载旧版本的Chrome,我们必须在需要时使用Chromium。幸运的是,我有一个windows版本的浏览器,在那里我发现了这个问题.虽然我主要是放弃了这些选项的原因,我说这一点,所以有人有不同的看法知道我可以测试这个.
最后,我用于测试的流没有音频,以便复制可能产生错误的最佳条件。请记住,错误消息说“请求被中断,因为仅视频后台媒体被暂停以保存电力”。
1条答案
按热度按时间g2ieeal71#
好吧,这个看起来不太真实的。在尝试了各种配置, chrome 版本和设置一周后,我发现错误是如何重现的:
确保播放器未静音
1分钟后,你改变了标签的背景错误应该发生。这并不重要,如果能源和电池节省是开或关。只要取消静音播放器。
就是这样。天啊...有时候我讨厌我的职业