簡體   English   中英

HTML5視頻,沒有音軌怎么檢測?

[英]HTML5 video, how to detect when there is no audio track?

我正在制作一個 chrome 應用程序,我想對視頻播放進行自定義控制,但我在使用靜音按鈕時遇到了一些困難。 大多數將在應用程序中播放的視頻都是靜音的,所以我希望能夠在沒有音軌時禁用按鈕,就像 chrome 使用默認控件一樣。

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

這是一個片段

有什么建議么?

基於upuoth的答案的更短的功能並擴展到支持IE10+

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

用法:

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

在某些時候,瀏覽器可能會開始實現audioTracks 屬性 現在,你可以使用webkitAudioDecodedByteCount的WebKit的,和mozHasAudio為Firefox。

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");
});

出於某種原因, @fregante 的hasAudio函數在某個時候停止在 Chrome 中工作 - 即使在等待“loadeddata”和“loadedmetadata”事件,甚至“canplaythrough”事件之后。 它可能與我使用的視頻格式(webm)有關。 無論如何,我通過短時間播放視頻來解決它:

// after waiting for the "canplaythrough" event:
hasAudio(video); // false
video.play();
await new Promise(r => setTimeout(r, 1000));
video.pause();
hasAudio(video); // true

有多種方法可以檢查視頻文件是否有音頻,其中一種方法是使用視頻的mozHasAudiovideo.webkitAudioDecodedByteCountvideo.audioTracks?.length屬性

const video = component.node.querySelector("video");
video.onloadeddata = function() {
    if (video.mozHasAudio || Boolean(video.webkitAudioDecodedByteCount) || Boolean(video.audioTracks?.length)) {
        console.log("This video has audio tracks.");
    } else {
        console.log("This video has no audio tracks.");
    }            
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM