如何解决Exoplayer Mediaplayer Android延迟应用PlaybackParameters
我正在使用Exoplayer在应用程序中播放视频,我想做的就是改变播放速度,为此Exoplayer提供了一个简单的解决方案:
val playbackParameters = PlaybackParameters(whateverSpeedFloat)
exoPlayer.setPlaybackParameters(playbackParameters)
现在这行得通,但是我的问题是效果不是立即产生的,当您更改速度时,更改实际速度需要几帧。我想这是因为某些帧已预加载或缓冲,并且设置的播放参数仅会影响此后的帧。
如果我停止视频,然后将速度从0.5倍更改为2倍,然后按播放,则很明显回放速度的更改存在延迟。但是,如果我按停止,将速度从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);
还有一篇有关更改缓冲时间选项的好文章。
,更新:
我仍然没有找到解决方案,我把这个问题带到了ExoPlayer,并提出了一个问题并“解决了”(https://github.com/google/ExoPlayer/issues/7982),但是我仍然遇到同样的问题,所以我会在atm回到他们那里等一下。
但是,提到的是延迟是一个已知问题,并且目前没有解决方案,
正确。我们之前曾研究过解决延迟的方法,但找不到一种干净/通用/易于实现的方法(在调音台之前没有API可用于处理音频,因此我们必须在混音器的上游进行处理。音轨缓冲区,它会引入延迟)。
相反,他们建议使用将AudioTrackPlaybackParams设置为true的DefaultRenderersFactory初始化Exoplayer:
val defaultRenderersFactory =
DefaultRenderersFactory(this).setEnableAudioTrackPlaybackParams(true)
exoPlayer = SimpleExoPlayer.Builder(this,defaultRenderersFactory).build()
事实上,这确实消除了延迟(不是100%,但我想说80%左右就足够了),但是随后,视频速度变得笨拙,并在每次暂停时开始冻结并改变速度/播放或搜寻到其他位置。
我也尝试过修改@GensaGames建议的缓冲配置,但是即使我测试了一段时间的不同配置,也没有看到任何行为上的变化,因此放弃了解决方案,转而使用exoPlayer存储库。
当我终于有一个可以正常工作的视频变速箱时,我将更新这个问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。