Html5 charge l'audio / les métadonnées, mais pas l'audio?

Je suis très coincé. J'ai malmené pendant au moins 30 minutes et je ne peux pas comprendre comment précharger les métadonnées uniquement.

Si vous y parvenez, vous verrez qu'il existe un attribut de précharge qui vous permet de spécifier quoi précharger. Je l'ai marqué comme métadonnées uniquement parce que je voulais la durée de chaque fichier audio. Comme il ne chargeait pas, j'ai essayé .load() et qui charge l'audio réel même si j'ai spécifié des métadonnées.

Comment puis-je charger le méta en html5 javascript? S'il a chargé une seconde ou deux de l'audio, je ne m'inquiéterai pas tant qu'il n'essaye pas de précharger les minutes ou le fichier entier.

Http://www.whatwg.org/specs/web-apps/current-work/multipage/video.html#dom-media-networkstate

Valeur 2 = NETWORK_LOADING, où 1 = inactif aka est chargé.

Http://jsfiddle.net/CD3BZ/

 <body> <div>Click to test if loaded</div> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"></script> <script type="text/javascript" charset="utf-8"> try{ var a1 = new Audio('http://freshly-ground.com/data/audio/sm2/20060924%20-%20Ghosts%20&%20Goblins%20Reconstructed.ogg'); $(a1).bind('loadedmetadata', function(e){ //alert('a1 ' + a1.duration + ' ' + a1.networkState); }); $(a1).bind('canplay', function(e){ alert('a1z ' + ' ' + a1.networkState); }); $(a1).attr('preload', 'metadata'); a1.preload = 'metadata'; //alert(a1.duration); //a1.play(); a1.load(); $('div').click(function(e){ alert('a1z ' + ' ' + a1.networkState); }); } catch(e){ alert(e); } </script> </body> 

Vous devriez pouvoir utiliser l'attribut de précharge:

 <audio autobuffer preload=”metadata” src=”audio.foo”></audio> 

Il y a aussi une suggestion et une discussion sur le blog de Chris Pearce , qui suggère essentiellement de faire une pause et ensuite de définir src dans une chaîne vide. Comme expliqué dans les commentaires sur la publication, cette méthode n'est pas idéale … Vous pouvez (en théorie) le faire dès que l'événement loadedmetadata a déclenché, et vous avez récupéré les métadonnées dont vous avez besoin.

Cette question suggère de définir des en-têtes, qui pourraient également fonctionner …