Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript HTML5视频,当没有音轨时如何检测?_Javascript_Html - Fatal编程技术网

Javascript HTML5视频,当没有音轨时如何检测?

Javascript HTML5视频,当没有音轨时如何检测?,javascript,html,Javascript,Html,我正在制作一个chrome应用程序,我想为视频播放定制控件,但我在使用静音按钮时遇到了一些困难。大多数将在应用程序中播放的视频都是无声的,因此我希望能够在没有音轨时禁用该按钮,就像chrome在默认控件中所做的那样 尝试使用音量值,但即使没有音轨,也会返回“1”。检查视频是否静音也不起作用 这是一个例子 有什么建议吗?在某个时候,浏览器可能会开始实现。现在,您可以对webkit使用webkitAudioDecodedByteCount,对firefox使用MozasAudio document.

我正在制作一个chrome应用程序,我想为视频播放定制控件,但我在使用静音按钮时遇到了一些困难。大多数将在应用程序中播放的视频都是无声的,因此我希望能够在没有音轨时禁用该按钮,就像chrome在默认控件中所做的那样

尝试使用音量值,但即使没有音轨,也会返回“1”。检查视频是否静音也不起作用

这是一个例子


有什么建议吗?

在某个时候,浏览器可能会开始实现。现在,您可以对webkit使用
webkitAudioDecodedByteCount
,对firefox使用
MozasAudio

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

在某个时候,浏览器可能会开始实现。现在,您可以对webkit使用
webkitAudioDecodedByteCount
,对firefox使用
MozasAudio

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

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

基于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");
}
出于某种原因,Chrome在某个时候停止了工作——即使在等待“loadeddata”和“loadedmetadata”事件,甚至“canplaythrough”事件之后也是如此。这可能与我正在使用的视频格式(webm)有关。无论如何,我通过短时间播放视频解决了这个问题:

//等待“canplaythrough”事件后:
hasAudio(视频);//假的
video.play();
等待新的承诺(r=>setTimeout(r,1000));
video.pause();
hasAudio(视频);//真的
出于某种原因,Chrome在某个时候停止了工作,即使在等待“loadeddata”和“loadedmetadata”事件,甚至“canplaythrough”事件之后也是如此。这可能与我正在使用的视频格式(webm)有关。无论如何,我通过短时间播放视频解决了这个问题:

//等待“canplaythrough”事件后:
hasAudio(视频);//假的
video.play();
等待新的承诺(r=>setTimeout(r,1000));
video.pause();
hasAudio(视频);//真的

我认为这在目前是不可能的。另外,有多个视频有音频曲目,但始终保持静音。永不说永不:您可以将视频音频输入webAudio API以验证非静音。只能在chrome和FF上工作,我不知道怎么做,但可以做到…@dandavis:那应该可以。我真倒霉@丹达维斯,我会调查的,谢谢。我认为这目前不可能。另外,有多个视频有音频曲目,但始终保持静音。永不说永不:您可以将视频音频输入webAudio API以验证非静音。只能在chrome和FF上工作,我不知道怎么做,但可以做到…@dandavis:那应该可以。我真倒霉@dandavis我会调查的,谢谢。大家不要忘记视频元素上的
addEventListener(“loadeddata”)
。我在我的视频元素上为
loadeddata
loadedmetadata
登录了
hasAudio(video)
内部事件侦听器,在我的例子中,
loadedmetadata
记录了
false
,而
loadeddata
记录了
true
。大家不要忘记视频元素上的
addEventListener(“loadeddata”)
。我记录了
hasAudio(视频)
我的视频元素上的内部事件侦听器,用于
loadeddata
loadedmetadata
,在我的情况下,
loadedmetadata
被记录
false
,而
loadeddata
被记录
true
。这对于音频总是返回0,您知道如何检查音频是否有声音吗?对于音频,这总是返回0,您知道如何检查音频是否有声音吗?