Ich habe einen Player für HTML5 gebaut, der die Musik von meinem Server herunterlädt. Der Player funktioniert einwandfrei, wenn ich das Lied von Anfang an spiele, aber wenn ich versuche, ein Lied aus einer bestimmten Zeit mit dem currentTime-Attribut abzuspielen nichts passiert und das Lied beginnt von Anfang anhtml5 audioeinstellung currentTime
meine Server-Seite ist Java Federmvc, und mein Client ist angularJS.
cleint Teil:
Audio-Fabrik:
tunesApp.factory('audio', function($document) {
var audio = $document[0].createElement('audio');
return audio;
});
Spielerfabrik:
tunesApp.factory('player', function(audio, $rootScope) {
var player,
playlist = [],
current = {
track: 0
};
player = {
playlist:playlist,
play: function(track) {
if (!playlist.length) return;
if (angular.isDefined(track)) current.track = track;
audio.src = playlist[current.track].url;
audio.currentTime = playlist[current.track].startFrom; // also try with .toString()
audio.play();
}
};
playlist.add = function(album) {
if (playlist.indexOf(album) != -1) return;
playlist.push(album);
};
playlist.remove = function(album) {
var index = playlist.indexOf(album);
if (index == current.album) player.reset();
playlist.splice(index, 1);
};
return player;
});
und wenn ich Lied hinzufügen:
tunesApp.controller('myController', function(player) {
player.playlist.add({
url: "/path/to/server",
startFrom: 65 // in seconds
});
player.play();
});
und den Server-Controller zu erhalten das Lied:
@RequestMapping(path="/song/{file_id}", method=RequestMethod.GET)
public void getFile(@PathVariable("file_id") String fileId, HttpServletResponse response){
try{
// get the song from the DB
String songName = DB.getSong(fileId);
File file = new File(fullPath + songName);
response.setContentType("audio/mpeg"); // i use only mp3 files
Long length = file.length();
response.addHeader("Content-Range", "bytes 0-" + new Long(length-1).toString()+"/"+length);
response.setContentLength((int)length);
InputStream inputStream = new BufferInputStream(new FileInputStream(file));
FileCopyUtils.copy(inputStream,response.getOutputStream());
response.flushBuffer();
}catch(Exception ex){}
}
dieser Code arbeitete für eine Weile und dann aufhören zu arbeiten :(
UPDATE
der Code funktioniert perfekt in Rande, aber der Fehler ist in Chrom 44 und 48
jeden Hilfe?
Ich habe versucht, aber das Ereignis capplay feuerte die ganze Zeit ohne zu stoppen, so dass es nicht half, das Load-Ereignis auch nicht funktioniert. Das Lustige ist, dass es bis vor ein paar Tagen noch ganz gut geklappt hat. –
Ich weiß, dass es ein Jahr war, also haben Sie vielleicht eine andere Lösung gefunden, aber es gibt eine "suchbare" Eigenschaft auf dem Audio-Tag, die den Bereich zurückgibt, den Sie suchen können. Es basiert (ich nehme an) basierend auf einer Kombination aus Pufferstatus und ob der Server die Range: Header richtig sendet, die das Tag benötigt. Chrome Android <51 nicht (einschließlich FireOS Standard-Webansicht, obwohl der Seide Browser scheint aktualisiert zu haben). –