-
Notifications
You must be signed in to change notification settings - Fork 2.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
增加弹幕倍速功能 #414
base: master
Are you sure you want to change the base?
增加弹幕倍速功能 #414
Conversation
您好 请问 测试过这种条件吗 前一屏幕的弹幕全部展示完之后,等待2秒后, 后一屏幕的出来。 |
emmm我没听懂 |
原来用这样类似的方式改过一次,然后其他情况都行,只有这样一种情况有问题,查了一下原因,源码里有段判断当前展示的情况,完全没有,就会释放。之后就会出现问题,在这样一个场景中, 视频的播放的一个过程中,中间有一段时间完全没有弹幕,然后后面再出来的弹幕,就会一直重复的播放。 |
那看来倍速这个只能等官方做了。。 |
都没人维护了吧,官方怎么会有人做 |
遇到同样的问题,想改变timer的速度但比较麻烦,后来想了一个办法绕了过去。 |
简单做了个修改,可以试下, mSpeed是倍速率,思路是根据倍速率改变timer的变化时间,并记录增量,在弹幕未显示时做同步。
|
我也想到了,看到你的答案我更确信方案可行。 |
三生有幸,见到luern0313 |
怎么都是说了但没有完全说啊! |
不更改现有接口和外部调用的情况下修改timer源码来支持弹幕动态倍速。
currMillisecond用来确定弹幕的时间,如在外部updateTimer回调中手动更改currMillisecond来更改弹幕时间,即把currMillisecond加上lastInterval乘以视频速度-1的差(因为在回调之前已经加上了一个lastInterval了),并不能实现弹幕倍速,因为会出现一个问题:下次回调时,由于lastInterval是根据新的currMillisecond减去之前的currMillisecond得出的,但之前的currMillisecond是经过修改的,故lastInterval并不是真实的现实间隔时间,currMillisecond向前或向后修改,之后的lastInterval就会相应的增加或减少,导致弹幕的速度会慢慢的趋近于正常速度。
我构想的解决方法是,lastInterval并不由currMillisecond计算得出,而是由类内获取系统时间,算出现实时间的间隔,并且currMillisecond由这个间隔和视频倍速算出弹幕正确的时间。
这样,传入的curr参数就只剩一个作用:判断视频是否进行了跳转。当curr的间隔和类内获取当前时间的间隔差值超过一定值时,就可以认为视频进行了跳转,弹幕也需要跳转到新的时间。在弹幕开始播放时,我储存了第一个curr的数值,由新的curr减去第一个curr,就能得出视频当前时间,直接让currMillisecond等于这个值就行。
如何设置弹幕倍速可以参考以下方式: