【问题标题】:Triggering an HTML5 audio track to play whenever it has loaded加载时触发 HTML5 音轨播放
【发布时间】:2011-07-05 10:56:21
【问题描述】:

我正在尝试使用 .play() JavaScript 函数在页面加载几秒钟后播放 HTML5 音轨。

有时,当音频加载缓慢时,当播放器看起来像这样时会触发 .play():

音频在缓冲时不播放。

有时,当音频加载很快并且播放器看起来像这样时,.play() 可以正常工作。

解决此问题的最快方法是什么? (使用监听器?我坚持“加载时播放”功能)。

【问题讨论】:

标签: javascript html buffering html5-audio


【解决方案1】:

这应该可以工作:

<script language="JavaScript" type="text/javascript">
    var myAudio = document.getElementById('audio1')
    myAudio.oncanplaythrough = function () {this.play();}
</script>

<audio id="audio1" controls preload="auto" />
<audio id="audio2" controls preload="auto" oncanplaythrough="this.play();" />

【讨论】:

    【解决方案2】:

    如果加载成功,无论是使用 src 属性还是使用源元素,在下载数据时,都会触发进度事件。当加载了足够的数据以确定视频的尺寸和持续时间时,将触发 loadmetadata 事件。当加载了足够的数据以呈现帧时,将触发loadeddata 事件。当加载了足够多的数据以播放一小段视频时,就会触发一个 canplay 事件。当浏览器确定它可以播放整个视频而无需停止下载更多数据时,就会触发 canplaythrough 事件;如果视频具有自动播放属性,这也是视频开始播放的时间。

    注意:Opera 10.50 不会尝试确定何时有足够的数据可以播放,而是同时触发 canplay 和 canplaythrough。这可能会在未来的版本中得到修复。

    如果浏览器决定停止下载数据以节省带宽,那么它将触发暂停事件。如果服务器由于某种原因停止提供数据(没有关闭连接),那么三秒钟后浏览器会触发一个停止事件。如果浏览器的播放速度快于服务器提供数据的速度,或者当搜索导致浏览器等待下载数据时,就会触发等待事件。

    注意:Opera 10.50 尚未暂停下载,也不会触发停滞事件。

    如果您希望在视频能够播放之前禁用播放按钮,您可以在 canplay 事件中启用它:

    <input type="button" value="Play" id="playpause" onclick="playOrPause()" disabled>
    video.oncanplay = function(e) {
      playpause.disabled = false;
    }
    

    Source.

    【讨论】:

    • 感谢雷丁的西蒙·韦斯特!
    【解决方案3】:

    你可以设置:

    <script>
    var myAudio = document.getElementById('audio1');
    myAudio.setAttribute('autoplay', 'autoplay');</script>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多