diff --git a/MXVideoLib/src/main/java/com/mx/video/MXVideoStd.kt b/MXVideoLib/src/main/java/com/mx/video/MXVideoStd.kt index 6ef5d5049ae7b81b66f1fc1d82d67274f0ca627d..f94b61eabef2be58c7120bf59a47e749b54142b1 100644 --- a/MXVideoLib/src/main/java/com/mx/video/MXVideoStd.kt +++ b/MXVideoLib/src/main/java/com/mx/video/MXVideoStd.kt @@ -60,13 +60,6 @@ open class MXVideoStd @JvmOverloads constructor( override fun onPlayTicket(position: Int, duration: Int) { onPlayTicketListener?.invoke(position, duration) - - val config = getConfig() - if (config.forceCompleteWhenBeyondDuration.get() - && (duration > 0) && (position >= duration) - ) { - getPlayer()?.forcedComplete() - } } override fun onBuffering(inBuffer: Boolean) { diff --git a/MXVideoLib/src/main/java/com/mx/video/views/MXViewProvider.kt b/MXVideoLib/src/main/java/com/mx/video/views/MXViewProvider.kt index 9f6bdc8abdb4001ac47586fa2db3356a4296465c..d2482ca66d55e694d20d0790e3d7543e6c3ede25 100644 --- a/MXVideoLib/src/main/java/com/mx/video/views/MXViewProvider.kt +++ b/MXVideoLib/src/main/java/com/mx/video/views/MXViewProvider.kt @@ -23,6 +23,7 @@ import com.mx.video.utils.MXObservable import com.mx.video.utils.MXTicket import com.mx.video.utils.MXUtils import com.mx.video.utils.touch.MXTouchHelp +import kotlin.math.abs import kotlin.math.min import kotlin.math.roundToInt @@ -42,6 +43,7 @@ internal class MXViewProvider(val viewSet: MXViewSet, val mxVideo: IMXVideo, val private val delayDismiss = MXDismissDelay() private val speedHelp = MXNetSpeedHelp() + fun initView() { // 全屏切换时,显示设置 config.screen.addObserver(object : IMXObserver { @@ -337,6 +339,7 @@ internal class MXViewProvider(val viewSet: MXViewSet, val mxVideo: IMXVideo, val if (oldD != curD || oldP != curP) { position.updateValue(MXPair(curP, curD)) } + processBeyondProgress(curP, curD) } }) @@ -391,12 +394,32 @@ internal class MXViewProvider(val viewSet: MXViewSet, val mxVideo: IMXVideo, val // 全屏返回按钮响应 viewSet.mxReturnBtn.setOnClickListener { - if (config.screen.get() == MXScreen.FULL) { - mxVideo.switchToScreen(MXScreen.NORMAL) + if (config.screen.get() != MXScreen.FULL) { + return@setOnClickListener } + mxVideo.switchToScreen(MXScreen.NORMAL) } } + /** + * 兼容部分手机超出进度时不回调complete + */ + private var beyondDurationStart = 0L + private fun processBeyondProgress(position: Int, duration: Int) { + if (config.source.get()?.isLiveSource == true) return + if (!config.forceCompleteWhenBeyondDuration.get()) return + if (duration <= 0) { + beyondDurationStart = -1L + return + } + if (position < duration) return + if (beyondDurationStart <= 0L) { + beyondDurationStart = System.currentTimeMillis() + } else if (abs(System.currentTimeMillis() - beyondDurationStart) > 2000) { + beyondDurationStart = -1L + mxVideo.getPlayer()?.forcedComplete() + } + } /** * 状态处理 diff --git a/app/src/main/java/com/mx/mxvideo_demo/apps/NormalActivity.kt b/app/src/main/java/com/mx/mxvideo_demo/apps/NormalActivity.kt index e4bd9170f861bf014f1140abbef888cffd7d9d6a..890424d0b615dfc7e7544f3352500e6c43516bc2 100644 --- a/app/src/main/java/com/mx/mxvideo_demo/apps/NormalActivity.kt +++ b/app/src/main/java/com/mx/mxvideo_demo/apps/NormalActivity.kt @@ -291,6 +291,11 @@ class NormalActivity : AppCompatActivity() { binding.mxVideoStd.getConfig().replayLiveSourceWhenError.set(checkedId == R.id.liveRetryTrue) } binding.liveRetryFalse.performClick() + + binding.forceCompleteRG.setOnCheckedChangeListener { group, checkedId -> + binding.mxVideoStd.getConfig().forceCompleteWhenBeyondDuration.set(checkedId == R.id.forceCompleteTrue) + } + binding.forceCompleteFalse.performClick() } private fun stringForTime(time: Int): String { diff --git a/app/src/main/res/layout/activity_normal.xml b/app/src/main/res/layout/activity_normal.xml index ee91b01aaaa9950baa54206d5cd16cc07948c573..ff16bd41b4f1732bc1a986943e38fa9aab510658 100644 --- a/app/src/main/res/layout/activity_normal.xml +++ b/app/src/main/res/layout/activity_normal.xml @@ -787,6 +787,36 @@ android:layout_height="wrap_content" android:text="不支持" /> + + + + + + + + + + \ No newline at end of file