修正一些bug;优化图片加载;(可能是最后一版对4.4以下的支持)

pull/113/head
21561 3 years ago
parent 2c7ca1917c
commit 8b63bf8958
  1. 2
      app/proguard-rules.pro
  2. 2
      app/src/main/java/com/github/tvbox/osc/picasso/RoundTransformation.java
  3. 4
      app/src/main/java/com/github/tvbox/osc/subtitle/widget/SimpleSubtitleView.java
  4. 1
      app/src/main/java/com/github/tvbox/osc/ui/activity/DetailActivity.java
  5. 21
      app/src/main/java/com/github/tvbox/osc/ui/activity/PlayActivity.java
  6. 1
      app/src/main/java/com/github/tvbox/osc/ui/adapter/CollectAdapter.java
  7. 3
      app/src/main/java/com/github/tvbox/osc/ui/adapter/FastSearchAdapter.java
  8. 15
      app/src/main/java/com/github/tvbox/osc/ui/adapter/GridAdapter.java
  9. 1
      app/src/main/java/com/github/tvbox/osc/ui/adapter/HistoryAdapter.java
  10. 4
      app/src/main/java/com/github/tvbox/osc/ui/adapter/HomeHotVodAdapter.java
  11. 3
      app/src/main/java/com/github/tvbox/osc/ui/adapter/SearchAdapter.java
  12. 21
      app/src/main/java/com/github/tvbox/osc/ui/fragment/PlayFragment.java
  13. 2
      app/src/main/java/com/github/tvbox/osc/util/OkGoHelper.java
  14. 9
      app/src/main/java/com/github/tvbox/osc/util/thunder/Thunder.java
  15. 3
      app/src/main/res/layout/item_user_hot_vod.xml
  16. 13
      player/src/main/java/tv/danmaku/ijk/media/player/IjkMediaPlayer.java
  17. BIN
      player/src/main/jniLibs/armeabi-v7a/libijkffmpeg.so
  18. BIN
      player/src/main/jniLibs/armeabi-v7a/libijksdl.so
  19. BIN
      player/src/main/jniLibs/armeabi-v7a/libplayer.so

@ -35,7 +35,7 @@
# 保留我们使用的四大组件,自定义的Application等等这些类不被混淆
# 因为这些子类都有可能被外部调用
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Appliction.**
-keep public class * extends android.app.Application.**
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider

@ -87,7 +87,7 @@ public class RoundTransformation implements Transformation {
matrix.postScale(scale, scale);
mBitmapShader.setLocalMatrix(matrix);
}
Bitmap bitmap = Bitmap.createBitmap(viewWidth, viewHeight, Bitmap.Config.ARGB_8888);
Bitmap bitmap = Bitmap.createBitmap(viewWidth, viewHeight, Bitmap.Config.RGB_565);
bitmap.setHasAlpha(true);
Canvas mCanvas = new Canvas(bitmap);
mPaint.setShader(mBitmapShader);

@ -108,7 +108,9 @@ public class SimpleSubtitleView extends TextView
text = text.replaceAll("(?:\\r\\n)", "<br />");
text = text.replaceAll("(?:\\r)", "<br />");
text = text.replaceAll("(?:\\n)", "<br />");
text = text.replaceAll("\\{[\\s\\S]*\\}", "");
text = text.replaceAll("\\\\N", "<br />");
text = text.replaceAll("\\{[\\s\\S]*?\\}", "");
text = text.replaceAll("^.*?,.*?,.*?,.*?,.*?,.*?,.*?,.*?,.*?,", "");
setText(Html.fromHtml(text));
}

