Skip to content

Commit 302c288

Browse files
authored
fix tv multiple media-session issue. (#440)
1 parent 90c5789 commit 302c288

File tree

2 files changed

+9
-55
lines changed

2 files changed

+9
-55
lines changed

android-exoplayer/src/main/java/com/brentvatne/exoplayer/ReactTVExoplayerView.java

Lines changed: 8 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import android.os.Handler;
99
import android.os.Message;
1010
import android.os.PowerManager;
11-
import android.support.v4.media.session.MediaSessionCompat;
1211
import android.text.TextUtils;
1312
import android.view.Choreographer;
1413
import android.view.KeyEvent;
@@ -42,7 +41,6 @@
4241
import androidx.media3.exoplayer.mediacodec.MediaCodecUtil;
4342
import androidx.media3.exoplayer.source.TrackGroupArray;
4443
import androidx.media3.exoplayer.trackselection.MappingTrackSelector;
45-
import androidx.media3.session.ext.MediaSessionConnector;
4644

4745
import com.amazon.device.ads.aftv.AdBreakPattern;
4846
import com.amazon.device.ads.aftv.AmazonFireTVAdCallback;
@@ -81,7 +79,6 @@
8179
import com.diceplatform.doris.entity.TextTrack;
8280
import com.diceplatform.doris.entity.Track;
8381
import com.diceplatform.doris.entity.TracksPolicy;
84-
import com.diceplatform.doris.entity.VideoType;
8582
import com.diceplatform.doris.entity.YoSsaiProperties;
8683
import com.diceplatform.doris.ext.imacsailive.ExoDorisImaCsaiLivePlayer;
8784
import com.diceplatform.doris.internal.ResumePositionHandler;
@@ -341,10 +338,6 @@ public void doFrame(long frameTimeNanos) {
341338
//Mux
342339
private Runnable initRunnable;
343340

344-
//MediaSession
345-
private final MediaSessionCompat mediaSession;
346-
private final MediaSessionConnector mediaSessionConnector;
347-
348341
private final AudioManager.OnAudioFocusChangeListener audioFocusChangeListener = new AudioManager.OnAudioFocusChangeListener() {
349342
@Override
350343
public void onAudioFocusChange(int focusChange) {
@@ -387,9 +380,6 @@ public ReactTVExoplayerView(ThemedReactContext context) {
387380
clearResumePosition();
388381
setPausedModifier(false);
389382

390-
mediaSession = new MediaSessionCompat(getContext(), getContext().getPackageName());
391-
mediaSessionConnector = new MediaSessionConnector(mediaSession);
392-
393383
boolean isRTL = I18nUtil.getInstance().isRTL(getContext());
394384
ExoDorisPlayerTvControlView controller = exoDorisPlayerView.findViewById(R.id.exo_controller);
395385
controller.setLayoutDirection(isRTL ? View.LAYOUT_DIRECTION_RTL : View.LAYOUT_DIRECTION_LTR);
@@ -490,7 +480,7 @@ public void onHostResume() {
490480
clearResumePosition();
491481
player.getExoPlayer().seekToDefaultPosition();
492482
}
493-
activateMediaSession();
483+
player.activateMediaSession();
494484
setPlayWhenReady(true);
495485
fromBackground = true;
496486
}
@@ -503,8 +493,10 @@ public void onHostPause() {
503493
setPlayWhenReady(false);
504494
onStopPlayback();
505495
isInBackground = isInteractive();
506-
deactivateMediaSession();
507496
dismissPopupWindow();
497+
if (player != null) {
498+
player.deactivateMediaSession();
499+
}
508500
}
509501

510502
private void dismissPopupWindow() {
@@ -588,8 +580,6 @@ private void doInitializePlayer(boolean force) {
588580
exoPlayer.setPlaybackParameters(params);
589581
exoPlayer.setVolume(isMuted ? 0 : 1);
590582
Log.d(TAG, "initialisePlayer() new instance: " + force);
591-
592-
activateMediaSession();
593583
}
594584
if (playerNeedsSource && src.getUrl() != null) {
595585

@@ -823,47 +813,13 @@ private long getPlayerStartupTime() {
823813
return playerInitTime - playerViewCreationTime;
824814
}
825815

826-
// MediaSession related functions.
827-
private void activateMediaSession() {
828-
Log.d(TAG, "activateMediaSession()");
829-
mediaSessionConnector.setPlayer(player.getExoPlayer());
830-
mediaSession.setActive(true);
831-
mediaSession.setCallback(new MediaSessionCompat.Callback() {
832-
@Override
833-
public void onPlay() {
834-
super.onPlay();
835-
Log.d(TAG, "MediaSession onPlay()");
836-
setPausedModifier(false);
837-
}
838-
839-
@Override
840-
public void onPause() {
841-
super.onPause();
842-
Log.d(TAG, "MediaSession onPause()");
843-
if (player == null || !isLive || player.getCurrentVideoType() == VideoType.LIVE_WITH_DVR) {
844-
setPausedModifier(true);
845-
}
846-
}
847-
});
848-
}
849-
850-
private void deactivateMediaSession() {
851-
Log.d(TAG, "deactivateMediaSession()");
852-
mediaSessionConnector.setPlayer(null);
853-
mediaSession.setActive(false);
854-
}
855-
856-
private void releaseMediaSession() {
857-
mediaSession.release();
858-
}
859-
860816
public void setMediaKeysListener(boolean visible) {
861-
if (!visible) {
862-
deactivateMediaSession();
817+
if (!visible && player != null) {
818+
player.deactivateMediaSession();
863819
}
864820

865-
if (visible && !isMediaKeysEnabled) {
866-
activateMediaSession();
821+
if (visible && !isMediaKeysEnabled && player != null) {
822+
player.activateMediaSession();
867823
}
868824

869825
isMediaKeysEnabled = visible;
@@ -877,8 +833,6 @@ private void handleDrmSessionManagerError(Exception exception) {
877833

878834
private void releasePlayer() {
879835
Log.d(TAG, "releasePlayer()");
880-
deactivateMediaSession();
881-
releaseMediaSession();
882836
adTagParameters = null;
883837
isImaDaiStreamLoaded = false;
884838
isInBackground = false;

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "react-native-video",
3-
"version": "7.10.15",
3+
"version": "7.10.16",
44
"dorisAndroidVersion": "3.14.8",
55
"messagingAndroidVersion": "1.1.0",
66
"description": "A <Video /> element for react-native",

0 commit comments

Comments
 (0)