智能带宽保存:如何阻止HTML5 mp3音频文件不必要地加载,同时显示总长度?

时间:2017-07-11 12:50:10

标签: javascript html5 audio html5-audio bandwidth

鉴于是一款简单干净的HTML5音频播放器。为了使持续时间有效,必须在此代码中省略preload="none",这违背了拥有一个微型音频播放器的全部目的!

我想要的是:等待并且不加载mp3文件(节省数兆字节的其他浪费的数据)除非并且直到用户点击播放!然后,只有当mp3加载并播放时,才会显示持续时间信息。怎么做到这一点?

换句话说:只要没有人点击PLAY,就不应该从服务器加载数据,持续时间只是00:00。谢谢!

/*  BAD: Loads mp3 file, even of nobody clicks play!
   GOOD: Shows duration time correctly. */
<audio src="http://labs.qnimate.com/files/mp3.mp3" type="audio/mpeg"></audio>
/*  BAD: Doesn't show the duration time!
   GOOD: Doesnt load the mp3 file unless user clicks play.   */   
<audio src="http://labs.qnimate.com/files/mp3.mp3" type="audio/mpeg" preload="none"></audio>

https://jsfiddle.net/xt5c0whx/10/

为了清晰起见,总结了不同的状态:
•网页加载,但10兆字节的mp3还没有加载。持续时间显示为“00:00”
•如果用户单击播放,则加载,播放mp3并且持续时间显示音频长度时间

1 个答案:

答案 0 :(得分:1)

为了仅检索长度,您应该预加载元数据(当然首先确保有关文件的元数据)。但这只会加载长度细节而不是实际文件

<audio src="http://labs.qnimate.com/files/mp3.mp3"  preload="metadata" type="audio/mpeg"></audio>

来自mozilla docs on audio

  

预加载

     

此枚举属性旨在为浏览器提供提示   关于作者认为会带来最佳用户体验的内容。它   可能具有以下值之一:none:表示音频   不应预先加载; 元数据:表示只有音频元数据   (例如,长度)被提取; auto:表示整个音频文件   可以下载,即使用户不希望使用它;该   空字符串:自动值的同义词。如果未设置,则为其默认值   是浏览器定义的(即每个浏览器可能有自己的默认值)。   规范建议将其设置为元数据。

希望这有帮助