簡體   English   中英

html5音頻設置currentTime

[英]html5 audio setting currentTime

我構建了一個HTML5播放器,可以從服務器下載音樂,如果我從頭開始播放歌曲,播放器就可以正常工作,但是當我嘗試使用currentTime屬性從特定時間播放歌曲時,什么也沒發生,並且歌曲從開始時

我的服務器端是Java spring mvc,我的客戶端是angularJS。

克林特部分:

音頻工廠:

tunesApp.factory('audio', function($document) {
    var audio = $document[0].createElement('audio');
    return audio;
});

播放器工廠:

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;
});

當我添加歌曲時:

tunesApp.controller('myController', function(player) {
    player.playlist.add({
        url: "/path/to/server",
        startFrom: 65 // in seconds
    });

    player.play();
});

和服務器控制器來獲取歌曲:

@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){}
}

該代碼工作了一段時間,然后停止工作:(

更新

該代碼可以在邊緣完美運行,但該錯誤在chrome 44和48中

有什么幫助嗎?

您可能需要等待“ canPlay”事件觸發才能嘗試更改時間。

使用Chrome桌面和Firefox,您還可以偵聽“已加載”事件,以告訴您文件是否已加載到所需位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM