From 2a2f1e2cab10d66c132c5a212579564a0bd8c7dc Mon Sep 17 00:00:00 2001 From: FongMi Date: Mon, 19 Aug 2024 20:08:56 +0800 Subject: [PATCH] Remove next --- app/build.gradle | 4 +- .../android/tv/ui/activity/CastActivity.java | 8 +-- .../android/tv/ui/activity/LiveActivity.java | 8 +-- .../android/tv/ui/activity/VideoActivity.java | 8 +-- .../fongmi/android/tv/event/ErrorEvent.java | 2 +- .../com/fongmi/android/tv/player/Players.java | 3 +- .../fongmi/android/tv/player/exo/ExoUtil.java | 6 +- .../tv/player/exo/NextRenderersFactory.java | 61 ------------------- .../android/tv/ui/activity/LiveActivity.java | 8 +-- .../android/tv/ui/activity/VideoActivity.java | 8 +-- 10 files changed, 29 insertions(+), 87 deletions(-) delete mode 100644 app/src/main/java/com/fongmi/android/tv/player/exo/NextRenderersFactory.java diff --git a/app/build.gradle b/app/build.gradle index 0e2ec7bbb..37243794f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -14,7 +14,7 @@ android { //noinspection ExpiredTargetSdkVersion targetSdk 28 versionCode 249 - versionName "2.4.9" + versionName "0819" javaCompileOptions { annotationProcessorOptions { arguments = ["room.schemaLocation": "$projectDir/schemas".toString()] @@ -98,7 +98,6 @@ dependencies { implementation 'androidx.media:media:1.7.0' implementation 'androidx.room:room-runtime:2.6.1' implementation 'cat.ereza:customactivityoncrash:2.4.0' - implementation('com.github.anilbeesetti.nextlib:nextlib-media3ext:0.8.2') { exclude group: 'androidx.media3', module: 'media3-exoplayer' } implementation 'com.github.bassaer:materialdesigncolors:1.0.0' implementation 'com.github.bumptech.glide:glide:4.16.0' implementation 'com.github.bumptech.glide:annotations:4.16.0' @@ -138,6 +137,7 @@ dependencies { implementation(ext: 'aar', name: 'lib-datasource-rtmp-release', group: 'fongmi', version: 'release') implementation(ext: 'aar', name: 'lib-decoder-release', group: 'fongmi', version: 'release') implementation(ext: 'aar', name: 'lib-decoder-av1-release', group: 'fongmi', version: 'release') + implementation(ext: 'aar', name: 'lib-decoder-ffmpeg-release', group: 'fongmi', version: 'release') implementation(ext: 'aar', name: 'lib-exoplayer-release', group: 'fongmi', version: 'release') implementation(ext: 'aar', name: 'lib-exoplayer-dash-release', group: 'fongmi', version: 'release') implementation(ext: 'aar', name: 'lib-exoplayer-hls-release', group: 'fongmi', version: 'release') diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/CastActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/CastActivity.java index 8adfd368e..fe5c02be6 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/CastActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/CastActivity.java @@ -195,7 +195,7 @@ public class CastActivity extends BaseActivity implements CustomKeyDownCast.List } private void onDecode() { - mPlayers.toggleDecode(mBinding.exo); + mPlayers.toggleDecode(); setDecode(); onReset(); } @@ -345,9 +345,9 @@ public class CastActivity extends BaseActivity implements CustomKeyDownCast.List } private void onCheck(ErrorEvent event) { - if (event.getCode() >= PlaybackException.ERROR_CODE_PARSING_CONTAINER_MALFORMED && event.getCode() <= PlaybackException.ERROR_CODE_PARSING_MANIFEST_UNSUPPORTED) mPlayers.setFormat(ExoUtil.getMimeType(event.getCode())); - else if (event.getCode() == PlaybackException.ERROR_CODE_DECODER_INIT_FAILED) mPlayers.init(mBinding.exo); - else mPlayers.toggleDecode(mBinding.exo); + if (event.getCode() == PlaybackException.ERROR_CODE_IO_UNSPECIFIED || event.getCode() >= PlaybackException.ERROR_CODE_PARSING_CONTAINER_MALFORMED && event.getCode() <= PlaybackException.ERROR_CODE_PARSING_MANIFEST_UNSUPPORTED) mPlayers.setFormat(ExoUtil.getMimeType(event.getCode())); + else if (event.getCode() == PlaybackException.ERROR_CODE_BEHIND_LIVE_WINDOW) mPlayers.seekTo(C.TIME_UNSET); + else mPlayers.toggleDecode(); mPlayers.setMediaItem(); setDecode(); } 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 bdc0bc421..01b292100 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 @@ -385,7 +385,7 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick } private void onDecode() { - mPlayers.toggleDecode(mBinding.exo); + mPlayers.toggleDecode(); setDecode(); fetch(); } @@ -747,9 +747,9 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick } private void onCheck(ErrorEvent event) { - if (event.getCode() >= PlaybackException.ERROR_CODE_PARSING_CONTAINER_MALFORMED && event.getCode() <= PlaybackException.ERROR_CODE_PARSING_MANIFEST_UNSUPPORTED) mPlayers.setFormat(ExoUtil.getMimeType(event.getCode())); - else if (event.getCode() == PlaybackException.ERROR_CODE_DECODER_INIT_FAILED) mPlayers.init(mBinding.exo); - else mPlayers.toggleDecode(mBinding.exo); + if (event.getCode() == PlaybackException.ERROR_CODE_IO_UNSPECIFIED || event.getCode() >= PlaybackException.ERROR_CODE_PARSING_CONTAINER_MALFORMED && event.getCode() <= PlaybackException.ERROR_CODE_PARSING_MANIFEST_UNSUPPORTED) mPlayers.setFormat(ExoUtil.getMimeType(event.getCode())); + else if (event.getCode() == PlaybackException.ERROR_CODE_BEHIND_LIVE_WINDOW) mPlayers.seekTo(C.TIME_UNSET); + else mPlayers.toggleDecode(); mPlayers.setMediaItem(); setDecode(); } diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java index 8d37b4556..3d7febc13 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java @@ -843,7 +843,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List } private void onDecode() { - mPlayers.toggleDecode(mBinding.exo); + mPlayers.toggleDecode(); setDecode(); onRefresh(); } @@ -1141,9 +1141,9 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List } private void onCheck(ErrorEvent event) { - if (event.getCode() >= PlaybackException.ERROR_CODE_PARSING_CONTAINER_MALFORMED && event.getCode() <= PlaybackException.ERROR_CODE_PARSING_MANIFEST_UNSUPPORTED) mPlayers.setFormat(ExoUtil.getMimeType(event.getCode())); - else if (event.getCode() == PlaybackException.ERROR_CODE_DECODER_INIT_FAILED) mPlayers.init(mBinding.exo); - else mPlayers.toggleDecode(mBinding.exo); + if (event.getCode() == PlaybackException.ERROR_CODE_IO_UNSPECIFIED || event.getCode() >= PlaybackException.ERROR_CODE_PARSING_CONTAINER_MALFORMED && event.getCode() <= PlaybackException.ERROR_CODE_PARSING_MANIFEST_UNSUPPORTED) mPlayers.setFormat(ExoUtil.getMimeType(event.getCode())); + else if (event.getCode() == PlaybackException.ERROR_CODE_BEHIND_LIVE_WINDOW) mPlayers.seekTo(C.TIME_UNSET); + else mPlayers.toggleDecode(); mPlayers.setMediaItem(); setDecode(); } diff --git a/app/src/main/java/com/fongmi/android/tv/event/ErrorEvent.java b/app/src/main/java/com/fongmi/android/tv/event/ErrorEvent.java index 54ef98c32..8fe193b5b 100644 --- a/app/src/main/java/com/fongmi/android/tv/event/ErrorEvent.java +++ b/app/src/main/java/com/fongmi/android/tv/event/ErrorEvent.java @@ -54,7 +54,7 @@ public class ErrorEvent { } public boolean isExo() { - return code / 1000 == 3 || code / 1000 == 4; + return code / 1000 == 2 || code / 1000 == 3 || code / 1000 == 4; } public String getMsg() { 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 8e000d87e..31797b7d0 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 @@ -277,9 +277,8 @@ public class Players implements Player.Listener, ParseCallback { return setSpeed(speed); } - public void toggleDecode(PlayerView exo) { + public void toggleDecode() { Setting.putDecode(decode = isHard() ? SOFT : HARD); - init(exo); } public String getPositionTime(long time) { diff --git a/app/src/main/java/com/fongmi/android/tv/player/exo/ExoUtil.java b/app/src/main/java/com/fongmi/android/tv/player/exo/ExoUtil.java index b6c115ccf..552f084e0 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/exo/ExoUtil.java +++ b/app/src/main/java/com/fongmi/android/tv/player/exo/ExoUtil.java @@ -1,5 +1,8 @@ package com.fongmi.android.tv.player.exo; +import static androidx.media3.exoplayer.DefaultRenderersFactory.EXTENSION_RENDERER_MODE_ON; +import static androidx.media3.exoplayer.DefaultRenderersFactory.EXTENSION_RENDERER_MODE_PREFER; + import android.content.Context; import android.graphics.Color; import android.net.Uri; @@ -14,6 +17,7 @@ import androidx.media3.common.TrackSelectionOverride; import androidx.media3.common.Tracks; import androidx.media3.common.util.Util; import androidx.media3.exoplayer.DefaultLoadControl; +import androidx.media3.exoplayer.DefaultRenderersFactory; import androidx.media3.exoplayer.ExoPlayer; import androidx.media3.exoplayer.LoadControl; import androidx.media3.exoplayer.RenderersFactory; @@ -52,7 +56,7 @@ public class ExoUtil { } public static RenderersFactory buildRenderersFactory(int decode) { - return new NextRenderersFactory(App.get(), decode); + return new DefaultRenderersFactory(App.get()).setEnableDecoderFallback(true).setExtensionRendererMode(Players.isHard(decode) ? EXTENSION_RENDERER_MODE_ON : EXTENSION_RENDERER_MODE_PREFER); } public static MediaSource.Factory buildMediaSourceFactory() { diff --git a/app/src/main/java/com/fongmi/android/tv/player/exo/NextRenderersFactory.java b/app/src/main/java/com/fongmi/android/tv/player/exo/NextRenderersFactory.java deleted file mode 100644 index cb9bfb796..000000000 --- a/app/src/main/java/com/fongmi/android/tv/player/exo/NextRenderersFactory.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.fongmi.android.tv.player.exo; - -import android.content.Context; -import android.os.Handler; - -import androidx.annotation.NonNull; -import androidx.media3.common.util.Log; -import androidx.media3.exoplayer.DefaultRenderersFactory; -import androidx.media3.exoplayer.Renderer; -import androidx.media3.exoplayer.audio.AudioRendererEventListener; -import androidx.media3.exoplayer.audio.AudioSink; -import androidx.media3.exoplayer.mediacodec.MediaCodecSelector; -import androidx.media3.exoplayer.video.VideoRendererEventListener; - -import com.fongmi.android.tv.player.Players; - -import java.util.ArrayList; - -import io.github.anilbeesetti.nextlib.media3ext.ffdecoder.FfmpegAudioRenderer; -import io.github.anilbeesetti.nextlib.media3ext.ffdecoder.FfmpegVideoRenderer; - -public class NextRenderersFactory extends DefaultRenderersFactory { - - private static final String TAG = NextRenderersFactory.class.getSimpleName(); - - public NextRenderersFactory(@NonNull Context context, int decode) { - super(context); - setEnableDecoderFallback(true); - setExtensionRendererMode(Players.isHard(decode) ? EXTENSION_RENDERER_MODE_ON : EXTENSION_RENDERER_MODE_PREFER); - } - - @Override - protected void buildAudioRenderers(@NonNull Context context, int extensionRendererMode, @NonNull MediaCodecSelector mediaCodecSelector, boolean enableDecoderFallback, @NonNull AudioSink audioSink, @NonNull Handler eventHandler, @NonNull AudioRendererEventListener eventListener, @NonNull ArrayList out) { - super.buildAudioRenderers(context, extensionRendererMode, mediaCodecSelector, enableDecoderFallback, audioSink, eventHandler, eventListener, out); - int extensionRendererIndex = out.size(); - if (extensionRendererMode == EXTENSION_RENDERER_MODE_PREFER) { - extensionRendererIndex--; - } - try { - Renderer renderer = new FfmpegAudioRenderer(eventHandler, eventListener, audioSink); - out.add(extensionRendererIndex++, renderer); - Log.i(TAG, "Loaded FfmpegAudioRenderer."); - } catch (Exception e) { - throw new RuntimeException("Error instantiating Ffmpeg extension", e); - } - } - - @Override - protected void buildVideoRenderers(@NonNull Context context, int extensionRendererMode, @NonNull MediaCodecSelector mediaCodecSelector, boolean enableDecoderFallback, @NonNull Handler eventHandler, @NonNull VideoRendererEventListener eventListener, long allowedVideoJoiningTimeMs, @NonNull ArrayList out) { - super.buildVideoRenderers(context, extensionRendererMode, mediaCodecSelector, enableDecoderFallback, eventHandler, eventListener, allowedVideoJoiningTimeMs, out); - if (extensionRendererMode == EXTENSION_RENDERER_MODE_ON) return; - int extensionRendererIndex = out.size(); - try { - Renderer renderer = new FfmpegVideoRenderer(allowedVideoJoiningTimeMs, eventHandler, eventListener, MAX_DROPPED_VIDEO_FRAME_COUNT_TO_NOTIFY); - out.add(extensionRendererIndex++, renderer); - Log.i(TAG, "Loaded FfmpegVideoRenderer."); - } catch (Exception e) { - throw new RuntimeException("Error instantiating Ffmpeg extension", e); - } - } -} \ No newline at end of file diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java index ecb8b2c7d..88b11f670 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java @@ -416,7 +416,7 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List } private void onDecode() { - mPlayers.toggleDecode(mBinding.exo); + mPlayers.toggleDecode(); setR1Callback(); setDecode(); fetch(); @@ -806,9 +806,9 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List } private void onCheck(ErrorEvent event) { - if (event.getCode() >= PlaybackException.ERROR_CODE_PARSING_CONTAINER_MALFORMED && event.getCode() <= PlaybackException.ERROR_CODE_PARSING_MANIFEST_UNSUPPORTED) mPlayers.setFormat(ExoUtil.getMimeType(event.getCode())); - else if (event.getCode() == PlaybackException.ERROR_CODE_DECODER_INIT_FAILED) mPlayers.init(mBinding.exo); - else mPlayers.toggleDecode(mBinding.exo); + if (event.getCode() == PlaybackException.ERROR_CODE_IO_UNSPECIFIED || event.getCode() >= PlaybackException.ERROR_CODE_PARSING_CONTAINER_MALFORMED && event.getCode() <= PlaybackException.ERROR_CODE_PARSING_MANIFEST_UNSUPPORTED) mPlayers.setFormat(ExoUtil.getMimeType(event.getCode())); + else if (event.getCode() == PlaybackException.ERROR_CODE_BEHIND_LIVE_WINDOW) mPlayers.seekTo(C.TIME_UNSET); + else mPlayers.toggleDecode(); mPlayers.setMediaItem(); setDecode(); } diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java index d02dc01eb..388409942 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java @@ -773,7 +773,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo } private void onDecode() { - mPlayers.toggleDecode(mBinding.exo); + mPlayers.toggleDecode(); setR1Callback(); setDecode(); onRefresh(); @@ -1161,9 +1161,9 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo } private void onCheck(ErrorEvent event) { - if (event.getCode() >= PlaybackException.ERROR_CODE_PARSING_CONTAINER_MALFORMED && event.getCode() <= PlaybackException.ERROR_CODE_PARSING_MANIFEST_UNSUPPORTED) mPlayers.setFormat(ExoUtil.getMimeType(event.getCode())); - else if (event.getCode() == PlaybackException.ERROR_CODE_DECODER_INIT_FAILED) mPlayers.init(mBinding.exo); - else mPlayers.toggleDecode(mBinding.exo); + if (event.getCode() == PlaybackException.ERROR_CODE_IO_UNSPECIFIED || event.getCode() >= PlaybackException.ERROR_CODE_PARSING_CONTAINER_MALFORMED && event.getCode() <= PlaybackException.ERROR_CODE_PARSING_MANIFEST_UNSUPPORTED) mPlayers.setFormat(ExoUtil.getMimeType(event.getCode())); + else if (event.getCode() == PlaybackException.ERROR_CODE_BEHIND_LIVE_WINDOW) mPlayers.seekTo(C.TIME_UNSET); + else mPlayers.toggleDecode(); mPlayers.setMediaItem(); setDecode(); }