【问题标题】:HTML 5 <audio> - Play file at certain time pointHTML 5 <audio> - 在特定时间点播放文件
【发布时间】:2012-08-15 07:15:04
【问题描述】:

我有一个简单的自动播放 sn-p 来播放音频文件,但是我想知道是在 JavaScript 中还是作为属性在特定时间播放该文件(例如 3:26)。

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

<audio id="audio2" 
       preload="auto" 
       src="file.mp3" 
       oncanplaythrough="this.play();">
</audio>

任何帮助都会很棒。在此先感谢:)

【问题讨论】:

  • 这个“oncanplaythrough”属性是从哪里来的?它没有任何标准。

标签: javascript jquery html audio


【解决方案1】:

我有一个适用于所有人的简单答案

1- 创建一个按钮,单击该按钮会播放音频/视频
2-测试单击按钮时播放的音频是否可以隐藏按钮和
3- 页面加载时单击按钮

    window.onload =function(){
        document.getElementById("btn").click();
    }

【讨论】:

    【解决方案2】:

    最好的方法是使用媒体片段 URI 规范。使用您的示例,假设您要加载从 3:26 开始的音频。

    <audio id="audio2" 
           preload="auto" 
           src="file.mp3#t=00:03:26" 
           oncanplaythrough="this.play();">
    </audio>
    

    或者,我们可以只使用秒数,例如 file.mp3#t=206

    您还可以通过用逗号分隔开始时间和结束时间来设置结束时间。 file.mp3#t=206,300.5

    此方法比 JavaScript 方法更好,因为您向浏览器暗示您只想从某个时间戳加载。根据文件格式和服务器对远程请求的支持,浏览器可能只下载播放所需的数据。

    另见:

    【讨论】:

    • 有人能告诉我为什么这种方法第二次不起作用吗?我在点击时播放音频,但第二次点击按钮时,音频播放但 #t=begintime,endtime 不起作用
    【解决方案3】:

    一些事情...您的脚本首先需要在音频标签之后

    此外,您不需要音频标签上的 oncanplaythough 属性,因为您使用 JavaScript 来处理此问题。

    此外,oncanplaythrough 是一个事件,而不是一种方法。让我们为它添加一个监听器,它将使用canplaythough。看看这个:

    <audio id="audio2" 
       preload="auto" 
       src="http://upload.wikimedia.org/wikipedia/commons/a/a9/Tromboon-sample.ogg" >
    
       <p>Your browser does not support the audio element</p>
    </audio>
    
    <script>
      myAudio=document.getElementById('audio2');
      myAudio.addEventListener('canplaythrough', function() {
        this.currentTime = 12;
        this.play();
      });
    </script>
    

    最后,要在特定点开始播放歌曲,只需在实际播放文件之前设置currentTime。在这里,我将其设置为 12 秒,因此在此示例中可以听到,对于 3:26,您将使用 206(秒)。

    查看现场演示:http://jsfiddle.net/mNPCP/4/


    编辑:似乎currentTime 可能在Firefox 以外的其他 浏览器中不正确地实现。根据filed W3C bug 的分辨率,当设置currentTime 时,它应该触发canplaycanplaythrough 事件。这意味着在我们的示例中,Firefox 将无限期地播放音轨的第一秒左右,从不继续播放。我想出了这个快速的解决方法,让我们改变

    this.currentTime = 12;
    

    测试它是否已经被设置,从而防止canplaythrough被重复调用:

    if(this.currentTime < 12){this.currentTime = 12;}
    

    目前对该规范的这种解释仍有争议,但目前该实现应该适用于大多数支持 HTML5 音频的现代浏览器。

    更新后的 jsFiddle:http://jsfiddle.net/mNPCP/5/

    【讨论】:

    • 我不认为 canplaythrough 是任何标准中的任何事件。你在哪里找到的?
    • 最近添加了oncanplaythrough 事件处理程序,作为29 March 2012 working draft 的一部分
    • 好的,所以警告! oncanplaythrough 在除 IE 之外的任何浏览器中都不起作用,也没有文档记录,并且只有五个月大,并且仅处于草稿状态。
    • 只记录在 IE 中?真的吗?难以置信!哈哈。 canplaythrough(或 oncanplaythough 当用作属性时)在 Chrome 和 Firefox 中似乎可以正常工作,并且是 documented here on MDN
    • 我在回答的后半部分提供了一个简单的解决方法
    猜你喜欢
    • 2018-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-31
    相关资源
    最近更新 更多