pull/509/head
okjack 2 years ago
parent 602baa1959
commit 7889db8e2e
  1. 2
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/CastActivity.java
  2. 2
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java
  3. 2
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java
  4. 36
      app/src/main/java/com/fongmi/android/tv/player/Players.java
  5. 2
      app/src/main/java/com/fongmi/android/tv/player/exo/ExoUtil.java
  6. 2
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java
  7. 2
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java

@ -92,7 +92,7 @@ public class CastActivity extends BaseActivity implements CustomKeyDownCast.List
bindService(new Intent(this, DLNARendererService.class), this, Context.BIND_AUTO_CREATE);
mClock = Clock.create(mBinding.widget.clock);
mKeyDown = CustomKeyDownCast.create(this);
mPlayers = new Players().init(this);
mPlayers = Players.create(this);
mParser = new DIDLParser();
mR1 = this::hideControl;
mR2 = this::setTraffic;

@ -140,7 +140,7 @@ public class LiveActivity extends BaseActivity implements Clock.Callback, GroupP
protected void initView() {
mClock = Clock.create(Arrays.asList(mBinding.widget.clock, mBinding.display.clock));
mKeyDown = CustomKeyDownLive.create(this);
mPlayers = new Players().init(this);
mPlayers = Players.create(this);
mHides = new ArrayList<>();
mR0 = this::setActivated;
mR1 = this::hideControl;

@ -321,7 +321,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
mFrameParams = mBinding.video.getLayoutParams();
mClock = Clock.create(mBinding.display.clock);
mDanmakuContext = DanmakuContext.create();
mPlayers = new Players().init(this);
mPlayers = Players.create(this);
mBroken = new ArrayList<>();
mR1 = this::hideControl;
mR2 = this::updateFocus;

@ -16,6 +16,7 @@ import androidx.media3.common.AudioAttributes;
import androidx.media3.common.PlaybackException;
import androidx.media3.common.Player;
import androidx.media3.exoplayer.ExoPlayer;
import androidx.media3.exoplayer.util.EventLogger;
import androidx.media3.ui.PlayerView;
import com.fongmi.android.tv.App;
@ -68,15 +69,16 @@ public class Players implements Player.Listener, IMediaPlayer.Listener, ParseCal
public static final int SOFT = 0;
public static final int HARD = 1;
private final StringBuilder builder;
private final Formatter formatter;
private final Runnable runnable;
private Map<String, String> headers;
private MediaSessionCompat session;
private IjkVideoView ijkPlayer;
private DanmakuView danmuView;
private StringBuilder builder;
private Formatter formatter;
private ExoPlayer exoPlayer;
private ParseJob parseJob;
private Runnable runnable;
private String format;
private String url;
private Sub sub;
@ -87,6 +89,10 @@ public class Players implements Player.Listener, IMediaPlayer.Listener, ParseCal
private int error;
private int retry;
public static Players create(Activity activity) {
return new Players(activity);
}
public static boolean isExo(int type) {
return type == EXO;
}
@ -107,14 +113,13 @@ public class Players implements Player.Listener, IMediaPlayer.Listener, ParseCal
return player == SYS || player == IJK;
}
public Players init(Activity activity) {
private Players(Activity activity) {
player = Setting.getPlayer();
decode = Setting.getDecode(player);
builder = new StringBuilder();
runnable = ErrorEvent::timeout;
formatter = new Formatter(builder, Locale.getDefault());
createSession(activity);
return this;
}
private void createSession(Activity activity) {
@ -135,6 +140,7 @@ public class Players implements Player.Listener, IMediaPlayer.Listener, ParseCal
private void setupExo(PlayerView view) {
exoPlayer = new ExoPlayer.Builder(App.get()).setLoadControl(ExoUtil.buildLoadControl()).setTrackSelector(ExoUtil.buildTrackSelector()).setRenderersFactory(ExoUtil.buildRenderersFactory(decode)).setMediaSourceFactory(ExoUtil.buildMediaSourceFactory()).build();
exoPlayer.setAudioAttributes(AudioAttributes.DEFAULT, true);
exoPlayer.addAnalyticsListener(new EventLogger());
exoPlayer.setHandleAudioBecomingNoisy(true);
view.setRender(Setting.getRender());
exoPlayer.setPlayWhenReady(true);
@ -156,7 +162,7 @@ public class Players implements Player.Listener, IMediaPlayer.Listener, ParseCal
public void setSub(Sub sub) {
this.sub = sub;
if (isIjk()) return;
setMediaSource(headers, url);
setMediaSource();
}
public ExoPlayer exo() {
@ -188,6 +194,7 @@ public class Players implements Player.Listener, IMediaPlayer.Listener, ParseCal
}
public void setPlayer(int player) {
if (this.player != player) reset();
if (this.player != player) stop();
this.player = player;
this.decode = getDecode(player);
@ -207,14 +214,15 @@ public class Players implements Player.Listener, IMediaPlayer.Listener, ParseCal
public void reset() {
removeTimeoutCheck();
this.error = 0;
this.retry = 0;
stopParse();
error = 0;
retry = 0;
}
public void clear() {
this.headers = null;
this.url = null;
headers = null;
format = null;
url = null;
}
public int addRetry() {
@ -497,6 +505,10 @@ public class Players implements Player.Listener, IMediaPlayer.Listener, ParseCal
parseJob = null;
}
private void setMediaSource() {
setMediaSource(headers, url, format, null, new ArrayList<>(), Constant.TIMEOUT_PLAY);
}
public void setMediaSource(String url) {
setMediaSource(new HashMap<>(), url);
}
@ -505,10 +517,6 @@ public class Players implements Player.Listener, IMediaPlayer.Listener, ParseCal
setMediaSource(headers, url, null, null, new ArrayList<>(), Constant.TIMEOUT_PLAY);
}
private void setMediaSource(Map<String, String> headers, String url, String format) {
setMediaSource(headers, url, format, null, new ArrayList<>(), Constant.TIMEOUT_PLAY);
}
private void setMediaSource(Channel channel, int timeout) {
setMediaSource(channel.getHeaders(), channel.getUrl(), channel.getFormat(), channel.getDrm(), new ArrayList<>(), timeout);
}

@ -102,10 +102,10 @@ public class ExoUtil {
boolean m3u8Ad = uri.toString().contains(".m3u8") && (Setting.isRemoveAd() || Sniffer.getRegex(uri).size() > 0);
if (m3u8Ad) uri = Uri.parse(Server.get().getAddress(true).concat("/m3u8?url=").concat(URLEncoder.encode(uri.toString())));
MediaItem.Builder builder = new MediaItem.Builder().setUri(uri);
builder.setAllowChunklessPreparation(decode == Players.HARD);
builder.setRequestMetadata(getRequestMetadata(headers, uri));
builder.setSubtitleConfigurations(getSubtitleConfigs(subs));
if (drm != null) builder.setDrmConfiguration(drm.get());
builder.setAllowChunklessPreparation(decode == Players.HARD);
if (mimeType != null) builder.setMimeType(mimeType);
builder.setForceUseRtpTcp(Setting.getRtsp() == 1);
builder.setAds(Arrays.asList("9999"));

@ -162,7 +162,7 @@ public class LiveActivity extends BaseActivity implements Clock.Callback, Custom
setPadding(mBinding.control.getRoot());
setPadding(mBinding.widget.epg, true);
setPadding(mBinding.recycler, true);
mPlayers = new Players().init(this);
mPlayers = Players.create(this);
mObserveEpg = this::setEpg;
mObserveUrl = this::start;
mHides = new ArrayList<>();

@ -304,10 +304,10 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
mDanmakuContext = DanmakuContext.create();
mBinding.progressLayout.showProgress();
mBinding.swipeLayout.setEnabled(false);
mPlayers = new Players().init(this);
mObserveDetail = this::setDetail;
mObservePlayer = this::setPlayer;
mObserveSearch = this::setSearch;
mPlayers = Players.create(this);
mDialogs = new ArrayList<>();
mBroken = new ArrayList<>();
mClock = Clock.create(Arrays.asList(mBinding.display.clock, mBinding.control.time));

Loading…
Cancel
Save