DanmakuFlameMaster icon indicating copy to clipboard operation
DanmakuFlameMaster copied to clipboard

Android10,发送一条弹幕,播放完后,会重复从中间在出现一次,重复播放多次

Open fenyh opened this issue 4 years ago • 18 comments

在android10上,发送一条弹幕,会重复多次播放,第一次播放完成后,从中间又跑一次,然后从4分支1出又出现一次。如此出现多次。

fenyh avatar Feb 19 '20 08:02 fenyh

三星S20上出现同样问题

liubin023 avatar Mar 30 '20 08:03 liubin023

原因找到了,是因为S20上开启了120hz刷新率,而弹幕刷新率是60hz,将S20刷新率降到60hz就没问题了,要自己适配120hz才行

kjsolo avatar May 14 '20 09:05 kjsolo

我也遇到了同样的问题,在一加手机上,90hz帧率, @kjsolo 想问下应该怎么适配120hz呢?😣

Liar1995 avatar May 16 '20 10:05 Liar1995

同问,是怎么兼容大于60hz频率的呢?@kjsolo

dzr1990 avatar Jun 02 '20 13:06 dzr1990

以上有解决方案吗?说说思路!

eekidu avatar Jul 03 '20 08:07 eekidu

override fun onCreate(savedInstanceState: Bundle?) {

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        // 获取系统window支持的模式
        val modes = window.windowManager.defaultDisplay.supportedModes
        // 对获取的模式,基于刷新率的大小进行排序,从小到大排序
        modes.sortBy {
            it.refreshRate
        }

        window.let {
            val lp = it.attributes
            // 取出最小的那一个刷新率,直接设置给window
            lp.preferredDisplayModeId = modes.first().modeId
            it.attributes = lp
        }
    }
    super.onCreate(savedInstanceState)

}

qflbai avatar Aug 04 '20 01:08 qflbai

我是在activity里面取了最小帧率来做的适配

qflbai avatar Aug 04 '20 01:08 qflbai

在DrawHandler里的initRenderingConfigs()中根据当前的刷新率设置mFrameUpdateRate的值,比如120Hz应为8

yzhiwu avatar Sep 27 '20 11:09 yzhiwu

我是在activity里面取了最小帧率来做的适配

我这里使用你这种方式,不得行啊

AlexZQS avatar Oct 14 '20 05:10 AlexZQS

在DrawHandler里的initRenderingConfigs()中根据当前的刷新率设置mFrameUpdateRate的值,比如120Hz应为8

大佬这里怎么去解决的

AlexZQS avatar Oct 20 '20 07:10 AlexZQS

希望有人能解决

skqszy123 avatar Oct 24 '20 11:10 skqszy123

在DanmakuContext 中添加
private int mUpdateRate = 16; public int getFrameUpdateRate(){ return mUpdateRate; }

public void setFrameUpateRate(int rate){
    mUpdateRate = rate;
}

DrawHandler中修改 private void initRenderingConfigs() { long averageFrameConsumingTime = 16; mCordonTime = Math.max(33, (long) (averageFrameConsumingTime * 2.5f)); mCordonTime2 = (long) (mCordonTime * 2.5f); mFrameUpdateRate = getConfig().getFrameUpdateRate(); mThresholdTime = mFrameUpdateRate + 3; } 实例化DanmakuContext 时赋值 Display display = getWindowManager().getDefaultDisplay(); float refreshRate = display.getRefreshRate(); int rate = (int) (1000 / refreshRate); mDanmakuContext.setFrameUpateRate(rate);

以上亲测有效

Axing-1995 avatar Oct 26 '20 04:10 Axing-1995

在DanmakuContext 中添加 private int mUpdateRate = 16; public int getFrameUpdateRate(){ return mUpdateRate; }

public void setFrameUpateRate(int rate){
    mUpdateRate = rate;
}

DrawHandler中修改 private void initRenderingConfigs() { long averageFrameConsumingTime = 16; mCordonTime = Math.max(33, (long) (averageFrameConsumingTime * 2.5f)); mCordonTime2 = (long) (mCordonTime * 2.5f); mFrameUpdateRate = getConfig().getFrameUpdateRate(); mThresholdTime = mFrameUpdateRate + 3; } 实例化DanmakuContext 时赋值 Display display = getWindowManager().getDefaultDisplay(); float refreshRate = display.getRefreshRate(); int rate = (int) (1000 / refreshRate); mDanmakuContext.setFrameUpateRate(rate);

以上亲测有效

老哥V5~!

xhdongy avatar Jan 26 '21 12:01 xhdongy

谢谢,解决我的疑惑,方案不错,可以直接用

wkz0917 avatar May 15 '21 06:05 wkz0917

谢谢,解决我的疑惑,方案不错,可以直接用

你是引入整个module来修改的吗?

Florian-31 avatar May 19 '21 09:05 Florian-31

同样的问题,怎样在不改源码情况下修复这个问题呢

yigepang avatar Jul 01 '22 08:07 yigepang

override fun onCreate(savedInstanceState: Bundle?) {

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        // 获取系统window支持的模式
        val modes = window.windowManager.defaultDisplay.supportedModes
        // 对获取的模式,基于刷新率的大小进行排序,从小到大排序
        modes.sortBy {
            it.refreshRate
        }

        window.let {
            val lp = it.attributes
            // 取出最小的那一个刷新率,直接设置给window
            lp.preferredDisplayModeId = modes.first().modeId
            it.attributes = lp
        }
    }
    super.onCreate(savedInstanceState)

}

华为mate50Pro 鸿蒙系统4.0.0 还是会有问题,直接手机切换刷新率到60Hz 是没问题了, 这个设置还是有些瑕疵

OhMyGod111 avatar Feb 20 '24 03:02 OhMyGod111

同样的问题,怎样在不改源码情况下修复这个问题呢

可以通过反射去修改

OhMyGod111 avatar Feb 20 '24 07:02 OhMyGod111