[英]Detect if <audio> `pause` event fired by user interaction or buffer underrun?
當通過<audio>
或Audio()
播放實時音頻流(如網絡廣播Audio()
,暫停事件可以(至少)三種方式觸發:
<audio controls>
)是否可以區分 1/2 和 3?
isTrusted
這樣的事件屬性,我缺少它readyState
和networkState
,但兩者都非常不確定,尤其是跨瀏覽器(例如HAVE_FUTURE_DATA
與HAVE_ENOUGH_DATA
的解釋/語義)stalled
事件之前,有時在ended
事件之后。 跨瀏覽器的實現看起來非常復雜,誤報的危險非常高。難道我的運氣,直到媒體會話土地隨處可見?
注意: 這個問題看起來像一個解決方案,但不幸的是不是——瀏覽器處理實時流的“結束”不同且不一致。
waiting
事件應該符合您的需求。
您可以在使用 Chrome 網絡選項卡中的下拉菜單模擬不良網絡時嘗試此演示(例如:慢速 3G)
const video = document.getElementById('mwe_player_0'); video.onwaiting = function() { console.log('onwaiting'); };
<video id="mwe_player_0" controls="" preload="none" style="width:800px;height:450px"><source src="https://upload.wikimedia.org/wikipedia/commons/2/22/Volcano_Lava_Sample.webm" type="video/webm; codecs="vp8, vorbis""></video>
請注意,此演示也適用於HTMLAudioElement
(因為它繼承了HTMLMediaElement
)。 視頻演示更容易測試。
如果您想在用戶暫停音頻時啟動一個事件,那么此代碼段將完成這項工作。 我沒有在通知抽屜中的移動設備上測試它,但我認為它會起作用。
const video = document.querySelector('video');
video.addEventListener('pause', (event) => {
console.log('The Boolean paused property is now true. Either the ' +
'pause() method was called or the autoplay attribute was toggled.');
});
資源:音頻元素事件
資源:暫停事件
我還找到了有關您嘗試執行的操作2的有用答案(至少根據我的理解)以及為什么它是一種糟糕的技術。 問題鏈接
3事件:停滯/等待檢查事件資源
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.