Merge branch 'master' of https://github.com/react-native-video/react-native-video into feat/add_new_events_on_tracks_changed
# Conflicts: # android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java
This commit is contained in:
@@ -18,6 +18,7 @@ import android.widget.FrameLayout;
|
||||
import android.widget.ImageButton;
|
||||
|
||||
import androidx.annotation.WorkerThread;
|
||||
import androidx.activity.OnBackPressedCallback;
|
||||
|
||||
import com.brentvatne.common.Track;
|
||||
import com.brentvatne.common.VideoTrack;
|
||||
@@ -39,8 +40,9 @@ import com.google.android.exoplayer2.PlaybackParameters;
|
||||
import com.google.android.exoplayer2.Player;
|
||||
import com.google.android.exoplayer2.ExoPlayer;
|
||||
import com.google.android.exoplayer2.Timeline;
|
||||
import com.google.android.exoplayer2.TracksInfo;
|
||||
import com.google.android.exoplayer2.Tracks;
|
||||
import com.google.android.exoplayer2.drm.DefaultDrmSessionManager;
|
||||
import com.google.android.exoplayer2.drm.DefaultDrmSessionManagerProvider;
|
||||
import com.google.android.exoplayer2.drm.DrmSessionEventListener;
|
||||
import com.google.android.exoplayer2.drm.DrmSessionManager;
|
||||
import com.google.android.exoplayer2.drm.DrmSessionManagerProvider;
|
||||
@@ -129,6 +131,7 @@ class ReactExoplayerView extends FrameLayout implements
|
||||
private Player.Listener eventListener;
|
||||
|
||||
private ExoPlayerView exoPlayerView;
|
||||
private FullScreenPlayerView fullScreenPlayerView;
|
||||
|
||||
private DataSource.Factory mediaDataSourceFactory;
|
||||
private ExoPlayer player;
|
||||
@@ -356,7 +359,6 @@ class ReactExoplayerView extends FrameLayout implements
|
||||
|
||||
// Setting the player for the playerControlView
|
||||
playerControlView.setPlayer(player);
|
||||
playerControlView.show();
|
||||
playPauseControlContainer = playerControlView.findViewById(R.id.exo_play_pause_container);
|
||||
|
||||
// Invoking onClick event for exoplayerView
|
||||
@@ -388,6 +390,10 @@ class ReactExoplayerView extends FrameLayout implements
|
||||
}
|
||||
});
|
||||
|
||||
//Handling the fullScreenButton click event
|
||||
ImageButton fullScreenButton = playerControlView.findViewById(R.id.exo_fullscreen);
|
||||
fullScreenButton.setOnClickListener(v -> setFullscreen(!isFullscreen));
|
||||
|
||||
// Invoking onPlaybackStateChanged and onPlayWhenReadyChanged events for Player
|
||||
eventListener = new Player.Listener() {
|
||||
@Override
|
||||
@@ -430,6 +436,7 @@ class ReactExoplayerView extends FrameLayout implements
|
||||
removeViewAt(indexOfPC);
|
||||
}
|
||||
addView(playerControlView, 1, layoutParams);
|
||||
reLayout(playerControlView);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -557,7 +564,7 @@ class ReactExoplayerView extends FrameLayout implements
|
||||
|
||||
private void initializePlayerCore(ReactExoplayerView self) {
|
||||
ExoTrackSelection.Factory videoTrackSelectionFactory = new AdaptiveTrackSelection.Factory();
|
||||
self.trackSelector = new DefaultTrackSelector(videoTrackSelectionFactory);
|
||||
self.trackSelector = new DefaultTrackSelector(getContext(), videoTrackSelectionFactory);
|
||||
self.trackSelector.setParameters(trackSelector.buildUponParameters()
|
||||
.setMaxVideoBitrate(maxBitRate == 0 ? Integer.MAX_VALUE : maxBitRate));
|
||||
|
||||
@@ -653,6 +660,12 @@ class ReactExoplayerView extends FrameLayout implements
|
||||
setControls(controls);
|
||||
applyModifiers();
|
||||
startBufferCheckTimer();
|
||||
fullScreenPlayerView = new FullScreenPlayerView(getContext(), exoPlayerView, playerControlView, new OnBackPressedCallback(true) {
|
||||
@Override
|
||||
public void handleOnBackPressed() {
|
||||
setFullscreen(false);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private DrmSessionManager buildDrmSessionManager(UUID uuid, String licenseUrl, String[] keyRequestPropertiesArray) throws UnsupportedDrmException {
|
||||
@@ -707,6 +720,8 @@ class ReactExoplayerView extends FrameLayout implements
|
||||
return drmSessionManager;
|
||||
}
|
||||
};
|
||||
} else {
|
||||
drmProvider = new DefaultDrmSessionManagerProvider();
|
||||
}
|
||||
switch (type) {
|
||||
case C.TYPE_SS:
|
||||
@@ -813,7 +828,10 @@ class ReactExoplayerView extends FrameLayout implements
|
||||
player.setPlayWhenReady(true);
|
||||
}
|
||||
} else {
|
||||
player.setPlayWhenReady(false);
|
||||
// ensure playback is not ENDED, else it will trigger another ended event
|
||||
if (player.getPlaybackState() != Player.STATE_ENDED) {
|
||||
player.setPlayWhenReady(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1290,11 +1308,10 @@ class ReactExoplayerView extends FrameLayout implements
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTracksInfoChanged(TracksInfo tracksInfo) {
|
||||
public void onTracksChanged(Tracks tracks) {
|
||||
eventEmitter.textTracks(getTextTrackInfo());
|
||||
eventEmitter.audioTracks(getAudioTrackInfo());
|
||||
eventEmitter.videoTracks(getVideoTrackInfo());
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -1605,10 +1622,10 @@ class ReactExoplayerView extends FrameLayout implements
|
||||
TrackSelectionOverride selectionOverride = new TrackSelectionOverride(groups.get(groupIndex), tracks);
|
||||
|
||||
DefaultTrackSelector.Parameters selectionParameters = trackSelector.getParameters()
|
||||
.buildUpon()
|
||||
.setRendererDisabled(rendererIndex, false)
|
||||
.setTrackSelectionOverrides(new TrackSelectionOverrides.Builder().addOverride(selectionOverride).build())
|
||||
.build();
|
||||
.buildUpon()
|
||||
.setRendererDisabled(rendererIndex, false)
|
||||
.addOverride(selectionOverride)
|
||||
.build();
|
||||
trackSelector.setParameters(selectionParameters);
|
||||
}
|
||||
|
||||
@@ -1767,6 +1784,16 @@ class ReactExoplayerView extends FrameLayout implements
|
||||
if (activity == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (fullScreenPlayerView == null) {
|
||||
fullScreenPlayerView = new FullScreenPlayerView(getContext(), exoPlayerView, playerControlView, new OnBackPressedCallback(true) {
|
||||
@Override
|
||||
public void handleOnBackPressed() {
|
||||
setFullscreen(false);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Window window = activity.getWindow();
|
||||
View decorView = window.getDecorView();
|
||||
int uiOptions;
|
||||
@@ -1780,13 +1807,24 @@ class ReactExoplayerView extends FrameLayout implements
|
||||
| SYSTEM_UI_FLAG_FULLSCREEN;
|
||||
}
|
||||
eventEmitter.fullscreenWillPresent();
|
||||
decorView.setSystemUiVisibility(uiOptions);
|
||||
eventEmitter.fullscreenDidPresent();
|
||||
post(() -> {
|
||||
decorView.setSystemUiVisibility(uiOptions);
|
||||
if (controls) {
|
||||
fullScreenPlayerView.show();
|
||||
}
|
||||
eventEmitter.fullscreenDidPresent();
|
||||
});
|
||||
} else {
|
||||
uiOptions = View.SYSTEM_UI_FLAG_VISIBLE;
|
||||
eventEmitter.fullscreenWillDismiss();
|
||||
decorView.setSystemUiVisibility(uiOptions);
|
||||
eventEmitter.fullscreenDidDismiss();
|
||||
post(() -> {
|
||||
decorView.setSystemUiVisibility(uiOptions);
|
||||
if (controls) {
|
||||
fullScreenPlayerView.dismiss();
|
||||
reLayout(exoPlayerView);
|
||||
}
|
||||
eventEmitter.fullscreenDidDismiss();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1866,4 +1904,8 @@ class ReactExoplayerView extends FrameLayout implements
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void setSubtitleStyle(SubtitleStyle style) {
|
||||
exoPlayerView.setSubtitleStyle(style);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user