我正在使用Exoplayer在应用程序中播放视频,我想做的就是改变播放速度,为此Exoplayer提供了一个简单的解决方案:
val playbackParameters = PlaybackParameters(whateverSpeedFloat)
exoPlayer.setPlaybackParameters(playbackParameters)
现在这行得通,但是我的问题是效果不是立即产生的,当您更改速度时,更改实际速度需要几帧。我猜这是因为某些帧已预加载或缓冲,并且设置的播放参数仅在此之后影响帧。如果我停止播放视频,然后将速度从0.5倍更改为2倍,然后按播放,则很明显回放速度更改存在延迟。但是,如果我按Stop键,则将速度从0.5倍更改为2倍,并在视频中寻找另一个点,然后按播放,效果很好,没有延迟。我猜它会使用正确的播放参数重新加载/缓冲新帧。我试着做
exoPlayer.clearVideoDecoderOutputBufferRenderer()
更改速度后,尝试在设置播放参数后重新缓冲帧,但似乎没有任何改变。有想法该怎么解决这个吗?还是其他没有此问题的视频播放器库?
最佳答案
我认为您可以减少ExpPlayer
初始化期间配置设置内缓冲的时间。低于前在配置上,您可以抛出文档并检查可能的值。
/* Instantiate a DefaultLoadControl.Builder. */
DefaultLoadControl.Builder builder = new
DefaultLoadControl.Builder();
/* Maximum amount of media data to buffer (in milliseconds). */
final long loadControlMaxBufferMs = 60000;
/*Configure the DefaultLoadControl to use our setting for how many
Milliseconds of media data to buffer. */
builder.setBufferDurationsMs(
DefaultLoadcontrol.DEFAULT MIN BUFFER MS,
loadControlMaxBufferMs,
/* To reduce the startup time, also change the line below */
DefaultLoadControl.DEFAULT_BUFFER_FOR_PLAYBACK_MS,
DefaultLoadControl.DEFAULT_BUFFER_FOR_PLAYBACK_AFTER_REBUFFER_MS);
/* Build the actual DefaultLoadControl instance */
DefaultLoadControl loadControl = builder.createDefaultLoadControl();
/* Instantiate ExoPlayer with our configured DefaultLoadControl */
ExoPlayer player = ExoPlayerFactory.newSimpleInstance(
new DefaultRenderersFactory(this),
new DefaultTrackSelector(),
loadControl);
还有一篇有关更改缓冲时间选项的好文章。
关于android - Exoplayer Mediaplayer Android延迟应用PlaybackParameters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63754900/