2014-01-21 23 views
5

我正在製作一個Chrome應用程序,我想爲視頻播放定製控件,但是我在靜音按鈕方面遇到了一些困難。大多數將在應用程序中播放的視頻都是無聲的,所以我希望能夠在沒有音軌的情況下禁用按鈕,就像chrome使用默認控件一樣。HTML5視頻,如何檢測何時沒有音軌?

嘗試使用音量值,但即使沒有音軌也會返回「1」。檢查視頻是否靜音也不起作用。

這裏是snippet

有什麼建議嗎?

+0

,我不認爲這是目前可能的。另外,有幾個視頻具有音頻軌道,但整個時間保持沉默。 – Brad

+0

永不言敗:您可以將視頻的音頻輸入到webAudio API操作中,以驗證非靜音。只適用於鉻和FF,我不知道如何去做,但它可以做到... – dandavis

+0

@dandavis:這應該在[鉻,FF和Safari](http://caniuse.com /音頻-API)。 –

回答

7

在某些時候,瀏覽器可能會開始實施audioTracks property。目前,您可以將webkitAudioDecodedByteCount用於webkit,對於Firefox可以使用mozHasAudio。基於upuoth的回答和擴展,以支持IE10 +

function hasAudio (video) { 
    return video.mozHasAudio || 
    Boolean(video.webkitAudioDecodedByteCount) || 
    Boolean(video.audioTracks && video.audioTracks.length); 
} 

使用

document.getElementById("video").addEventListener("loadeddata", function() { 
    if (typeof this.webkitAudioDecodedByteCount !== "undefined") { 
    // non-zero if video has audio track 
    if (this.webkitAudioDecodedByteCount > 0) 
     console.log("video has audio"); 
    else 
     console.log("video doesn't have audio"); 
    } 
    else if (typeof this.mozHasAudio !== "undefined") { 
    // true if video has audio track 
    if (this.mozHasAudio) 
     console.log("video has audio"); 
    else 
     console.log("video doesn't have audio"); 
    } 
    else 
    console.log("can't tell if video has audio"); 
}); 
4

較短的功能:

var video = document.querySelector('video'); 
if(hasAudio(video)) { 
    console.log("video has audio"); 
} else{ 
    console.log("video doesn't have audio"); 
} 
相關問題