Comment passer à certains décalages horaires dans les éléments HTML5 Audio ?
Ils disent que vous pouvez simplement définir leur currentTime
propriété (emphase mienne):
L'attribut
currentTime
doit, à la réception, renvoyer la position de lecture actuelle, exprimée en secondes. Avec le paramètre , si l'élément multimédia a un contrôleur de média actuel, il doit alors lever une exception INVALID_STATE_ERR. sinon, l'agent utilisateur doit rechercher la nouvelle valeur (ce qui pourrait déclencher une exception).
Hélas, cela ne semble pas fonctionner (j'en ai besoin sous Chrome).
Il y a des questions similaires, mais pas de réponses.
Fonctionne sur mon chrome ...
$('#audio').bind('canplay', function() {
this.currentTime = 29; // jumps to 29th secs
});
Pour contourner un fichier audio, votre serveur doit être configuré correctement.
Le client envoie demandes de plage d'octets pour rechercher et lire certaines régions d'un fichier. Le serveur doit donc répondre correctement:
Afin de prendre en charge la recherche et la lecture de régions du média non encore téléchargées, Gecko utilise des requêtes de plage d'octets HTTP 1.1 pour extraire le média de la position de la cible de recherche. De plus, si vous ne fournissez pas d'en-têtes X-Content-Durée, Gecko utilise des requêtes sur une plage d'octets pour rechercher la fin du média (en supposant que vous serviez l'en-tête Content-Length) afin de déterminer la durée du média.
Ensuite, si le serveur répond correctement aux demandes de plage d'octets, vous pouvez définir la position de l'audio via currentTime
:
audio.currentTime = 30;
Voir MDN Configuration des serveurs pour le support Ogg (il en va de même pour les autres formats).
Voir aussi Configuration des serveurs Web pour les fichiers audio et vidéo HTML5 Ogg .
Vous pouvez utiliser le #t
URI propriété plage de temps
et qui est valable à la fois audio et vidéo médias.
stackoverflow.mp3#t=8.5 // Will start playing from the 8.5 sec.
var a = new Audio();
a.src= "http://upload.wikimedia.org/wikipedia/en/4/45/ACDC_-_Back_In_Black-sample.ogg#t=4.5";
a.play();
Si vous souhaitez passer dynamiquement à une plage spécifique, utilisez HTMLMediaElement. currentTime :
audio.currentTime = 8.5;
Une solution beaucoup plus facile est
var element = document.getElementById('audioPlayer');
//first make sure the audio player is playing
element.play();
//second seek to the specific time you're looking for
element.currentTime = 226;
Assurez-vous d’essayer de définir la propriété currentTime
après l’élément audio est prêt à être lu. Vous pouvez lier votre fonction à l'attribut d'événement oncanplay
défini dans la spécification.
Pouvez-vous poster un exemple du code qui a échoué?
Firefox effectue également des demandes de plage d'octets lors de la recherche de contenu qu'il n'a pas encore chargé. Il ne s'agit pas simplement d'un problème chrome. Définissez l'en-tête de réponse "Accept-Ranges: bytes" et renvoyez un 206 contenu partiel. code de statut permettant à tout client de faire des demandes de plage d'octets.
Je faisais face au problème que la barre de progression de l'audio ne fonctionnait pas mais que l'audio fonctionnait correctement. Ce code fonctionne pour moi. J'espère que cela vous aidera aussi. Ici la chanson est l’objet du composant audio.
Partie HTML
<input type="range" id="seek" value="0" max=""/>
JQuery Part
$("#seek").bind("change", function() {
song.currentTime = $(this).val();
});
song.addEventListener('timeupdate',function (){
$("#seek").attr("max", song.duration);
$('#seek').val(song.currentTime);
});
La réponse de @ katspaugh est correcte, mais il existe une solution de contournement qui n'exige aucune configuration de serveur supplémentaire. L'idée est d'obtenir le fichier audio sous forme de blob, de le transformer en dataURL
et de l'utiliser en tant que src
pour l'élément audio
.
Voici la solution pour angular $http
, mais si nécessaire, je peux également ajouter la version de Vanilla JS:
$http.get(audioFileURL,
{responseType:'blob'})
.success(function(data){
var fr = new FileReader;
fr.readAsDataURL(data);
fr.onloadend = function(){
domObjects.audio.src = fr.result;
};
});
Définissez la position temporelle sur 5 secondes:
var vid = document.getElementById("myAudio");
vid.currentTime = 5;