diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java index 28e49d2ee..64982eb32 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java @@ -21,7 +21,6 @@ import androidx.viewbinding.ViewBinding; import com.fongmi.android.tv.App; import com.fongmi.android.tv.R; import com.fongmi.android.tv.api.ApiConfig; -import com.fongmi.android.tv.api.SoLoader; import com.fongmi.android.tv.bean.History; import com.fongmi.android.tv.bean.Keep; import com.fongmi.android.tv.bean.Parse; @@ -475,24 +474,15 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis } private void onPlayer() { - if (SoLoader.isFail()) return; - int index = Prefers.getPlayer(); - CharSequence[] array = ResUtil.getStringArray(R.array.select_player); - Prefers.putPlayer(index = index == 0 ? 1 : 0); mBinding.control.tracks.setVisibility(View.GONE); - mBinding.control.player.setText(array[index]); + mBinding.control.player.setText(mPlayers.togglePlayer()); App.post(() -> getPlayer(false), 250); - mPlayers.toggle(); setPlayerView(); } private void onDecode() { if (mPlayers.isExo()) return; - int index = Prefers.getDecode(); - CharSequence[] array = ResUtil.getStringArray(R.array.select_decode); - Prefers.putDecode(index = index == 0 ? 1 : 0); - mBinding.control.decode.setText(array[index]); - mPlayers.setDecode(index); + mBinding.control.decode.setText(mPlayers.toggleDecode()); getPlayer(false); } diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/HomeActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/HomeActivity.java index 6ce2727b0..54e8e2668 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/HomeActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/HomeActivity.java @@ -17,7 +17,6 @@ import com.fongmi.android.tv.App; import com.fongmi.android.tv.R; import com.fongmi.android.tv.api.ApiConfig; import com.fongmi.android.tv.api.LiveConfig; -import com.fongmi.android.tv.api.SoLoader; import com.fongmi.android.tv.api.WallConfig; import com.fongmi.android.tv.bean.Func; import com.fongmi.android.tv.bean.History; @@ -73,7 +72,6 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen ApiConfig.get().init().load(getCallback()); mBinding.progressLayout.showProgress(); Updater.create(this).start(); - SoLoader.get().load(); Server.get().start(); setRecyclerView(); setViewModel(); 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 e509eb3a5..9ac20653f 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 @@ -17,7 +17,6 @@ import androidx.viewbinding.ViewBinding; import com.fongmi.android.tv.App; import com.fongmi.android.tv.R; import com.fongmi.android.tv.api.LiveConfig; -import com.fongmi.android.tv.api.SoLoader; import com.fongmi.android.tv.bean.Channel; import com.fongmi.android.tv.bean.Epg; import com.fongmi.android.tv.bean.Group; @@ -275,24 +274,15 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick } private void onPlayer() { - if (SoLoader.isFail()) return; - int index = Prefers.getPlayer(); - CharSequence[] array = ResUtil.getStringArray(R.array.select_player); - Prefers.putPlayer(index = index == 0 ? 1 : 0); mBinding.control.tracks.setVisibility(View.GONE); - mBinding.control.player.setText(array[index]); + mBinding.control.player.setText(mPlayers.togglePlayer()); App.post(this::getUrl, 250); - mPlayers.toggle(); setPlayerView(); } private void onDecode() { if (mPlayers.isExo()) return; - int index = Prefers.getDecode(); - CharSequence[] array = ResUtil.getStringArray(R.array.select_decode); - Prefers.putDecode(index = index == 0 ? 1 : 0); - mBinding.control.decode.setText(array[index]); - mPlayers.setDecode(index); + mBinding.control.decode.setText(mPlayers.toggleDecode()); getUrl(); } diff --git a/app/src/main/java/com/fongmi/android/tv/api/SoLoader.java b/app/src/main/java/com/fongmi/android/tv/api/SoLoader.java deleted file mode 100644 index 8e7a4c42d..000000000 --- a/app/src/main/java/com/fongmi/android/tv/api/SoLoader.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.fongmi.android.tv.api; - -import com.fongmi.android.tv.App; -import com.fongmi.android.tv.R; -import com.fongmi.android.tv.net.OKHttp; -import com.fongmi.android.tv.utils.FileUtil; -import com.fongmi.android.tv.utils.Notify; -import com.fongmi.android.tv.utils.Prefers; - -import java.io.File; - -public class SoLoader { - - private static final int exoVer = 1; - private static final int ijkVer = 1; - - private static final String url = "https://ghproxy.com/https://raw.githubusercontent.com/FongMi/TV/release/other/"; - private static final String exo = "libexo-" + exoVer + ".so"; - private static final String ijk = "libijk-" + ijkVer + ".so"; - - private boolean fail; - - private static class Loader { - static volatile SoLoader INSTANCE = new SoLoader(); - } - - public static SoLoader get() { - return Loader.INSTANCE; - } - - public static boolean isFail() { - return get().fail; - } - - public void load() { - new Thread(() -> checkSo(exo)).start(); - new Thread(() -> checkSo(ijk)).start(); - } - - private void checkSo(String name) { - try { - File file = new File(FileUtil.getLibDir(), name); - if (!file.exists() || file.length() < 1000) download(name, file); - if (file.length() < 1000) throw new Throwable(); - System.load(file.getAbsolutePath()); - } catch (Throwable e) { - App.post(() -> Notify.show(R.string.error_so_load)); - Prefers.putPlayer(0); - fail = true; - } - } - - private void download(String name, File file) throws Throwable { - remove(name.split("-")[0]); - FileUtil.write(file, OKHttp.newCall(url + name).execute().body().bytes()); - } - - private void remove(String name) { - File directory = FileUtil.getLibDir(); - for (File file : directory.listFiles()) { - if (file.getName().contains(name)) { - file.delete(); - } - } - } -} 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 02c9964e8..df09aa053 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 @@ -144,6 +144,19 @@ public class Players implements Player.Listener, IMediaPlayer.OnInfoListener, IM return getSpeedText(); } + public String togglePlayer() { + stop(); + int index = Prefers.getPlayer(); + Prefers.putPlayer(index = index == 0 ? 1 : 0); + return ResUtil.getStringArray(R.array.select_player)[index].toString(); + } + + public String toggleDecode() { + int index = Prefers.getDecode(); + setDecode(index = index == 0 ? 1 : 0); + return ResUtil.getStringArray(R.array.select_decode)[index].toString(); + } + public String getPositionTime(long time) { time = getPosition() + time; if (time > getDuration()) time = getDuration(); @@ -158,7 +171,8 @@ public class Players implements Player.Listener, IMediaPlayer.OnInfoListener, IM } public void setDecode(int decode) { - if (isIjk()) ijkPlayer.setDecode(decode); + ijkPlayer.setDecode(decode); + Prefers.putDecode(decode); } public void seekTo(int time) { @@ -189,11 +203,6 @@ public class Players implements Player.Listener, IMediaPlayer.OnInfoListener, IM else if (isIjk()) stopIjk(); } - public void toggle() { - if (isExo()) stopIjk(); - else if (isIjk()) stopExo(); - } - public void release() { stopParse(); if (isExo()) releaseExo(); diff --git a/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/IjkMediaPlayer.java b/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/IjkMediaPlayer.java index 885f6c998..f97690f82 100644 --- a/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/IjkMediaPlayer.java +++ b/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/IjkMediaPlayer.java @@ -180,6 +180,7 @@ public final class IjkMediaPlayer extends AbstractMediaPlayer { synchronized (IjkMediaPlayer.class) { if (!mIsLibLoaded) { if (libLoader == null) libLoader = sLocalLibLoader; + libLoader.loadLibrary("ijkffmpeg"); libLoader.loadLibrary("ijksdl"); libLoader.loadLibrary("player"); mIsLibLoaded = true;