【问题标题】:html5 audio setting currentTimehtml5音频设置currentTime
【发布时间】:2016-03-21 07:48:06
【问题描述】:

我为 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 中

有什么帮助吗?

【问题讨论】:

    标签: javascript angularjs html spring-mvc html5-audio


    【解决方案1】:

    在尝试更改时间之前,您可能需要等待“canPlay”事件触发。

    使用 Chrome 桌面版和 Firefox,您还可以侦听“加载”事件,以告知您文件是否已加载到您想要的位置。

    【讨论】:

    • 我试过了,但是 canplay 事件一直触发而没有停止所以它没有帮助,加载事件也没有工作。有趣的是,直到几天前它还运行良好。
    • 我知道已经一年了,所以也许你已经用另一种方式解决了这个问题,但是音频标签上有一个“可搜索”属性,它返回一个可以搜索的范围。它(我假设)基于缓冲状态和服务器是否正确发送范围:标签所需的标头的组合。 Chrome Android
    猜你喜欢
    • 2016-08-30
    • 2011-03-11
    • 1970-01-01
    • 1970-01-01
    • 2013-12-12
    • 2014-10-17
    • 2017-09-23
    • 2020-04-29
    • 2014-03-09
    相关资源
    最近更新 更多