handle racing conditions when props are setted on exoplayer
This commit is contained in:
parent
3a7be63de3
commit
466c004837
@ -1,5 +1,8 @@
|
||||
## Changelog
|
||||
|
||||
### next
|
||||
* Handle racing conditions when props are setted on exoplayer
|
||||
|
||||
### Version 4.4.2
|
||||
* Change compileOnly to implementation on gradle (for newer gradle versions and react-native 0.59 support) [#1592](https://github.com/react-native-community/react-native-video/pull/1592)
|
||||
* Replaced RCTBubblingEventBlock events by RCTDirectEventBlock to avoid event name collisions [#1625](https://github.com/react-native-community/react-native-video/pull/1625)
|
||||
|
@ -333,6 +333,11 @@ class ReactExoplayerView extends FrameLayout implements
|
||||
}
|
||||
|
||||
private void initializePlayer() {
|
||||
ReactExoplayerView self = this;
|
||||
|
||||
new Handler().postDelayed(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (player == null) {
|
||||
TrackSelection.Factory videoTrackSelectionFactory = new AdaptiveTrackSelection.Factory(BANDWIDTH_METER);
|
||||
trackSelector = new DefaultTrackSelector(videoTrackSelectionFactory);
|
||||
@ -342,11 +347,11 @@ class ReactExoplayerView extends FrameLayout implements
|
||||
DefaultAllocator allocator = new DefaultAllocator(true, C.DEFAULT_BUFFER_SEGMENT_SIZE);
|
||||
DefaultLoadControl defaultLoadControl = new DefaultLoadControl(allocator, minBufferMs, maxBufferMs, bufferForPlaybackMs, bufferForPlaybackAfterRebufferMs, -1, true);
|
||||
player = ExoPlayerFactory.newSimpleInstance(getContext(), trackSelector, defaultLoadControl);
|
||||
player.addListener(this);
|
||||
player.setMetadataOutput(this);
|
||||
player.addListener(self);
|
||||
player.setMetadataOutput(self);
|
||||
exoPlayerView.setPlayer(player);
|
||||
audioBecomingNoisyReceiver.setListener(this);
|
||||
BANDWIDTH_METER.addEventListener(new Handler(), this);
|
||||
audioBecomingNoisyReceiver.setListener(self);
|
||||
BANDWIDTH_METER.addEventListener(new Handler(), self);
|
||||
setPlayWhenReady(!isPaused);
|
||||
playerNeedsSource = true;
|
||||
|
||||
@ -381,6 +386,8 @@ class ReactExoplayerView extends FrameLayout implements
|
||||
// Initializing the playerControlView
|
||||
initializePlayerControl();
|
||||
}
|
||||
}, 1);
|
||||
}
|
||||
|
||||
private MediaSource buildMediaSource(Uri uri, String overrideExtension) {
|
||||
int type = Util.inferContentType(!TextUtils.isEmpty(overrideExtension) ? "." + overrideExtension
|
||||
@ -439,8 +446,9 @@ class ReactExoplayerView extends FrameLayout implements
|
||||
updateResumePosition();
|
||||
player.release();
|
||||
player.setMetadataOutput(null);
|
||||
player = null;
|
||||
trackSelector = null;
|
||||
player = null;
|
||||
|
||||
}
|
||||
progressHandler.removeMessages(SHOW_PROGRESS);
|
||||
themedReactContext.removeLifecycleEventListener(this);
|
||||
@ -906,6 +914,7 @@ class ReactExoplayerView extends FrameLayout implements
|
||||
}
|
||||
|
||||
public void setSelectedTrack(int trackType, String type, Dynamic value) {
|
||||
if (player == null) return;
|
||||
int rendererIndex = getTrackRendererIndex(trackType);
|
||||
if (rendererIndex == C.INDEX_UNSET) {
|
||||
return;
|
||||
|
Loading…
Reference in New Issue
Block a user