直播配置支持.m3u;尝试解决打包权限问题;恢复base64图片

pull/138/head
于俊 1 year ago
parent 9d57351668
commit fed4f2de40
  1. 5
      app/build.gradle
  2. 66
      app/src/main/java/com/github/tvbox/osc/ui/adapter/GridAdapter.java
  3. 26
      app/src/main/java/com/github/tvbox/osc/ui/adapter/HomeHotVodAdapter.java
  4. 22
      app/src/main/java/com/github/tvbox/osc/util/Base64Img.java
  5. 6
      app/src/main/java/com/github/tvbox/osc/util/OkGoHelper.java
  6. 3
      app/src/main/java/com/github/tvbox/osc/util/live/TxtSubscribe.java

@ -113,4 +113,9 @@ dependencies {
implementation ('com.google.net.cronet:cronet-okhttp:0.1.0')
// implementation 'com.google.android.gms:play-services-cronet:18.0.1'
implementation ('org.chromium.net:cronet-embedded:101.4951.41')
}
tasks.withType(JavaCompile) {
// options.fork = true
options.forkOptions.jvmArgs << "--add-opens=java.base/java.io=ALL-UNNAMED"
}

@ -10,6 +10,7 @@ import com.chad.library.adapter.base.BaseViewHolder;
import com.github.tvbox.osc.R;
import com.github.tvbox.osc.bean.Movie;
import com.github.tvbox.osc.picasso.RoundTransformation;
import com.github.tvbox.osc.util.Base64Img;
import com.github.tvbox.osc.util.DefaultConfig;
import com.github.tvbox.osc.util.MD5;
import com.squareup.picasso.MemoryPolicy;
@ -41,16 +42,21 @@ public class GridAdapter extends BaseQuickAdapter<Movie.Video, BaseViewHolder> {
//由于部分电视机使用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))
.centerCorp(true)
.override(AutoSizeUtils.mm2px(mContext, 240), AutoSizeUtils.mm2px(mContext, 320))
.roundRadius(AutoSizeUtils.mm2px(mContext, 10), RoundTransformation.RoundType.ALL))
.placeholder(R.drawable.img_loading_placeholder)
.noFade()
.error(R.drawable.img_loading_placeholder)
.into(ivThumb);
if(Base64Img.isBase64Image(item.pic)){
// 如果是 Base64 图片,解码并设置
ivThumb.setImageBitmap(Base64Img.decodeBase64ToBitmap(item.pic));
}else {
Picasso.get()
.load(DefaultConfig.checkReplaceProxy(item.pic))
.transform(new RoundTransformation(MD5.string2MD5(item.pic))
.centerCorp(true)
.override(AutoSizeUtils.mm2px(mContext, 240), AutoSizeUtils.mm2px(mContext, 320))
.roundRadius(AutoSizeUtils.mm2px(mContext, 10), RoundTransformation.RoundType.ALL))
.placeholder(R.drawable.img_loading_placeholder)
.noFade()
.error(R.drawable.img_loading_placeholder)
.into(ivThumb);
}
} else {
ivThumb.setImageResource(R.drawable.img_loading_placeholder);
}
@ -92,31 +98,21 @@ public class GridAdapter extends BaseQuickAdapter<Movie.Video, BaseViewHolder> {
//由于部分电视机使用glide报错
if (!TextUtils.isEmpty(item.pic)) {
item.pic=item.pic.trim();
// if(Base64Img.isBase64Image(item.pic)){
// // 如果是 Base64 图片,解码并设置
// ivThumb.setImageBitmap(Base64Img.decodeBase64ToBitmap(item.pic));
// }else {
// Picasso.get()
// .load(DefaultConfig.checkReplaceProxy(item.pic))
// .transform(new RoundTransformation(MD5.string2MD5(item.pic))
// .centerCorp(true)
// .override(AutoSizeUtils.mm2px(mContext, 240), AutoSizeUtils.mm2px(mContext, 320))
// .roundRadius(AutoSizeUtils.mm2px(mContext, 10), RoundTransformation.RoundType.ALL))
// .placeholder(R.drawable.img_loading_placeholder)
// .noFade()
// .error(R.drawable.img_loading_placeholder)
// .into(ivThumb);
// }
Picasso.get()
.load(DefaultConfig.checkReplaceProxy(item.pic))
.transform(new RoundTransformation(MD5.string2MD5(item.pic))
.centerCorp(true)
.override(AutoSizeUtils.mm2px(mContext, 240), AutoSizeUtils.mm2px(mContext, 320))
.roundRadius(AutoSizeUtils.mm2px(mContext, 10), RoundTransformation.RoundType.ALL))
.placeholder(R.drawable.img_loading_placeholder)
.noFade()
.error(R.drawable.img_loading_placeholder)
.into(ivThumb);
if(Base64Img.isBase64Image(item.pic)){
// 如果是 Base64 图片,解码并设置
ivThumb.setImageBitmap(Base64Img.decodeBase64ToBitmap(item.pic));
}else {
Picasso.get()
.load(DefaultConfig.checkReplaceProxy(item.pic))
.transform(new RoundTransformation(MD5.string2MD5(item.pic))
.centerCorp(true)
.override(AutoSizeUtils.mm2px(mContext, 240), AutoSizeUtils.mm2px(mContext, 320))
.roundRadius(AutoSizeUtils.mm2px(mContext, 10), RoundTransformation.RoundType.ALL))
.placeholder(R.drawable.img_loading_placeholder)
.noFade()
.error(R.drawable.img_loading_placeholder)
.into(ivThumb);
}
} else {
ivThumb.setImageResource(R.drawable.img_loading_placeholder);
}

@ -12,6 +12,7 @@ import com.github.tvbox.osc.R;
import com.github.tvbox.osc.api.ApiConfig;
import com.github.tvbox.osc.bean.Movie;
import com.github.tvbox.osc.picasso.RoundTransformation;
import com.github.tvbox.osc.util.Base64Img;
import com.github.tvbox.osc.util.DefaultConfig;
import com.github.tvbox.osc.util.HawkConfig;
import com.github.tvbox.osc.util.MD5;
@ -59,16 +60,21 @@ public class HomeHotVodAdapter extends BaseQuickAdapter<Movie.Video, BaseViewHol
//由于部分电视机使用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))
.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);
if(Base64Img.isBase64Image(item.pic)){
// 如果是 Base64 图片,解码并设置
ivThumb.setImageBitmap(Base64Img.decodeBase64ToBitmap(item.pic));
}else {
Picasso.get()
.load(DefaultConfig.checkReplaceProxy(item.pic))
.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 {
ivThumb.setImageResource(R.drawable.img_loading_placeholder);
}

@ -0,0 +1,22 @@
package com.github.tvbox.osc.util;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Base64;
/**
*base64图片
* @version 1.0.0 <br/>
*/
public class Base64Img {
public static boolean isBase64Image(String picUrl) {
return picUrl.startsWith("data:image");
}
public static Bitmap decodeBase64ToBitmap(String base64Str) {
// 去掉 Base64 数据的头部前缀,例如 "data:image/png;base64,"
String base64Data = base64Str.substring(base64Str.indexOf(",") + 1);
byte[] decodedBytes = Base64.decode(base64Data, Base64.DEFAULT);
return BitmapFactory.decodeByteArray(decodedBytes, 0, decodedBytes.length);
}
}

@ -204,10 +204,12 @@ public class OkGoHelper {
if (isValidIpAddress(hostname)) {
return Collections.singletonList(InetAddress.getByName(hostname));
}
if (map!=null && map.containsKey(hostname)) {
else if (map!=null && map.containsKey(hostname)) {
return Objects.requireNonNull(map.get(hostname));
}
return dnsOverHttps.lookup(hostname);
else {
return dnsOverHttps.lookup(hostname);
}
}
public synchronized void mapHosts(Map<String,String> hosts) {

@ -22,6 +22,8 @@ public class TxtSubscribe {
parseTxt(linkedHashMap, str);
}
}
//解析m3u后缀
private static void parseM3u(LinkedHashMap<String, LinkedHashMap<String, ArrayList<String>>> linkedHashMap, String str) {
ArrayList<String> urls;
try {
@ -75,6 +77,7 @@ public class TxtSubscribe {
return line.startsWith("ua") || line.startsWith("parse") || line.startsWith("click") || line.startsWith("player") || line.startsWith("header") || line.startsWith("format") || line.startsWith("origin") || line.startsWith("referer") || line.startsWith("#EXTHTTP:") || line.startsWith("#EXTVLCOPT:") || line.startsWith("#KODIPROP:");
}
//解析txt后缀
public static void parseTxt(LinkedHashMap<String, LinkedHashMap<String, ArrayList<String>>> linkedHashMap, String str) {
ArrayList<String> arrayList;
try {

Loading…
Cancel
Save