在数据连接中检测移动 chrome 上 HTML 音频的 canplaythrough

Posted

技术标签:

【中文标题】在数据连接中检测移动 chrome 上 HTML 音频的 canplaythrough【英文标题】:Detect canplaythrough of HTML Audio on mobile chrome when in Data connection 【发布时间】:2016-07-13 15:54:25 【问题描述】:

我创建了一个使用音频文件作为音效和背景音乐的小型网络应用程序,我注意到当我在 Wifi 连接下的 chrome 上运行它时,它运行良好,但是当我切换到数据时,某些事件不会触发完全及时......他们最终会开火,但在一些交互或调用“播放”方法之后。

let v = new Audio();
v.preload = "auto";
v.src = "some mp3 file";

我看过的事件

loadstart suspend durationchanged loadedmetadata loadeddata canplay canplaythrough

在 Wifi 上,它们会按顺序立即触发

然而,在数据连接上,前两个启动,然后什么都没有发生,直到我在路上调用“play”。之后,触发了正常事件,除了我注意到 stalled 仅在 Data 上触发。

这是预期的行为吗?

我的问题是,在移动数据连接中如何检测“canplaythrough”或“canplay”甚至“loadeddata”?

【问题讨论】:

【参考方案1】:

显然,android 在连接到数据时会阻止音乐和视频的自动播放。 canplaythrough 需要预加载音频或至少要在 Data 上阻止的元数据。

【讨论】:

如果仅加载元数据,canplaythrough 不会触发。来自 MDN:canplaythrough 事件在用户代理可以播放媒体时触发,并估计已加载足够的数据以播放媒体直至其结束,而无需停止进一步缓冲内容。 这个问题很老了,我不知道它是否改变了,但是如果你的手机在数据上,即使是巫术也无法让它在加载时播放。

以上是关于在数据连接中检测移动 chrome 上 HTML 音频的 canplaythrough的主要内容,如果未能解决你的问题,请参考以下文章

您如何在桌面和移动 Chrome 用户代理之间进行检测?

连接移动数据时 Ajax 不起作用

如何检测没有 chrome 的移动 safari?

您如何在移动 safari 上检测 3G 与 Wifi 连接?

iOS Chrome 检测

Google Chrome 无法在桌面系统上检测到 PWA?