Optimize pip mode

pull/485/head
okjack 2 years ago
parent 59249c569a
commit 505a23170e
  1. 6
      app/src/main/java/com/fongmi/android/tv/player/Players.java
  2. 2
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java
  3. 2
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java
  4. 17
      app/src/mobile/java/com/fongmi/android/tv/utils/PiP.java

@ -15,6 +15,7 @@ import androidx.annotation.NonNull;
import androidx.media3.common.AudioAttributes;
import androidx.media3.common.PlaybackException;
import androidx.media3.common.Player;
import androidx.media3.common.VideoSize;
import androidx.media3.exoplayer.ExoPlayer;
import androidx.media3.exoplayer.analytics.AnalyticsListener;
import androidx.media3.exoplayer.util.EventLogger;
@ -166,6 +167,11 @@ public class Players implements Player.Listener, IMediaPlayer.Listener, Analytic
return ijkPlayer;
}
public VideoSize getVideoSize() {
if (isExo()) return exo().getVideoSize();
return new VideoSize(ijk().getVideoWidth(), ijk().getVideoHeight());
}
public Map<String, String> getHeaders() {
return headers == null ? new HashMap<>() : checkUa(headers);
}

@ -1143,7 +1143,7 @@ public class LiveActivity extends BaseActivity implements Clock.Callback, Custom
super.onUserLeaveHint();
if (isRedirect()) return;
if (isLock()) App.post(this::onLock, 500);
if (mPlayers.haveTrack(C.TRACK_TYPE_VIDEO)) mPiP.enter(this, Setting.getLiveScale() == 2);
if (mPlayers.haveTrack(C.TRACK_TYPE_VIDEO)) mPiP.enter(this, mPlayers.getVideoSize(), Setting.getLiveScale());
}
@Override

@ -1700,7 +1700,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
super.onUserLeaveHint();
if (isRedirect()) return;
if (isLock()) App.post(this::onLock, 500);
if (mPlayers.haveTrack(C.TRACK_TYPE_VIDEO)) mPiP.enter(this, getScale() == 2);
if (mPlayers.haveTrack(C.TRACK_TYPE_VIDEO)) mPiP.enter(this, mPlayers.getVideoSize(), getScale());
}
@Override

@ -13,6 +13,7 @@ import android.view.View;
import androidx.annotation.DrawableRes;
import androidx.annotation.StringRes;
import androidx.media3.common.VideoSize;
import androidx.media3.ui.R;
import com.fongmi.android.tv.App;
@ -71,15 +72,27 @@ public class PiP {
}
}
public void enter(Activity activity, boolean four) {
public void enter(Activity activity, VideoSize size, int scale) {
try {
if (noPiP() || activity.isInPictureInPictureMode() || !Setting.isBackgroundPiP()) return;
builder.setAspectRatio(new Rational(four ? 4 : 16, four ? 3 : 9));
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) builder.setAutoEnterEnabled(true);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) builder.setSeamlessResizeEnabled(true);
if (scale == 1) builder.setAspectRatio(new Rational(16, 9));
else if (scale == 2) builder.setAspectRatio(new Rational(4, 3));
else builder.setAspectRatio(getRational(size));
activity.enterPictureInPictureMode(builder.build());
} catch (Exception e) {
e.printStackTrace();
}
}
private Rational getRational(VideoSize size) {
Rational limitWide = new Rational(239, 100);
Rational limitTall = new Rational(100, 239);
Rational rational = new Rational(size.width, size.height);
if (rational.isInfinite()) return new Rational(16, 9);
if (rational.floatValue() > limitWide.floatValue()) return limitWide;
if (rational.floatValue() < limitTall.floatValue()) return limitTall;
return rational;
}
}

Loading…
Cancel
Save