AkDanmaku icon indicating copy to clipboard operation
AkDanmaku copied to clipboard

seekTo方法会导致开始播放弹幕

Open SkyD666 opened this issue 2 years ago • 3 comments

fun seekTo(positionMs: Long)方法会导致开始播放弹幕,无论此时是否暂停。 例如在例子程序中,开始播放,然后暂停,然后滑动进度条,此时左下角在暂停状态,但是弹幕开始播放了

SkyD666 avatar Nov 13 '21 16:11 SkyD666

根据我们的实践,一般推荐将播放器的状态同步给弹幕 Player,即当播放器播放时播放,播放器暂停时暂停。

xanahopper avatar Nov 20 '21 13:11 xanahopper

但是弹幕Player暂停后(也就是调用了pause后),再调用seekTo会导致弹幕Player开始播放。我感觉一般来说seekTo后应该保持之前的原状(之前是播放,之后也是播放;之前是暂停,之后也是暂停)

SkyD666 avatar Nov 20 '21 13:11 SkyD666

我发现个解决方案 首先,为DanmakuTimer类增加fun seekTo(positionMs: Long)方法,专门用来seek,并将DanmakuEngine类的seekTo方法内调用timer.start(positionMs)改为调用timer.seekTo(positionMs);

=======若不加下面的部分,则在暂停时,seek一下,新位置的弹幕不会立即显示出来,需要播放后才能显示;若加了下面的部分,则seek后新位置的弹幕会立即显示=======

然后为DanmakuTimer类增加一个Boolean类型的waitToSeek变量,用来标识是否有seek动作; 然后再LayoutSystem类的update方法内,将最后一个if (isPaused) {......判断改为如下所示(这个就是让seekTo后不管是否isPaused,都刷新一次弹幕位置,以便弹幕能够立即显示出来) if (isPaused && !timer.waitToSeek) { if (needSync) { cacheManager.requestBuildSign() } else { config.updateRender() layoutGeneration = config.layoutGeneration } } else if (timer.waitToSeek) { timer.waitToSeek = false }

如果方案可以,我去提个pr?

SkyD666 avatar Dec 05 '21 08:12 SkyD666