如何使用MediaSource查找音频并继续播放



我目前正在尝试为我的Angular web应用程序实现一个音频播放器,下面是关于Google Developers的教程,以及我在"可以';t在从媒体源播放时寻找视频";。

不过,在我的情况下,最大的区别是我想流式传输音频块向导,这样用户就不必下载整个文件才能立即收听。

从一开始到一开始听一首歌已经开始了,因为我只是从服务器下载字节块,并在它们到达时简单地将每个块附加到SourceBuffer

然而,我无法实施";seek";功能。

我不太明白如何在客户身上处理这个问题。目前我只处理mp3文件。我找不到任何解释seeking示例。

我知道根据Media Events文档,设置audio元素的currentTime会触发seeking事件。我们有:

this.audioObj = document.createElement('audio');

和一个设置器:

public seekTo(seconds) {
this.logger.debug(`seekTo ${seconds.toFixed(2)} seconds`);
// Setting currentTime will cause a "seeking" event to be emitted.
this.audioObj.currentTime = seconds;
}

认为在设置currentTime并将其附加到sourceBuffer之前,我必须加载新数据。然而,由于显而易见的原因,这根本无法奏效。

我怎样才能做到这一点?

如果你已经设置了持续时间,你应该可以设置currentTime,但没有什么可玩的。您可以使用currentTime来通知区块提取器您需要文件的哪一部分,并将其附加,以便媒体元素可以继续播放。

请注意,当使用mp3时,SourceBuffer将以sequence模式运行,因为没有时间戳,这意味着如果你只是盲目地添加字节,它们将不在正确的时间点——我认为你需要将timestampOffset设置为相关帧的相关时间(我自己还没有尝试过(。

最新更新