pull/123/head
FongMi 3 years ago
parent 9ee73dc2cd
commit 711a33f158
  1. 5
      app/proguard-rules.pro
  2. 2
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java
  3. 31
      app/src/main/java/com/fongmi/android/tv/player/Players.java
  4. 35
      app/src/main/java/com/fongmi/android/tv/ui/custom/CustomSeekView.java

@ -31,3 +31,8 @@
# Pyramid
-keep class com.undcover.freedom.pyramid.** { *; }
# IJK
-keep class tv.danmaku.ijk.media.player.** { *; }
-keep class tv.danmaku.ijk.media.player.IjkMediaPlayer { *; }
-keep class tv.danmaku.ijk.media.player.ffmpeg.FFmpegApi { *; }

@ -278,9 +278,9 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick
CharSequence[] array = ResUtil.getStringArray(R.array.select_player);
Prefers.putPlayer(index = index == array.length - 1 ? 0 : ++index);
mBinding.control.player.setText(array[index]);
App.post(this::getUrl,250);
setVideoVisible();
mPlayers.toggle();
getUrl();
}
private void hideUI() {

@ -171,8 +171,8 @@ public class Players implements Player.Listener, IMediaPlayer.OnInfoListener, IM
}
public void pause() {
if (isExo()) exoPlayer.pause();
else if (isIjk()) ijkPlayer.pause();
if (isExo()) pauseExo();
else if (isIjk()) pauseIjk();
}
public void stop() {
@ -182,14 +182,14 @@ public class Players implements Player.Listener, IMediaPlayer.OnInfoListener, IM
}
public void toggle() {
if (isIjk()) stopExo();
if (isExo()) stopIjk();
else if (isIjk()) stopExo();
}
public void release() {
stopParse();
if (isExo()) relExo();
else if (isIjk()) relIjk();
if (isExo()) releaseExo();
else if (isIjk()) releaseIjk();
}
public void start(Channel channel) {
@ -207,6 +207,14 @@ public class Players implements Player.Listener, IMediaPlayer.OnInfoListener, IM
}
}
private void pauseExo() {
exoPlayer.pause();
}
private void pauseIjk() {
ijkPlayer.pause();
}
private void stopExo() {
exoPlayer.stop();
exoPlayer.clearMediaItems();
@ -216,14 +224,14 @@ public class Players implements Player.Listener, IMediaPlayer.OnInfoListener, IM
ijkPlayer.stopPlayback();
}
private void relExo() {
private void releaseExo() {
stopExo();
exoPlayer.removeListener(this);
exoPlayer.release();
exoPlayer = null;
}
private void relIjk() {
private void releaseIjk() {
stopIjk();
ijkPlayer.release(true);
ijkPlayer = null;
@ -258,15 +266,6 @@ public class Players implements Player.Listener, IMediaPlayer.OnInfoListener, IM
PlayerEvent.error(R.string.error_play_parse);
}
@Override
public void onEvents(@NonNull Player player, @NonNull Player.Events events) {
if (events.containsAny(EVENT_PLAYBACK_STATE_CHANGED, EVENT_PLAY_WHEN_READY_CHANGED, EVENT_IS_PLAYING_CHANGED)) {
//updateProgress();
} else if (events.containsAny(EVENT_POSITION_DISCONTINUITY, EVENT_TIMELINE_CHANGED)) {
//updateTimeline();
}
}
@Override
public void onPlayerError(@NonNull PlaybackException error) {
this.errorCode = error.errorCode;

@ -84,33 +84,30 @@ public class CustomSeekView extends FrameLayout implements TimeBar.OnScrubListen
boolean durationChanged = duration != currentDuration;
currentDuration = duration;
currentPosition = position;
if (durationView != null && durationChanged) {
durationView.setText(listener.stringToTime(duration));
}
if (timeBar != null && durationChanged) {
if (durationChanged) {
timeBar.setDuration(duration);
durationView.setText(listener.stringToTime(duration));
}
if (positionView != null && !scrubbing && positionChanged) {
positionView.setText(listener.stringToTime(position));
}
if (timeBar != null) {
if (positionChanged && !scrubbing) {
timeBar.setPosition(position);
timeBar.setBufferedPosition(buffered);
positionView.setText(listener.stringToTime(position));
}
removeCallbacks(runnable);
if (listener.isPlaying()) {
long mediaTimeDelayMs = timeBar != null ? timeBar.getPreferredUpdateDelay() : MAX_UPDATE_INTERVAL_MS;
long mediaTimeUntilNextFullSecondMs = 1000 - position % 1000;
mediaTimeDelayMs = Math.min(mediaTimeDelayMs, mediaTimeUntilNextFullSecondMs);
float playbackSpeed = listener.getSpeed();
long delayMs = playbackSpeed > 0 ? (long) (mediaTimeDelayMs / playbackSpeed) : MAX_UPDATE_INTERVAL_MS;
delayMs = Util.constrainValue(delayMs, MIN_UPDATE_INTERVAL_MS, MAX_UPDATE_INTERVAL_MS);
postDelayed(runnable, delayMs);
postDelayed(runnable, delayMs(position));
} else {
postDelayed(runnable, MAX_UPDATE_INTERVAL_MS);
}
}
private long delayMs(long position) {
long mediaTimeUntilNextFullSecondMs = 1000 - position % 1000;
long mediaTimeDelayMs = Math.min(timeBar.getPreferredUpdateDelay(), mediaTimeUntilNextFullSecondMs);
long delayMs = (long) (mediaTimeDelayMs / listener.getSpeed());
return Util.constrainValue(delayMs, MIN_UPDATE_INTERVAL_MS, MAX_UPDATE_INTERVAL_MS);
}
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
@ -120,16 +117,12 @@ public class CustomSeekView extends FrameLayout implements TimeBar.OnScrubListen
@Override
public void onScrubStart(@NonNull TimeBar timeBar, long position) {
scrubbing = true;
if (positionView != null) {
positionView.setText(listener.stringToTime(position));
}
positionView.setText(listener.stringToTime(position));
}
@Override
public void onScrubMove(@NonNull TimeBar timeBar, long position) {
if (positionView != null) {
positionView.setText(listener.stringToTime(position));
}
positionView.setText(listener.stringToTime(position));
}
@Override

Loading…
Cancel
Save