diff --git a/app/src/main/java/com/fongmi/android/tv/api/config/WallConfig.java b/app/src/main/java/com/fongmi/android/tv/api/config/WallConfig.java index 3e3a53fcb..b85c62775 100644 --- a/app/src/main/java/com/fongmi/android/tv/api/config/WallConfig.java +++ b/app/src/main/java/com/fongmi/android/tv/api/config/WallConfig.java @@ -1,11 +1,7 @@ package com.fongmi.android.tv.api.config; -import android.net.Uri; import android.text.TextUtils; -import androidx.media3.common.MediaItem; -import androidx.media3.exoplayer.ExoPlayer; - import com.fongmi.android.tv.App; import com.fongmi.android.tv.R; import com.fongmi.android.tv.Setting; @@ -18,14 +14,12 @@ import com.fongmi.android.tv.utils.UrlUtil; import com.github.catvod.net.OkHttp; import com.github.catvod.utils.Path; -import java.io.File; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class WallConfig { private Config config; - private ExoPlayer player; private ExecutorService executor; private boolean sync; @@ -51,7 +45,6 @@ public class WallConfig { } public WallConfig init() { - createPlayer(); return config(Config.wall()); } @@ -63,7 +56,6 @@ public class WallConfig { } public WallConfig clear() { - getPlayer().clearMediaItems(); this.config = null; return this; } @@ -72,10 +64,6 @@ public class WallConfig { return config == null ? Config.wall() : config; } - public ExoPlayer getPlayer() { - return player == null ? createPlayer() : player; - } - public void load(Callback callback) { if (executor != null) executor.shutdownNow(); executor = Executors.newSingleThreadExecutor(); @@ -101,20 +89,6 @@ public class WallConfig { return sync || TextUtils.isEmpty(config.getUrl()) || url.equals(config.getUrl()); } - private ExoPlayer createPlayer() { - player = new ExoPlayer.Builder(App.get()).build(); - player.setRepeatMode(ExoPlayer.REPEAT_MODE_ALL); - player.setPlayWhenReady(true); - player.setVolume(0); - return player; - } - - public static void load(File file) { - if (get().getPlayer().getMediaItemCount() > 0) return; - get().getPlayer().setMediaItem(MediaItem.fromUri(Uri.fromFile(file))); - get().getPlayer().prepare(); - } - public static void refresh(int index) { Setting.putWall(index); RefreshEvent.wall(); diff --git a/app/src/main/java/com/fongmi/android/tv/ui/custom/CustomWallView.java b/app/src/main/java/com/fongmi/android/tv/ui/custom/CustomWallView.java index 25c7369a3..4f3e3419e 100644 --- a/app/src/main/java/com/fongmi/android/tv/ui/custom/CustomWallView.java +++ b/app/src/main/java/com/fongmi/android/tv/ui/custom/CustomWallView.java @@ -4,6 +4,7 @@ import static android.widget.ImageView.ScaleType.CENTER_CROP; import android.content.Context; import android.media.MediaMetadataRetriever; +import android.net.Uri; import android.widget.FrameLayout; import android.widget.ImageView; @@ -11,12 +12,14 @@ import androidx.activity.ComponentActivity; import androidx.annotation.NonNull; import androidx.lifecycle.DefaultLifecycleObserver; import androidx.lifecycle.LifecycleOwner; +import androidx.media3.common.MediaItem; +import androidx.media3.exoplayer.DefaultLoadControl; import androidx.media3.exoplayer.ExoPlayer; import androidx.media3.ui.AspectRatioFrameLayout; import androidx.media3.ui.PlayerView; +import com.fongmi.android.tv.App; import com.fongmi.android.tv.Setting; -import com.fongmi.android.tv.api.config.WallConfig; import com.fongmi.android.tv.event.RefreshEvent; import com.fongmi.android.tv.utils.FileUtil; import com.fongmi.android.tv.utils.ImgUtil; @@ -41,12 +44,19 @@ public class CustomWallView extends FrameLayout implements DefaultLifecycleObser private void init(Context context) { ((ComponentActivity) context).getLifecycle().addObserver(this); - player = WallConfig.get().getPlayer(); + createPlayer(); addImageView(); addVideoView(); refresh(); } + private void createPlayer() { + player = new ExoPlayer.Builder(App.get()).setLoadControl(new DefaultLoadControl.Builder().setBufferDurationsMs(1000, 1000, 0, 1000).build()).build(); + player.setRepeatMode(ExoPlayer.REPEAT_MODE_ALL); + player.setPlayWhenReady(true); + player.setVolume(0); + } + private void addImageView() { image = new ImageView(getContext()); image.setScaleType(CENTER_CROP); @@ -100,19 +110,10 @@ public class CustomWallView extends FrameLayout implements DefaultLifecycleObser } private void loadVideo(File file) { - WallConfig.load(file); - video.setPlayer(player); + player.setMediaItem(MediaItem.fromUri(Uri.fromFile(file))); video.setVisibility(VISIBLE); - } - - @Override - public void onPause(@NonNull LifecycleOwner owner) { - video.setPlayer(null); - } - - @Override - public void onResume(@NonNull LifecycleOwner owner) { - if (player.getMediaItemCount() > 0) video.setPlayer(player); + video.setPlayer(player); + player.prepare(); } @Override @@ -123,5 +124,8 @@ public class CustomWallView extends FrameLayout implements DefaultLifecycleObser @Override public void onDestroy(@NonNull LifecycleOwner owner) { EventBus.getDefault().unregister(this); + video.setPlayer(null); + player.release(); + player = null; } }