Android ExoPlayer:它是否解决了 Android 媒体播放器损坏的无缝/无缝播放问题
Android ExoPlayer : Does it solve gapless / seamless playback issue that is broken for the Android Media Player
有没有人试过用ExoPlayer来实现这个?
我尝试在网上查找但没有成功。
当我说无缝播放时,我指的是使用媒体播放器连续播放本地视频的问题。第一个视频播放完毕后,第二个视频开始前有 1 秒的明显延迟。
希望这个问题有助于进一步理解这个问题。
作为参考,请查看以下问题:
Android: MediaPlayer gapless or seamless Video Playing
我知道这不是您一直在寻找的答案,但这是唯一合理的答案。确保播放无间断的唯一方法是先下载整个文件并在完成后开始播放。否则,如果您在文件下载完成之前失去连接,暂停是不可避免的。
我刚刚尝试从标准 MediaPlayer 实现切换到 ExoPlayer,差距是一样的,如果不是更糟的话。但是,当状态更改为结束时,我使用了一种非常简单的方法来重新启动播放器。我不知道是否有更好的正确方法来做到这一点,也许有 2 个不同的 ExoPlayer。
编辑: ExoPlayer 2 支持无缝播放,但截至撰写本文时仍未作为稳定版本发布。
您很可能永远无法使用 ExoPlayer 或 Android 媒体播放器实现多首曲目的完美无缝播放。两者都没有被编写来支持启动多个轨道,我想它会超出它们的范围。
您可以通过使用 2 个不同的播放器实例实现无缝播放,一旦您开始播放第一个,您可以加载第二个并在第一个完成后开始播放。使用此方法,您可以获得无缝解决方案,只要您在播放第一个视频时准备第二个视频即可。
更进一步,您还可以使用 2 种不同的表面纹理来渲染多个视频,一旦第一个视频到达结尾,您就可以淡出纹理并淡入新的纹理。产生漂亮的无缝视频效果。
由于一次播放多个视频的性质,您很可能希望创建自己的计时器来增加时间并决定何时切换到下一个视频,而不是尝试使用 ExoPlayer 或 Android媒体。这将使您能够以更准确的方式跟踪时间,而无需与多个视频编解码器保持通信。
ExoPlayer 2, which is now officially released, seems to support gapless playback using the ConcatenatingMediaSource
class. From its developer guide:
Transitions between sources are seamless. There is no requirement that the sources being concatenated are of the same format (e.g. it’s fine to concatenate a video file containing 480p H264 with one that contains 720p VP9). The sources may even be of different types (e.g. it’s fine to concatenate a video with an audio only stream).
以及示例代码:
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来实现这个? 我尝试在网上查找但没有成功。
当我说无缝播放时,我指的是使用媒体播放器连续播放本地视频的问题。第一个视频播放完毕后,第二个视频开始前有 1 秒的明显延迟。
希望这个问题有助于进一步理解这个问题。 作为参考,请查看以下问题:
Android: MediaPlayer gapless or seamless Video Playing
我知道这不是您一直在寻找的答案,但这是唯一合理的答案。确保播放无间断的唯一方法是先下载整个文件并在完成后开始播放。否则,如果您在文件下载完成之前失去连接,暂停是不可避免的。
我刚刚尝试从标准 MediaPlayer 实现切换到 ExoPlayer,差距是一样的,如果不是更糟的话。但是,当状态更改为结束时,我使用了一种非常简单的方法来重新启动播放器。我不知道是否有更好的正确方法来做到这一点,也许有 2 个不同的 ExoPlayer。
编辑: ExoPlayer 2 支持无缝播放,但截至撰写本文时仍未作为稳定版本发布。
您很可能永远无法使用 ExoPlayer 或 Android 媒体播放器实现多首曲目的完美无缝播放。两者都没有被编写来支持启动多个轨道,我想它会超出它们的范围。
您可以通过使用 2 个不同的播放器实例实现无缝播放,一旦您开始播放第一个,您可以加载第二个并在第一个完成后开始播放。使用此方法,您可以获得无缝解决方案,只要您在播放第一个视频时准备第二个视频即可。
更进一步,您还可以使用 2 种不同的表面纹理来渲染多个视频,一旦第一个视频到达结尾,您就可以淡出纹理并淡入新的纹理。产生漂亮的无缝视频效果。
由于一次播放多个视频的性质,您很可能希望创建自己的计时器来增加时间并决定何时切换到下一个视频,而不是尝试使用 ExoPlayer 或 Android媒体。这将使您能够以更准确的方式跟踪时间,而无需与多个视频编解码器保持通信。
ExoPlayer 2, which is now officially released, seems to support gapless playback using the ConcatenatingMediaSource
class. From its developer guide:
Transitions between sources are seamless. There is no requirement that the sources being concatenated are of the same format (e.g. it’s fine to concatenate a video file containing 480p H264 with one that contains 720p VP9). The sources may even be of different types (e.g. it’s fine to concatenate a video with an audio only stream).
以及示例代码:
MediaSource firstSource = new ExtractorMediaSource(firstVideoUri, ...);
MediaSource secondSource = new ExtractorMediaSource(secondVideoUri, ...);
// Plays the first video, then the second video.
ConcatenatingMediaSource concatenatedSource =
new ConcatenatingMediaSource(firstSource, secondSource);