@ -635,6 +635,7 @@ public class DetailActivity extends BaseActivity {
.override(AutoSizeUtils.mm2px(mContext, 300), AutoSizeUtils.mm2px(mContext, 400))
.roundRadius(AutoSizeUtils.mm2px(mContext, 10), RoundTransformation.RoundType.ALL))
.placeholder(R.drawable.img_loading_placeholder)
.noFade()
.error(R.drawable.img_loading_placeholder)
.into(ivThumb);
} else {

@ -501,14 +501,15 @@ public class PlayActivity extends BaseActivity {
if(autoRetryCount>1 && url.contains(".m3u8")){
url="http://home.jundie.top:666/unBom.php?m3u8="+url;//尝试去bom头再次播放
}
final String[] finalUrl = {url};
final String finalUrl = url;
runOnUiThread(new Runnable() {
@Override
public void run() {
stopParse();
if (mVideoView != null) {
mVideoView.release();
if (finalUrl[0] != null) {
if (finalUrl != null) {
String url =finalUrl;
try {
int playerType = mVodPlayerCfg.getInt("pl");
if (playerType >= 10) {
@ -517,7 +518,7 @@ public class PlayActivity extends BaseActivity {
setTip("调用外部播放器" + PlayerHelper.getPlayerName(playerType) + "进行播放", true, false);
boolean callResult = false;
long progress = getSavedProgress(progressKey);
callResult = PlayerHelper.runExternalPlayer(playerType, PlayActivity.this, finalUrl[0], playTitle, playSubtitle, headers, progress);
callResult = PlayerHelper.runExternalPlayer(playerType, PlayActivity.this, url, playTitle, playSubtitle, headers, progress);
setTip("调用外部播放器" + PlayerHelper.getPlayerName(playerType) + (callResult ? "成功" : "失败"), callResult, !callResult);
return;
}
@ -525,20 +526,20 @@ public class PlayActivity extends BaseActivity {
e.printStackTrace();
}
hideTip();
if (finalUrl[0].startsWith("data:application/dash+xml;base64,")) {
if (url.startsWith("data:application/dash+xml;base64,")) {
PlayerHelper.updateCfg(mVideoView, mVodPlayerCfg, 2);
App.getInstance().setDashData(finalUrl[0].split("base64,")[1]);
finalUrl[0] = ControlManager.get().getAddress(true) + "dash/proxy.mpd";
} else if (finalUrl[0].contains(".mpd") || finalUrl[0].contains("type=mpd")) {
App.getInstance().setDashData(url.split("base64,")[1]);
url = ControlManager.get().getAddress(true) + "dash/proxy.mpd";
} else if (url.contains(".mpd") || url.contains("type=mpd")) {
PlayerHelper.updateCfg(mVideoView, mVodPlayerCfg, 2);
} else {
PlayerHelper.updateCfg(mVideoView, mVodPlayerCfg);
}
mVideoView.setProgressKey(progressKey);
if (headers != null) {
mVideoView.setUrl(finalUrl[0], headers);
mVideoView.setUrl(url, headers);
} else {
mVideoView.setUrl(finalUrl[0]);
mVideoView.setUrl(url);
}
mVideoView.start();
mController.resetSpeed();
@ -1157,7 +1158,7 @@ public class PlayActivity extends BaseActivity {
LinkedHashMap<String, HashMap<String, String>> jxs = new LinkedHashMap<>();
String extendName = "";
for (ParseBean p : ApiConfig.get().getParseBeanList()) {
HashMap data = new HashMap<String, String>();
HashMap<String, String> data = new HashMap<String, String>();
data.put("url", p.getUrl());
if (p.getUrl().equals(pb.getUrl())) {
extendName = p.getName();

@ -55,6 +55,7 @@ public class CollectAdapter extends BaseQuickAdapter<VodCollect, BaseViewHolder>
.override(AutoSizeUtils.mm2px(mContext, 300), AutoSizeUtils.mm2px(mContext, 400))
.roundRadius(AutoSizeUtils.mm2px(mContext, 10), RoundTransformation.RoundType.ALL))
.placeholder(R.drawable.img_loading_placeholder)
.noFade()
.error(R.drawable.img_loading_placeholder)
.into(ivThumb);
} else {

@ -37,11 +37,12 @@ public class FastSearchAdapter extends BaseQuickAdapter<Movie.Video, BaseViewHol
if (!TextUtils.isEmpty(item.pic)) {
Picasso.get()
.load(item.pic)
.transform(new RoundTransformation(MD5.string2MD5(item.pic + "position=" + helper.getLayoutPosition()))
.transform(new RoundTransformation(MD5.string2MD5(item.pic))
.centerCorp(true)
.override(AutoSizeUtils.mm2px(mContext, 300), AutoSizeUtils.mm2px(mContext, 400))
.roundRadius(AutoSizeUtils.mm2px(mContext, 10), RoundTransformation.RoundType.ALL))
.placeholder(R.drawable.img_loading_placeholder)
.noFade()
.error(R.drawable.img_loading_placeholder)
.into(ivThumb);
} else {

@ -12,6 +12,7 @@ import com.github.tvbox.osc.bean.Movie;
import com.github.tvbox.osc.picasso.RoundTransformation;
import com.github.tvbox.osc.util.DefaultConfig;
import com.github.tvbox.osc.util.MD5;
import com.squareup.picasso.MemoryPolicy;
import com.squareup.picasso.Picasso;
import java.util.ArrayList;
@ -42,12 +43,13 @@ public class GridAdapter extends BaseQuickAdapter<Movie.Video, BaseViewHolder> {
item.pic=item.pic.trim();
Picasso.get()
.load(DefaultConfig.checkReplaceProxy(item.pic))
.transform(new RoundTransformation(MD5.string2MD5(item.pic + "position=" + helper.getLayoutPosition()))
.transform(new RoundTransformation(MD5.string2MD5(item.pic))
.centerCorp(true)
.override(AutoSizeUtils.mm2px(mContext, 300), AutoSizeUtils.mm2px(mContext, 400))
.override(AutoSizeUtils.mm2px(mContext, 240), AutoSizeUtils.mm2px(mContext, 320))
.roundRadius(AutoSizeUtils.mm2px(mContext, 10), RoundTransformation.RoundType.ALL))
.placeholder(R.drawable.img_loading_placeholder)
.error(R.drawable.img_loading_placeholder)
.noFade()
// .error(R.drawable.img_loading_placeholder)
.into(ivThumb);
} else {
ivThumb.setImageResource(R.drawable.img_loading_placeholder);
@ -92,12 +94,13 @@ public class GridAdapter extends BaseQuickAdapter<Movie.Video, BaseViewHolder> {
item.pic=item.pic.trim();
Picasso.get()
.load(DefaultConfig.checkReplaceProxy(item.pic))
.transform(new RoundTransformation(MD5.string2MD5(item.pic + "position=" + helper.getLayoutPosition()))
.transform(new RoundTransformation(MD5.string2MD5(item.pic))
.centerCorp(true)
.override(AutoSizeUtils.mm2px(mContext, 300), AutoSizeUtils.mm2px(mContext, 400))
.override(AutoSizeUtils.mm2px(mContext, 240), AutoSizeUtils.mm2px(mContext, 320))
.roundRadius(AutoSizeUtils.mm2px(mContext, 10), RoundTransformation.RoundType.ALL))
.placeholder(R.drawable.img_loading_placeholder)
.error(R.drawable.img_loading_placeholder)
.noFade()
// .error(R.drawable.img_loading_placeholder)
.into(ivThumb);
} else {
ivThumb.setImageResource(R.drawable.img_loading_placeholder);

@ -90,6 +90,7 @@ public class HistoryAdapter extends BaseQuickAdapter<VodInfo, BaseViewHolder> {
.override(AutoSizeUtils.mm2px(mContext, 300), AutoSizeUtils.mm2px(mContext, 400))
.roundRadius(AutoSizeUtils.mm2px(mContext, 10), RoundTransformation.RoundType.ALL))
.placeholder(R.drawable.img_loading_placeholder)
.noFade()
.error(R.drawable.img_loading_placeholder)
.into(ivThumb);
} else {

@ -58,13 +58,15 @@ public class HomeHotVodAdapter extends BaseQuickAdapter<Movie.Video, BaseViewHol
ImageView ivThumb = helper.getView(R.id.ivThumb);
//由于部分电视机使用glide报错
if (!TextUtils.isEmpty(item.pic)) {
item.pic=item.pic.trim();
Picasso.get()
.load(DefaultConfig.checkReplaceProxy(item.pic))
.transform(new RoundTransformation(MD5.string2MD5(item.pic + "position=" + helper.getLayoutPosition()))
.transform(new RoundTransformation(MD5.string2MD5(item.pic))
.centerCorp(true)
.override(AutoSizeUtils.mm2px(mContext, 300), AutoSizeUtils.mm2px(mContext, 400))
.roundRadius(AutoSizeUtils.mm2px(mContext, 10), RoundTransformation.RoundType.ALL))
.placeholder(R.drawable.img_loading_placeholder)
.noFade()
.error(R.drawable.img_loading_placeholder)
.into(ivThumb);
} else {

@ -39,11 +39,12 @@ public class SearchAdapter extends BaseQuickAdapter<Movie.Video, BaseViewHolder>
if (!TextUtils.isEmpty(item.pic)) {
Picasso.get()
.load(item.pic)
.transform(new RoundTransformation(MD5.string2MD5(item.pic + "position=" + helper.getLayoutPosition()))
.transform(new RoundTransformation(MD5.string2MD5(item.pic))
.centerCorp(true)
.override(AutoSizeUtils.mm2px(mContext, 300), AutoSizeUtils.mm2px(mContext, 400))
.roundRadius(AutoSizeUtils.mm2px(mContext, 10), RoundTransformation.RoundType.ALL))
.placeholder(R.drawable.img_loading_placeholder)
.noFade()
.error(R.drawable.img_loading_placeholder)
.into(ivThumb);
} else {

@ -514,14 +514,15 @@ public class PlayFragment extends BaseLazyFragment {
}
if (mActivity == null) return;
if (!isAdded()) return;
final String[] finalUrl = {url};
final String finalUrl = url;
requireActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
stopParse();
if (mVideoView != null) {
mVideoView.release();
if (finalUrl[0] != null) {
if (finalUrl != null) {
String url = finalUrl;
try {
int playerType = mVodPlayerCfg.getInt("pl");
if (playerType >= 10) {
@ -530,7 +531,7 @@ public class PlayFragment extends BaseLazyFragment {
setTip("调用外部播放器" + PlayerHelper.getPlayerName(playerType) + "进行播放", true, false);
boolean callResult = false;
long progress = getSavedProgress(progressKey);
callResult = PlayerHelper.runExternalPlayer(playerType, requireActivity(), finalUrl[0], playTitle, playSubtitle, headers, progress);
callResult = PlayerHelper.runExternalPlayer(playerType, requireActivity(), url, playTitle, playSubtitle, headers, progress);
setTip("调用外部播放器" + PlayerHelper.getPlayerName(playerType) + (callResult ? "成功" : "失败"), callResult, !callResult);
return;
}
@ -538,20 +539,20 @@ public class PlayFragment extends BaseLazyFragment {
e.printStackTrace();
}
hideTip();
if (finalUrl[0].startsWith("data:application/dash+xml;base64,")) {
if (url.startsWith("data:application/dash+xml;base64,")) {
PlayerHelper.updateCfg(mVideoView, mVodPlayerCfg, 2);
App.getInstance().setDashData(finalUrl[0].split("base64,")[1]);
finalUrl[0] = ControlManager.get().getAddress(true) + "dash/proxy.mpd";
} else if (finalUrl[0].contains(".mpd") || finalUrl[0].contains("type=mpd")) {
App.getInstance().setDashData(url.split("base64,")[1]);
url = ControlManager.get().getAddress(true) + "dash/proxy.mpd";
} else if (url.contains(".mpd") || url.contains("type=mpd")) {
PlayerHelper.updateCfg(mVideoView, mVodPlayerCfg, 2);
} else {
PlayerHelper.updateCfg(mVideoView, mVodPlayerCfg);
}
mVideoView.setProgressKey(progressKey);
if (headers != null) {
mVideoView.setUrl(finalUrl[0], headers);
mVideoView.setUrl(url, headers);
} else {
mVideoView.setUrl(finalUrl[0]);
mVideoView.setUrl(url);
}
mVideoView.start();
mController.resetSpeed();
@ -1185,7 +1186,7 @@ public class PlayFragment extends BaseLazyFragment {
LinkedHashMap<String, HashMap<String, String>> jxs = new LinkedHashMap<>();
String extendName = "";
for (ParseBean p : ApiConfig.get().getParseBeanList()) {
HashMap data = new HashMap<String, String>();
HashMap<String, String> data = new HashMap<String, String>();
data.put("url", p.getUrl());
if (p.getUrl().equals(pb.getUrl())) {
extendName = p.getName();

@ -15,6 +15,8 @@ import com.squareup.picasso.Picasso;
import java.io.File;
import java.security.cert.CertificateException;
import java.util.ArrayList;
import java.util.concurrent.PriorityBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.logging.Level;

@ -104,7 +104,6 @@ public class Thunder {
torrentFileInfoArrayList=new ArrayList<>();
playList=new ArrayList<>();
ed2kList=new ArrayList<>();
ArrayList<String> jxUrls=new ArrayList<>();
Map<Integer, String> urlMap = new HashMap<>();
threadPool.execute(new Runnable() {
@Override
@ -116,7 +115,6 @@ public class Thunder {
for (Movie.Video.UrlBean.UrlInfo.InfoBean infoBean : urlInfo.beanList) {
boolean isParse=false;
url=infoBean.url;
// if(jxUrls.contains(url))continue;
if (isMagnet(url) || isThunder(url) || isTorrent(url)) {
if(isThunder(url) )url=XLDownloadManager.getInstance().parserThunderUrl(url);
String link = isThunder(url) ? XLDownloadManager.getInstance().parserThunderUrl(url) : url;
@ -141,7 +139,7 @@ public class Thunder {
if (currentTask <= 0) {
continue;
}
int count = 15;
int count = 30;
outerLoop:
while (true) {
count--;
@ -160,13 +158,12 @@ public class Thunder {
TorrentFileInfo[] mSubFileInfo = torrentInfo.mSubFileInfo;
if (mSubFileInfo != null) {
for (TorrentFileInfo sub : mSubFileInfo) {
if (isMedia(sub.mFileName)) {
if (isMedia(sub.mFileName) && sub.mFileSize > 1048576L * 30) {
sub.torrentPath = cache.getAbsolutePath();
playList.add(sub.mFileName + "$tvbox-torrent:" + torrentFileInfoArrayList.size());
torrentFileInfoArrayList.add(sub);
}
}
jxUrls.add(url);
isParse=true;
break outerLoop;
}
@ -183,7 +180,7 @@ public class Thunder {
}
}
try {
Thread.sleep(200);
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}

@ -24,8 +24,7 @@
android:layout_marginLeft="@dimen/vs_5"
android:layout_marginTop="@dimen/vs_5"
android:layout_marginRight="@dimen/vs_5"
android:orientation="horizontal"
android:visibility="gone">
android:orientation="horizontal">
<TextView
android:id="@+id/tvRate"

@ -187,14 +187,21 @@ public final class IjkMediaPlayer extends AbstractMediaPlayer {
if (!mIsLibLoaded) {
if (libLoader == null)
libLoader = sLocalLibLoader;
//ff4
try {
//ff4
libLoader.loadLibrary("ijkffmpeg");
libLoader.loadLibrary("ijksdl");
} catch (Throwable throwable) {
libLoader.loadLibrary("player");
//ff5
// libLoader.loadLibrary("ffmpeg");
// libLoader.loadLibrary("exoffmpeg");
// libLoader.loadLibrary("ijksdl");
// libLoader.loadLibrary("ijkplayer");
} catch (Throwable ignored) {
}
libLoader.loadLibrary("player");
mIsLibLoaded = true;
}
}

Loading…
Cancel
Save