有没有人尝试使用 ExoPlayer 来实现这一点?我尝试在网上查找,但没有成功。
当我说无缝播放时,我指的是使用媒体播放器背靠背播放本地视频的问题。第一个视频播放完毕后,在第二个视频开始播放前会有 1 秒的明显延迟。
希望这个问题有助于进一步理解这个问题。作为参考,请查看以下问题:
有没有人尝试使用 ExoPlayer 来实现这一点?我尝试在网上查找,但没有成功。
当我说无缝播放时,我指的是使用媒体播放器背靠背播放本地视频的问题。第一个视频播放完毕后,在第二个视频开始播放前会有 1 秒的明显延迟。
希望这个问题有助于进一步理解这个问题。作为参考,请查看以下问题:
现在正式发布的ExoPlayer 2似乎支持使用ConcatenatingMediaSource
该类进行无缝播放。从它的开发者指南:
源之间的转换是无缝的。不要求被连接的源具有相同的格式(例如,可以将包含 480p H264 的视频文件与包含 720p VP9 的视频文件连接起来)。源甚至可能是不同的类型(例如,可以将视频与纯音频流连接起来)。
以及示例代码:
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 个不同的播放器实例来实现无缝播放,一旦您开始并播放了第一个,您可以加载第二个并在第一个完成后开始播放。使用这种方法,您可以有一个无缝的解决方案,只要您在播放第一个视频时准备第二个视频。
更进一步,您还可以使用 2 种不同的表面纹理来渲染多个视频,一旦第一个视频到达结尾,您可以淡出纹理并淡入新的纹理。产生了一个很好的无缝视频效果。
由于一次播放多个视频的性质,您很可能希望创建自己的计时器来增加时间并决定何时切换到下一个视频,而不是尝试使用来自 ExoPlayer 或 Android Media 的回调。这将使您能够以更准确的方式跟踪时间,而无需继续与多个视频编解码器通话。
我刚刚尝试从标准 MediaPlayer 实现切换到 ExoPlayer,如果不是更差的话,差距是相同的。但是,当状态变为结束时,我使用了一种非常简单的方法来重新启动播放器。我不知道是否有更好的正确方法,也许使用 2 个不同的 ExoPlayers。
我知道这不是您一直在寻找的答案,但这是唯一合理的答案。确保播放中没有间隙的唯一方法是首先下载整个文件并在完成后开始播放。否则,如果您在文件下载完成之前断开连接,暂停是不可避免的。