Android ExoPlayer:它是否解决Android媒体播放器的无缝/无缝播放问题

有没有人尝试使用ExoPlayer来实现这一目标? 我试着在网上看,没有成功。

当我说无缝播放时,我指的是使用媒体播放器来播放本地video的问题。 第一个video播放完毕后,在第二个video开始播放之前,会有明显的延迟1秒。

希望这个问题有助于进一步理解这个问题。 参考请看下面的问题:

Android:MediaPlayer无缝或无缝的video播放

Solutions Collecting From Web of "Android ExoPlayer:它是否解决Android媒体播放器的无缝/无缝播放问题"

现在正式发布的ExoPlayer 2似乎支持使用ConcatenatingMediaSource类的无缝播放。 从开发者指南 :

来源之间的转换是无缝的。 没有要求连接的源是相同的格式(例如,将包含480p H264的video文件与包含720p VP9的video文件连接起来是很好的)。 源可能甚至是不同的types(例如,将video与仅audiostream串接)是很好的。

和示例代码:

 MediaSource firstSource = new ExtractorMediaSource(firstVideoUri, ...); MediaSource secondSource = new ExtractorMediaSource(secondVideoUri, ...); // Plays the first video, then the second video. ConcatenatingMediaSource concatenatedSource = new ConcatenatingMediaSource(firstSource, secondSource); 

编辑: ExoPlayer 2支持无缝播放,但截至编写的时间仍然没有作为一个稳定的版本发布。

使用ExoPlayer或Android媒体播放器,您很可能永远无法实现完美的无缝播放多首曲目。 也没有被写入支持开始多首曲目,我想它会超出他们的范围。

您可以使用2个不同的播放器实例实现无间断播放,一旦您开始播放第一个播放器,您可以加载第二个播放器并在第一个播放完成后开始播放。 使用这种方法,你可以有一个无缝的解决scheme,只要你在第一个播放的过程中准备第二个video。

要进一步研究,您还可以使用2种不同的表面纹理来渲染多个video,一旦第一个video到达最后,您可以淡出纹理并淡入淡出。 导致一个很好的无缝video效果。

由于一次播放多个video的性质,您最有可能要创build自己的计时器,以增加时间并决定何时切换到下一个video,而不是尝试使用ExoPlayer或Android Media中的callback。 这将允许您以更准确的方式跟踪时间,而无需与多个video编解码器保持通话。

我知道这不是你一直在寻找的答案,但这是唯一合理的答案。 确保播放没有间隙的唯一方法是首先下载整个文件,并在播放完成后开始播放。 否则,如果在文件完成下载之前丢失连接,暂停是不可避免的。

我只是尝试从标准的MediaPlayer实现切换到ExoPlayer,差距是相同的,如果不是更糟。 但是,我已经使用了一个非常简单的方法来重新启动播放器时,状态更改结束。 我不知道是否有更好的方法来做到这一点,也许有两个不同的ExoPlayers。