pull/605/head
jhengazuji 4 months ago
parent 1b787976de
commit 80adea9280
  1. 2
      app/src/main/java/com/fongmi/android/tv/api/loader/JsLoader.java
  2. 55
      app/src/main/java/com/fongmi/android/tv/player/danmaku/DanPlayer.java
  3. 14
      app/src/main/java/com/fongmi/android/tv/player/danmaku/Loader.java
  4. 13
      app/src/main/java/com/fongmi/android/tv/player/danmaku/Sync.java

@ -11,8 +11,8 @@ import java.util.concurrent.ConcurrentHashMap;
public class JsLoader {
private final ConcurrentHashMap<String, Spider> spiders;
private final Loader loader;
private String recent;
private Loader loader;
public JsLoader() {
spiders = new ConcurrentHashMap<>();

@ -8,6 +8,7 @@ import com.fongmi.android.tv.player.Players;
import com.fongmi.android.tv.utils.ResUtil;
import java.util.HashMap;
import java.util.Map;
import master.flame.danmaku.controller.DrawHandler;
import master.flame.danmaku.danmaku.model.BaseDanmaku;
@ -18,20 +19,31 @@ import master.flame.danmaku.ui.widget.DanmakuView;
public class DanPlayer implements DrawHandler.Callback {
private static final String TAG = DanPlayer.class.getSimpleName();
private final DanmakuContext context;
private final Parser parser;
private final Loader loader;
private DanmakuView view;
private Players player;
public DanPlayer() {
parser = new Parser();
loader = new Loader();
context = DanmakuContext.create();
HashMap<Integer, Integer> maxLines = new HashMap<>();
maxLines.put(BaseDanmaku.TYPE_FIX_TOP, 2);
maxLines.put(BaseDanmaku.TYPE_SCROLL_RL, 2);
maxLines.put(BaseDanmaku.TYPE_SCROLL_LR, 2);
maxLines.put(BaseDanmaku.TYPE_FIX_BOTTOM, 2);
context.setMaximumLines(maxLines).setScrollSpeedFactor(1.2f).setDanmakuTransparency(0.8f);
context.setDanmakuStyle(IDisplayer.DANMAKU_STYLE_STROKEN, 3).setDanmakuMargin(ResUtil.dp2px(8)).setScaleTextSize(0.8f);
initContext();
}
private void initContext() {
Map<Integer, Integer> lines = new HashMap<>();
lines.put(BaseDanmaku.TYPE_FIX_TOP, 2);
lines.put(BaseDanmaku.TYPE_SCROLL_RL, 2);
lines.put(BaseDanmaku.TYPE_SCROLL_LR, 2);
lines.put(BaseDanmaku.TYPE_FIX_BOTTOM, 2);
context.setScaleTextSize(0.8f);
context.setMaximumLines(lines);
context.setScrollSpeedFactor(1.2f);
context.setDanmakuTransparency(0.8f);
context.setDanmakuMargin(ResUtil.dp2px(8));
context.setDanmakuStyle(IDisplayer.DANMAKU_STYLE_STROKEN, 3);
}
public void setView(DanmakuView view) {
@ -43,46 +55,51 @@ public class DanPlayer implements DrawHandler.Callback {
context.setDanmakuSync(new Sync(this.player = player));
}
private boolean isDanmakuPrepared() {
private boolean isPrepared() {
return view != null && view.isPrepared();
}
public void seekTo(long time) {
App.execute(() -> {
if (isDanmakuPrepared()) view.seekTo(time);
if (isDanmakuPrepared()) view.hide();
if (!isPrepared()) return;
view.seekTo(time);
view.hide();
});
}
public void play() {
App.execute(() -> {
if (isDanmakuPrepared()) view.resume();
if (!isPrepared()) return;
view.resume();
});
}
public void pause() {
App.execute(() -> {
if (isDanmakuPrepared()) view.pause();
if (!isPrepared()) return;
view.pause();
});
}
public void stop() {
App.execute(() -> {
if (isDanmakuPrepared()) view.stop();
if (!isPrepared()) return;
view.stop();
});
}
public void release() {
App.execute(() -> {
if (isDanmakuPrepared()) view.release();
if (!isPrepared()) return;
view.release();
});
}
public void setDanmaku(Danmaku item) {
App.execute(() -> {
view.release();
if (item.isEmpty()) return;
view.prepare(new Parser().load(new Loader(item).getDataSource()), context);
if (view != null) view.release();
if (item.isEmpty() || view == null) return;
view.prepare(parser.load(loader.load(item).getDataSource()), context);
});
}
@ -101,7 +118,7 @@ public class DanPlayer implements DrawHandler.Callback {
boolean playing = player.isPlaying();
long position = player.getPosition();
App.execute(() -> {
if (!isDanmakuPrepared()) return;
if (!isPrepared()) return;
if (playing) view.start(position);
else view.pause();
view.show();

@ -15,15 +15,19 @@ import okhttp3.OkHttpClient;
public class Loader implements ILoader {
private OkHttpClient client;
private final OkHttpClient client;
private AndroidFileSource dataSource;
public Loader(Danmaku item) {
public Loader() {
client = OkHttp.client(Constant.TIMEOUT_DANMAKU);
}
public Loader load(Danmaku item) {
try {
client = OkHttp.client(Constant.TIMEOUT_DANMAKU);
load(item.getUrl());
} catch (Exception e) {
e.printStackTrace();
return this;
} catch (IllegalDataException e) {
return this;
}
}

@ -7,24 +7,18 @@ import master.flame.danmaku.danmaku.model.AbsDanmakuSync;
public class Sync extends AbsDanmakuSync {
private final Players player;
private long time;
public Sync(Players player) {
this.player = player;
this.time = System.currentTimeMillis();
}
@Override
public long getUptimeMillis() {
return player == null ? 0 : player.getPosition();
return player.getPosition();
}
@Override
public int getSyncState() {
if (player == null) return SYNC_STATE_HALT;
long current = System.currentTimeMillis();
if (current - time < 1000) return SYNC_STATE_HALT;
time = current;
return player.isPlaying() ? SYNC_STATE_PLAYING : SYNC_STATE_HALT;
}
@ -32,4 +26,9 @@ public class Sync extends AbsDanmakuSync {
public long getThresholdTimeMills() {
return 1000L;
}
@Override
public boolean isSyncPlayingState() {
return true;
}
}

Loading…
Cancel
Save