From 711a33f158a2dd76bbcd7cce275fa0a21a35624b Mon Sep 17 00:00:00 2001 From: FongMi Date: Tue, 22 Nov 2022 23:29:43 +0800 Subject: [PATCH] Fix crash --- app/proguard-rules.pro | 5 +++ .../android/tv/ui/activity/LiveActivity.java | 2 +- .../com/fongmi/android/tv/player/Players.java | 31 ++++++++-------- .../android/tv/ui/custom/CustomSeekView.java | 35 ++++++++----------- 4 files changed, 35 insertions(+), 38 deletions(-) diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index a54d0a71f..ee4f9965c 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -31,3 +31,8 @@ # Pyramid -keep class com.undcover.freedom.pyramid.** { *; } + +# IJK +-keep class tv.danmaku.ijk.media.player.** { *; } +-keep class tv.danmaku.ijk.media.player.IjkMediaPlayer { *; } +-keep class tv.danmaku.ijk.media.player.ffmpeg.FFmpegApi { *; } diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java index 354e4c95e..0f95c173a 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java @@ -278,9 +278,9 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick CharSequence[] array = ResUtil.getStringArray(R.array.select_player); Prefers.putPlayer(index = index == array.length - 1 ? 0 : ++index); mBinding.control.player.setText(array[index]); + App.post(this::getUrl,250); setVideoVisible(); mPlayers.toggle(); - getUrl(); } private void hideUI() { diff --git a/app/src/main/java/com/fongmi/android/tv/player/Players.java b/app/src/main/java/com/fongmi/android/tv/player/Players.java index 8b2a34849..7c9eb79a7 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/Players.java +++ b/app/src/main/java/com/fongmi/android/tv/player/Players.java @@ -171,8 +171,8 @@ public class Players implements Player.Listener, IMediaPlayer.OnInfoListener, IM } public void pause() { - if (isExo()) exoPlayer.pause(); - else if (isIjk()) ijkPlayer.pause(); + if (isExo()) pauseExo(); + else if (isIjk()) pauseIjk(); } public void stop() { @@ -182,14 +182,14 @@ public class Players implements Player.Listener, IMediaPlayer.OnInfoListener, IM } public void toggle() { - if (isIjk()) stopExo(); if (isExo()) stopIjk(); + else if (isIjk()) stopExo(); } public void release() { stopParse(); - if (isExo()) relExo(); - else if (isIjk()) relIjk(); + if (isExo()) releaseExo(); + else if (isIjk()) releaseIjk(); } public void start(Channel channel) { @@ -207,6 +207,14 @@ public class Players implements Player.Listener, IMediaPlayer.OnInfoListener, IM } } + private void pauseExo() { + exoPlayer.pause(); + } + + private void pauseIjk() { + ijkPlayer.pause(); + } + private void stopExo() { exoPlayer.stop(); exoPlayer.clearMediaItems(); @@ -216,14 +224,14 @@ public class Players implements Player.Listener, IMediaPlayer.OnInfoListener, IM ijkPlayer.stopPlayback(); } - private void relExo() { + private void releaseExo() { stopExo(); exoPlayer.removeListener(this); exoPlayer.release(); exoPlayer = null; } - private void relIjk() { + private void releaseIjk() { stopIjk(); ijkPlayer.release(true); ijkPlayer = null; @@ -258,15 +266,6 @@ public class Players implements Player.Listener, IMediaPlayer.OnInfoListener, IM PlayerEvent.error(R.string.error_play_parse); } - @Override - public void onEvents(@NonNull Player player, @NonNull Player.Events events) { - if (events.containsAny(EVENT_PLAYBACK_STATE_CHANGED, EVENT_PLAY_WHEN_READY_CHANGED, EVENT_IS_PLAYING_CHANGED)) { - //updateProgress(); - } else if (events.containsAny(EVENT_POSITION_DISCONTINUITY, EVENT_TIMELINE_CHANGED)) { - //updateTimeline(); - } - } - @Override public void onPlayerError(@NonNull PlaybackException error) { this.errorCode = error.errorCode; diff --git a/app/src/main/java/com/fongmi/android/tv/ui/custom/CustomSeekView.java b/app/src/main/java/com/fongmi/android/tv/ui/custom/CustomSeekView.java index 6394e9c3b..48c8622a9 100644 --- a/app/src/main/java/com/fongmi/android/tv/ui/custom/CustomSeekView.java +++ b/app/src/main/java/com/fongmi/android/tv/ui/custom/CustomSeekView.java @@ -84,33 +84,30 @@ public class CustomSeekView extends FrameLayout implements TimeBar.OnScrubListen boolean durationChanged = duration != currentDuration; currentDuration = duration; currentPosition = position; - if (durationView != null && durationChanged) { - durationView.setText(listener.stringToTime(duration)); - } - if (timeBar != null && durationChanged) { + if (durationChanged) { timeBar.setDuration(duration); + durationView.setText(listener.stringToTime(duration)); } - if (positionView != null && !scrubbing && positionChanged) { - positionView.setText(listener.stringToTime(position)); - } - if (timeBar != null) { + if (positionChanged && !scrubbing) { timeBar.setPosition(position); timeBar.setBufferedPosition(buffered); + positionView.setText(listener.stringToTime(position)); } removeCallbacks(runnable); if (listener.isPlaying()) { - long mediaTimeDelayMs = timeBar != null ? timeBar.getPreferredUpdateDelay() : MAX_UPDATE_INTERVAL_MS; - long mediaTimeUntilNextFullSecondMs = 1000 - position % 1000; - mediaTimeDelayMs = Math.min(mediaTimeDelayMs, mediaTimeUntilNextFullSecondMs); - float playbackSpeed = listener.getSpeed(); - long delayMs = playbackSpeed > 0 ? (long) (mediaTimeDelayMs / playbackSpeed) : MAX_UPDATE_INTERVAL_MS; - delayMs = Util.constrainValue(delayMs, MIN_UPDATE_INTERVAL_MS, MAX_UPDATE_INTERVAL_MS); - postDelayed(runnable, delayMs); + postDelayed(runnable, delayMs(position)); } else { postDelayed(runnable, MAX_UPDATE_INTERVAL_MS); } } + private long delayMs(long position) { + long mediaTimeUntilNextFullSecondMs = 1000 - position % 1000; + long mediaTimeDelayMs = Math.min(timeBar.getPreferredUpdateDelay(), mediaTimeUntilNextFullSecondMs); + long delayMs = (long) (mediaTimeDelayMs / listener.getSpeed()); + return Util.constrainValue(delayMs, MIN_UPDATE_INTERVAL_MS, MAX_UPDATE_INTERVAL_MS); + } + @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); @@ -120,16 +117,12 @@ public class CustomSeekView extends FrameLayout implements TimeBar.OnScrubListen @Override public void onScrubStart(@NonNull TimeBar timeBar, long position) { scrubbing = true; - if (positionView != null) { - positionView.setText(listener.stringToTime(position)); - } + positionView.setText(listener.stringToTime(position)); } @Override public void onScrubMove(@NonNull TimeBar timeBar, long position) { - if (positionView != null) { - positionView.setText(listener.stringToTime(position)); - } + positionView.setText(listener.stringToTime(position)); } @Override