Skip to content

Commit

Permalink
VEX-5044: Allow exoplayer to preinit with empty source (24i#6)
Browse files Browse the repository at this point in the history
- Allow player to be init before source is provided, and later update once a source is provided.
- Adds handling for providing a empty source in order to stop playback and clear out any existing content
  • Loading branch information
nickfujita authored Jun 30, 2021
1 parent 8087310 commit cba88fa
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 4 deletions.
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -770,6 +770,12 @@ Platforms: Android ExoPlayer
#### source
Sets the media source. You can pass an asset loaded via require or an object with a uri.

Setting the source will trigger the player to attempt to load the provided media with all other given props. Please be sure that all props are provided before/at the same time as setting the source.

Rendering the player component with a null source will init the player, and start playing once a source value is provided.

Providing a null source value after loading a previous source will stop playback, and clear out the previous source content.

The docs for this prop are incomplete and will be updated as each option is investigated and tested.


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -497,6 +497,7 @@ public void run() {
player.prepare(mediaSource, !haveResumePosition, false);
playerNeedsSource = false;

reLayout(exoPlayerView);
eventEmitter.loadStart();
loadVideoStarted = true;
}
Expand Down Expand Up @@ -1045,7 +1046,6 @@ public void onMetadata(Metadata metadata) {

public void setSrc(final Uri uri, final String extension, Map<String, String> headers) {
if (uri != null) {
boolean isOriginalSourceNull = srcUri == null;
boolean isSourceEqual = uri.equals(srcUri);

this.srcUri = uri;
Expand All @@ -1055,12 +1055,23 @@ public void setSrc(final Uri uri, final String extension, Map<String, String> he
DataSourceUtil.getDefaultDataSourceFactory(this.themedReactContext, bandwidthMeter,
this.requestHeaders);

if (!isOriginalSourceNull && !isSourceEqual) {
if (!isSourceEqual) {
reloadSource();
}
}
}

public void clearSrc() {
if (srcUri != null) {
player.stop(true);
this.srcUri = null;
this.extension = null;
this.requestHeaders = null;
this.mediaDataSourceFactory = null;
clearResumePosition();
}
}

public void setProgressUpdateInterval(final float progressUpdateInterval) {
mProgressUpdateInterval = progressUpdateInterval;
}
Expand All @@ -1071,14 +1082,13 @@ public void setReportBandwidth(boolean reportBandwidth) {

public void setRawSrc(final Uri uri, final String extension) {
if (uri != null) {
boolean isOriginalSourceNull = srcUri == null;
boolean isSourceEqual = uri.equals(srcUri);

this.srcUri = uri;
this.extension = extension;
this.mediaDataSourceFactory = buildDataSourceFactory(true);

if (!isOriginalSourceNull && !isSourceEqual) {
if (!isSourceEqual) {
reloadSource();
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,7 @@ public void setSrc(final ReactExoplayerView videoView, @Nullable ReadableMap src
Map<String, String> headers = src.hasKey(PROP_SRC_HEADERS) ? toStringMap(src.getMap(PROP_SRC_HEADERS)) : null;

if (TextUtils.isEmpty(uriString)) {
videoView.clearSrc();
return;
}

Expand Down

0 comments on commit cba88fa

Please sign in to comment.