【发布时间】:2020-02-12 07:10:00
【问题描述】:
当通过<audio> 或Audio() 播放实时音频流(如网络广播)时,暂停事件可以(至少)三种方式触发:
- 用户点击暂停按钮(
<audio controls>) - 用户点击浏览器全局音频控件
- iOS:Control Center
- Android:浏览器的通知抽屉(至少 Chrome、Opera、Firefox)
- 桌面:Media Session API 控件,但未初始化,没有明确的
setActionHandler(目前可能隐藏在标志后面)
- 各种网络条件导致的缓冲区不足
能区分1/2和3吗?
- 理想情况下,应该有一个像
isTrusted这样的事件属性,我错过了 - 我试图猜测,特别是看起来。
readyState和networkState,但两者都非常不确定,尤其是跨浏览器(例如HAVE_FUTURE_DATA与HAVE_ENOUGH_DATA的解释/语义) - 我已经避免制作“衰减状态机”来处理其他事件。缓冲区欠载通常之前是
stalled事件,有时之后是ended事件。跨浏览器的实现似乎非常复杂,误报的风险非常高。
在媒体会议lands 无处不在之前,我是不是运气不好?
注意:this question 看起来像是一个解决方案,但不幸的是不是——浏览器以不同且不一致的方式处理直播流的“结束”。
【问题讨论】:
标签: javascript audio html5-audio mediaelement mediasession