From 0b873ec21c64cc71065e3743088d2e8b6e84853a Mon Sep 17 00:00:00 2001 From: Mihai Lapuste Date: Fri, 6 Oct 2023 11:15:31 -0700 Subject: [PATCH 01/20] commit --- ios/Video/RCTVideo.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/ios/Video/RCTVideo.swift b/ios/Video/RCTVideo.swift index 1c9c58fe16..faea195a6c 100644 --- a/ios/Video/RCTVideo.swift +++ b/ios/Video/RCTVideo.swift @@ -308,6 +308,7 @@ class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverH } } + // setUpPlayerItemIos10 func setUpPlayerItemIos10() { if #available(iOS 10.0, *) { guard From 692a4096b821b4a66ac6055c95ab1a41b091c333 Mon Sep 17 00:00:00 2001 From: Mihai Lapuste Date: Fri, 6 Oct 2023 11:30:33 -0700 Subject: [PATCH 02/20] push fix for dispatch closure --- ios/Video/RCTVideo.swift | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ios/Video/RCTVideo.swift b/ios/Video/RCTVideo.swift index faea195a6c..950cf8ee7b 100644 --- a/ios/Video/RCTVideo.swift +++ b/ios/Video/RCTVideo.swift @@ -352,7 +352,7 @@ class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverH @objc func setSrc(_ source:NSDictionary!) { - DispatchQueue.global(qos: .default).async { + let dispatchClosure = { self._source = VideoSource(source) if (self._source?.uri == nil || self._source?.uri == "") { self._player?.replaceCurrentItem(with: nil) @@ -439,6 +439,8 @@ class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverH }.catch{_ in } self._videoLoadStarted = true } + + DispatchQueue.global(qos: .default).async(execute: dispatchClosure) } @objc From d4c36322e007eac81a1b6e706e872556ae1764c3 Mon Sep 17 00:00:00 2001 From: Mihai Lapuste Date: Wed, 11 Oct 2023 12:19:22 +0300 Subject: [PATCH 03/20] bump exoplayer --- android/build.gradle | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/android/build.gradle b/android/build.gradle index 434f1018cc..f0bc66ffa2 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -57,7 +57,7 @@ repositories { dependencies { implementation "com.facebook.react:react-native:${safeExtGet('reactNativeVersion', '+')}" - implementation('com.google.android.exoplayer:exoplayer:2.18.6') { + implementation('com.google.android.exoplayer:exoplayer:2.19.1') { exclude group: 'com.android.support' } @@ -67,12 +67,12 @@ dependencies { implementation "androidx.media:media:1.1.0" implementation "androidx.activity:activity:1.4.0" - implementation('com.google.android.exoplayer:extension-okhttp:2.18.6') { + implementation('com.google.android.exoplayer:extension-okhttp:2.19.1') { exclude group: 'com.squareup.okhttp3', module: 'okhttp' } if (useExoplayerIMA) { - implementation 'com.google.android.exoplayer:extension-ima:2.18.6' + implementation 'com.google.android.exoplayer:extension-ima:2.19.1' } implementation "com.squareup.okhttp3:okhttp:" + '$OKHTTP_VERSION' } From 79d89eaec9b8f01c5241660775ca7ef1bf4dc373 Mon Sep 17 00:00:00 2001 From: Mihai Lapuste Date: Wed, 11 Oct 2023 12:43:32 +0300 Subject: [PATCH 04/20] add missing params --- .../main/java/com/brentvatne/exoplayer/ReactExoplayerView.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java index 150b074e7d..7d106471d5 100644 --- a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java +++ b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java @@ -750,7 +750,7 @@ private DrmSessionManager buildDrmSessionManager(UUID uuid, String licenseUrl, S // When DRM fails using L1 we want to switch to L3 mediaDrm.setPropertyString("securityLevel", "L3"); } - return new DefaultDrmSessionManager(uuid, mediaDrm, drmCallback, null, false, 3); + return new DefaultDrmSessionManager(uuid, mediaDrm, drmCallback, null, false, 3, false, null, 300000); } catch(UnsupportedDrmException ex) { // Unsupported DRM exceptions are handled by the calling method throw ex; From 96f81367440da86156b6fb82ab94472521a5aacd Mon Sep 17 00:00:00 2001 From: Mihai Lapuste Date: Wed, 11 Oct 2023 13:07:22 +0300 Subject: [PATCH 05/20] update --- .../exoplayer/ReactExoplayerView.java | 64 +++++++++++-------- 1 file changed, 37 insertions(+), 27 deletions(-) diff --git a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java index 7d106471d5..6d8f92b1d3 100644 --- a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java +++ b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java @@ -733,37 +733,47 @@ private DrmSessionManager buildDrmSessionManager(UUID uuid, String licenseUrl, S return buildDrmSessionManager(uuid, licenseUrl, keyRequestPropertiesArray, 0); } - private DrmSessionManager buildDrmSessionManager(UUID uuid, String licenseUrl, String[] keyRequestPropertiesArray, int retryCount) throws UnsupportedDrmException { - if (Util.SDK_INT < 18) { - return null; + private DrmSessionManager buildDrmSessionManager(UUID uuid, String licenseUrl, String[] keyRequestPropertiesArray, int retryCount) throws UnsupportedDrmException { + if (Util.SDK_INT < 18) { + return null; + } + try { + HttpMediaDrmCallback drmCallback = new HttpMediaDrmCallback(licenseUrl, + buildHttpDataSourceFactory(false)); + if (keyRequestPropertiesArray != null) { + for (int i = 0; i < keyRequestPropertiesArray.length - 1; i += 2) { + drmCallback.setKeyRequestProperty(keyRequestPropertiesArray[i], keyRequestPropertiesArray[i + 1]); + } } - try { - HttpMediaDrmCallback drmCallback = new HttpMediaDrmCallback(licenseUrl, - buildHttpDataSourceFactory(false)); - if (keyRequestPropertiesArray != null) { - for (int i = 0; i < keyRequestPropertiesArray.length - 1; i += 2) { - drmCallback.setKeyRequestProperty(keyRequestPropertiesArray[i], keyRequestPropertiesArray[i + 1]); + + DrmSessionManagerProvider drmProvider; + if (drmSessionManager != null) { // Assuming drmSessionManager is a class member + drmProvider = new DrmSessionManagerProvider() { + @Override + public DrmSessionManager get(MediaItem mediaItem) { + return drmSessionManager; } - } - FrameworkMediaDrm mediaDrm = FrameworkMediaDrm.newInstance(uuid); - if (hasDrmFailed) { - // When DRM fails using L1 we want to switch to L3 - mediaDrm.setPropertyString("securityLevel", "L3"); - } - return new DefaultDrmSessionManager(uuid, mediaDrm, drmCallback, null, false, 3, false, null, 300000); - } catch(UnsupportedDrmException ex) { - // Unsupported DRM exceptions are handled by the calling method - throw ex; - } catch (Exception ex) { - if (retryCount < 3) { - // Attempt retry 3 times in case where the OS Media DRM Framework fails for whatever reason - return buildDrmSessionManager(uuid, licenseUrl, keyRequestPropertiesArray, ++retryCount); - } - // Handle the unknow exception and emit to JS - eventEmitter.error(ex.toString(), ex, "3006"); - return null; + }; + } else { + drmProvider = new DefaultDrmSessionManagerProvider(); + } + + return drmProvider.get(null); // Since we don't have MediaItem in this context, passing null. Adjust if necessary. + + } catch(UnsupportedDrmException ex) { + // Unsupported DRM exceptions are handled by the calling method + throw ex; + } catch (Exception ex) { + if (retryCount < 3) { + // Attempt retry 3 times in case where the OS Media DRM Framework fails for whatever reason + return buildDrmSessionManager(uuid, licenseUrl, keyRequestPropertiesArray, ++retryCount); } + // Handle the unknown exception and emit to JS + eventEmitter.error(ex.toString(), ex, "3006"); + return null; } +} + private MediaSource buildMediaSource(Uri uri, String overrideExtension, DrmSessionManager drmSessionManager) { if (uri == null) { From 9fee93ac162c3267baf151231aa1bcfcf3d1e0ba Mon Sep 17 00:00:00 2001 From: Mihai Lapuste Date: Wed, 11 Oct 2023 13:12:19 +0300 Subject: [PATCH 06/20] update --- .../exoplayer/ReactExoplayerView.java | 59 ++++++++----------- 1 file changed, 24 insertions(+), 35 deletions(-) diff --git a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java index 6d8f92b1d3..0f95b1bdd7 100644 --- a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java +++ b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java @@ -733,47 +733,36 @@ private DrmSessionManager buildDrmSessionManager(UUID uuid, String licenseUrl, S return buildDrmSessionManager(uuid, licenseUrl, keyRequestPropertiesArray, 0); } - private DrmSessionManager buildDrmSessionManager(UUID uuid, String licenseUrl, String[] keyRequestPropertiesArray, int retryCount) throws UnsupportedDrmException { - if (Util.SDK_INT < 18) { - return null; - } - try { - HttpMediaDrmCallback drmCallback = new HttpMediaDrmCallback(licenseUrl, - buildHttpDataSourceFactory(false)); - if (keyRequestPropertiesArray != null) { - for (int i = 0; i < keyRequestPropertiesArray.length - 1; i += 2) { - drmCallback.setKeyRequestProperty(keyRequestPropertiesArray[i], keyRequestPropertiesArray[i + 1]); - } + private DrmSessionManager buildDrmSessionManager(UUID uuid, String licenseUrl, String[] keyRequestPropertiesArray, int retryCount) throws UnsupportedDrmException { + if (Util.SDK_INT < 18) { + return null; } - - DrmSessionManagerProvider drmProvider; - if (drmSessionManager != null) { // Assuming drmSessionManager is a class member - drmProvider = new DrmSessionManagerProvider() { - @Override - public DrmSessionManager get(MediaItem mediaItem) { - return drmSessionManager; + try { + HttpMediaDrmCallback drmCallback = new HttpMediaDrmCallback(licenseUrl, + buildHttpDataSourceFactory(false)); + if (keyRequestPropertiesArray != null) { + for (int i = 0; i < keyRequestPropertiesArray.length - 1; i += 2) { + drmCallback.setKeyRequestProperty(keyRequestPropertiesArray[i], keyRequestPropertiesArray[i + 1]); } - }; - } else { - drmProvider = new DefaultDrmSessionManagerProvider(); - } + } + + DrmSessionManagerProvider drmProvider = new DefaultDrmSessionManagerProvider(); - return drmProvider.get(null); // Since we don't have MediaItem in this context, passing null. Adjust if necessary. + return drmProvider.get(null); // Since we don't have MediaItem in this context, passing null. Adjust if necessary. - } catch(UnsupportedDrmException ex) { - // Unsupported DRM exceptions are handled by the calling method - throw ex; - } catch (Exception ex) { - if (retryCount < 3) { - // Attempt retry 3 times in case where the OS Media DRM Framework fails for whatever reason - return buildDrmSessionManager(uuid, licenseUrl, keyRequestPropertiesArray, ++retryCount); + } catch(UnsupportedDrmException ex) { + // Unsupported DRM exceptions are handled by the calling method + throw ex; + } catch (Exception ex) { + if (retryCount < 3) { + // Attempt retry 3 times in case where the OS Media DRM Framework fails for whatever reason + return buildDrmSessionManager(uuid, licenseUrl, keyRequestPropertiesArray, ++retryCount); + } + // Handle the unknown exception and emit to JS + eventEmitter.error(ex.toString(), ex, "3006"); + return null; } - // Handle the unknown exception and emit to JS - eventEmitter.error(ex.toString(), ex, "3006"); - return null; } -} - private MediaSource buildMediaSource(Uri uri, String overrideExtension, DrmSessionManager drmSessionManager) { if (uri == null) { From 5af9460e08f830f27d602188a37a4bfe1a53d883 Mon Sep 17 00:00:00 2001 From: Mihai Lapuste Date: Wed, 11 Oct 2023 13:17:16 +0300 Subject: [PATCH 07/20] fix --- .../java/com/brentvatne/exoplayer/ReactExoplayerView.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java index 0f95b1bdd7..509a6c78e9 100644 --- a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java +++ b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java @@ -733,7 +733,7 @@ private DrmSessionManager buildDrmSessionManager(UUID uuid, String licenseUrl, S return buildDrmSessionManager(uuid, licenseUrl, keyRequestPropertiesArray, 0); } - private DrmSessionManager buildDrmSessionManager(UUID uuid, String licenseUrl, String[] keyRequestPropertiesArray, int retryCount) throws UnsupportedDrmException { + private DrmSessionManager buildDrmSessionManager(UUID uuid, String licenseUrl, String[] keyRequestPropertiesArray, int retryCount) { if (Util.SDK_INT < 18) { return null; } @@ -747,12 +747,8 @@ private DrmSessionManager buildDrmSessionManager(UUID uuid, String licenseUrl, S } DrmSessionManagerProvider drmProvider = new DefaultDrmSessionManagerProvider(); - return drmProvider.get(null); // Since we don't have MediaItem in this context, passing null. Adjust if necessary. - } catch(UnsupportedDrmException ex) { - // Unsupported DRM exceptions are handled by the calling method - throw ex; } catch (Exception ex) { if (retryCount < 3) { // Attempt retry 3 times in case where the OS Media DRM Framework fails for whatever reason @@ -764,6 +760,7 @@ private DrmSessionManager buildDrmSessionManager(UUID uuid, String licenseUrl, S } } + private MediaSource buildMediaSource(Uri uri, String overrideExtension, DrmSessionManager drmSessionManager) { if (uri == null) { throw new IllegalStateException("Invalid video uri"); From 5a8b7791109f3960c8619dc53f0fb7dcc2831c08 Mon Sep 17 00:00:00 2001 From: Mihai Lapuste Date: Tue, 24 Oct 2023 21:48:35 +0300 Subject: [PATCH 08/20] test disable all tracks --- .../exoplayer/ReactExoplayerView.java | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java index 509a6c78e9..5e96ebfb9e 100644 --- a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java +++ b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java @@ -1558,14 +1558,19 @@ public void setPreventsDisplaySleepDuringVideoPlayback(boolean preventsDisplaySl this.preventsDisplaySleepDuringVideoPlayback = preventsDisplaySleepDuringVideoPlayback; } - public void disableTrack(int rendererIndex) { - DefaultTrackSelector.Parameters disableParameters = trackSelector.getParameters() - .buildUpon() - .setRendererDisabled(rendererIndex, true) - .build(); - trackSelector.setParameters(disableParameters); + public void disableTrack() { + MappingTrackSelector.MappedTrackInfo mappedTrackInfo = trackSelector.getCurrentMappedTrackInfo(); + if (mappedTrackInfo != null) { + DefaultTrackSelector.ParametersBuilder parametersBuilder = trackSelector.getParameters().buildUpon(); + for (int rendererIndex = 0; rendererIndex < mappedTrackInfo.getRendererCount(); rendererIndex++) { + if (mappedTrackInfo.getRendererType(rendererIndex) == C.TRACK_TYPE_AUDIO) { + parametersBuilder.setRendererDisabled(rendererIndex, true); + } + } + trackSelector.setParameters(parametersBuilder); + } } - + public void setSelectedTrack(int trackType, String type, Dynamic value) { if (player == null) return; int rendererIndex = getTrackRendererIndex(trackType); From 5284803246b60a19a5b900cb0185caa17ece6d23 Mon Sep 17 00:00:00 2001 From: Mihai Lapuste Date: Tue, 24 Oct 2023 21:58:33 +0300 Subject: [PATCH 09/20] more fix --- .../java/com/brentvatne/exoplayer/ReactExoplayerView.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java index 5e96ebfb9e..af920084ee 100644 --- a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java +++ b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java @@ -1592,7 +1592,7 @@ public void setSelectedTrack(int trackType, String type, Dynamic value) { } if (type.equals("disabled")) { - disableTrack(rendererIndex); + disableTrack(); return; } else if (type.equals("language")) { for (int i = 0; i < groups.length; ++i) { @@ -1710,7 +1710,7 @@ public void setSelectedTrack(int trackType, String type, Dynamic value) { } if (groupIndex == C.INDEX_UNSET) { - disableTrack(rendererIndex); + disableTrack(); return; } From cab6edf8a338e35fab3d6f6c55e99013ed7221c9 Mon Sep 17 00:00:00 2001 From: Mihai Lapuste Date: Tue, 24 Oct 2023 22:10:36 +0300 Subject: [PATCH 10/20] undo changes --- .../exoplayer/ReactExoplayerView.java | 23 ++++++++----------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java index af920084ee..509a6c78e9 100644 --- a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java +++ b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java @@ -1558,19 +1558,14 @@ public void setPreventsDisplaySleepDuringVideoPlayback(boolean preventsDisplaySl this.preventsDisplaySleepDuringVideoPlayback = preventsDisplaySleepDuringVideoPlayback; } - public void disableTrack() { - MappingTrackSelector.MappedTrackInfo mappedTrackInfo = trackSelector.getCurrentMappedTrackInfo(); - if (mappedTrackInfo != null) { - DefaultTrackSelector.ParametersBuilder parametersBuilder = trackSelector.getParameters().buildUpon(); - for (int rendererIndex = 0; rendererIndex < mappedTrackInfo.getRendererCount(); rendererIndex++) { - if (mappedTrackInfo.getRendererType(rendererIndex) == C.TRACK_TYPE_AUDIO) { - parametersBuilder.setRendererDisabled(rendererIndex, true); - } - } - trackSelector.setParameters(parametersBuilder); - } + public void disableTrack(int rendererIndex) { + DefaultTrackSelector.Parameters disableParameters = trackSelector.getParameters() + .buildUpon() + .setRendererDisabled(rendererIndex, true) + .build(); + trackSelector.setParameters(disableParameters); } - + public void setSelectedTrack(int trackType, String type, Dynamic value) { if (player == null) return; int rendererIndex = getTrackRendererIndex(trackType); @@ -1592,7 +1587,7 @@ public void setSelectedTrack(int trackType, String type, Dynamic value) { } if (type.equals("disabled")) { - disableTrack(); + disableTrack(rendererIndex); return; } else if (type.equals("language")) { for (int i = 0; i < groups.length; ++i) { @@ -1710,7 +1705,7 @@ public void setSelectedTrack(int trackType, String type, Dynamic value) { } if (groupIndex == C.INDEX_UNSET) { - disableTrack(); + disableTrack(rendererIndex); return; } From dd878939cf35d1a2627dbb590361e2e244da8d41 Mon Sep 17 00:00:00 2001 From: Mihai Lapuste Date: Wed, 25 Oct 2023 18:26:38 +0300 Subject: [PATCH 11/20] add ability to clean up in native module --- Video.js | 10 ++++-- .../exoplayer/ReactExoplayerViewManager.java | 8 ++++- .../brentvatne/react/ReactVideoPackage.java | 9 ++++-- .../com/brentvatne/react/VideoModule.java | 32 +++++++++++++++++++ 4 files changed, 53 insertions(+), 6 deletions(-) create mode 100644 android/src/main/java/com/brentvatne/react/VideoModule.java diff --git a/Video.js b/Video.js index ac6bc085a1..4b9aaba70e 100644 --- a/Video.js +++ b/Video.js @@ -14,8 +14,8 @@ const styles = StyleSheet.create({ }, }); -const { VideoDecoderProperties } = NativeModules -export { TextTrackType, FilterType, DRMType, VideoDecoderProperties } +const { VideoDecoderProperties, VideoModule } = NativeModules; +export { TextTrackType, FilterType, DRMType, VideoDecoderProperties }; export default class Video extends Component { @@ -77,6 +77,12 @@ export default class Video extends Component { this.setNativeProps({ fullscreen: false }); }; + cleanUpResources = () => { + if (Platform.OS === 'android') { + VideoModule.cleanUpResources(); + } + } + save = async (options?) => { return await NativeModules.VideoManager.save(options, findNodeHandle(this._root)); } diff --git a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerViewManager.java b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerViewManager.java index 8da025e74e..2a76c965f9 100644 --- a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerViewManager.java +++ b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerViewManager.java @@ -25,6 +25,8 @@ import javax.annotation.Nullable; +import com.brentvatne.react.VideoModule; + public class ReactExoplayerViewManager extends ViewGroupManager { private static final String REACT_CLASS = "RCTVideo"; @@ -96,7 +98,11 @@ public String getName() { @Override protected ReactExoplayerView createViewInstance(ThemedReactContext themedReactContext) { - return new ReactExoplayerView(themedReactContext, config); + ReactExoplayerView view = new ReactExoplayerView(themedReactContext, config); + + VideoModule.setVideoView(view); + + return view; } @Override diff --git a/android/src/main/java/com/brentvatne/react/ReactVideoPackage.java b/android/src/main/java/com/brentvatne/react/ReactVideoPackage.java index 23bedad69e..0ea403f9fd 100644 --- a/android/src/main/java/com/brentvatne/react/ReactVideoPackage.java +++ b/android/src/main/java/com/brentvatne/react/ReactVideoPackage.java @@ -25,9 +25,12 @@ public ReactVideoPackage(ReactExoplayerConfig config) { @Override public List createNativeModules(ReactApplicationContext reactContext) { - return Collections.singletonList( - new VideoDecoderPropertiesModule(reactContext) - ); + List modules = new ArrayList<>(); + + modules.add(new VideoDecoderPropertiesModule(reactContext)); + modules.add(new VideoModule(reactContext)); + + return modules; } // Deprecated RN 0.47 diff --git a/android/src/main/java/com/brentvatne/react/VideoModule.java b/android/src/main/java/com/brentvatne/react/VideoModule.java new file mode 100644 index 0000000000..53e73c2c62 --- /dev/null +++ b/android/src/main/java/com/brentvatne/react/VideoModule.java @@ -0,0 +1,32 @@ +package com.brentvatne.exoplayer; + +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.ReactContextBaseJavaModule; +import com.facebook.react.bridge.ReactMethod; + +public class VideoModule extends ReactContextBaseJavaModule { + + private static ReactExoplayerView videoView; + private final ReactApplicationContext reactContext; + + public static void setVideoView(ReactExoplayerView view) { + videoView = view; + } + + public VideoModule(ReactApplicationContext reactContext) { + super(reactContext); + this.reactContext = reactContext; + } + + @Override + public String getName() { + return "VideoModule"; + } + + @ReactMethod + public void cleanUpResources() { + if (videoView != null) { + videoView.cleanUpResources(); + } + } +} From 1d35e69e2b9336dc7b0fbae55379719a302549db Mon Sep 17 00:00:00 2001 From: Mihai Lapuste Date: Wed, 25 Oct 2023 18:37:48 +0300 Subject: [PATCH 12/20] fix --- .../com/brentvatne/exoplayer/ReactExoplayerViewManager.java | 2 -- .../src/main/java/com/brentvatne/react/ReactVideoPackage.java | 1 + android/src/main/java/com/brentvatne/react/VideoModule.java | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerViewManager.java b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerViewManager.java index 2a76c965f9..e8a6726543 100644 --- a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerViewManager.java +++ b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerViewManager.java @@ -25,8 +25,6 @@ import javax.annotation.Nullable; -import com.brentvatne.react.VideoModule; - public class ReactExoplayerViewManager extends ViewGroupManager { private static final String REACT_CLASS = "RCTVideo"; diff --git a/android/src/main/java/com/brentvatne/react/ReactVideoPackage.java b/android/src/main/java/com/brentvatne/react/ReactVideoPackage.java index 0ea403f9fd..f32bc72f96 100644 --- a/android/src/main/java/com/brentvatne/react/ReactVideoPackage.java +++ b/android/src/main/java/com/brentvatne/react/ReactVideoPackage.java @@ -11,6 +11,7 @@ import java.util.Collections; import java.util.List; +import java.util.ArrayList; public class ReactVideoPackage implements ReactPackage { diff --git a/android/src/main/java/com/brentvatne/react/VideoModule.java b/android/src/main/java/com/brentvatne/react/VideoModule.java index 53e73c2c62..03371588be 100644 --- a/android/src/main/java/com/brentvatne/react/VideoModule.java +++ b/android/src/main/java/com/brentvatne/react/VideoModule.java @@ -1,4 +1,4 @@ -package com.brentvatne.exoplayer; +package com.brentvatne.react; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReactContextBaseJavaModule; From 4b5ed27bd3b4a1def3d430f386ed2e7801ab5006 Mon Sep 17 00:00:00 2001 From: Mihai Lapuste Date: Wed, 25 Oct 2023 18:43:14 +0300 Subject: [PATCH 13/20] fix types --- .../src/main/java/com/brentvatne/react/ReactVideoPackage.java | 1 + android/src/main/java/com/brentvatne/react/VideoModule.java | 2 ++ 2 files changed, 3 insertions(+) diff --git a/android/src/main/java/com/brentvatne/react/ReactVideoPackage.java b/android/src/main/java/com/brentvatne/react/ReactVideoPackage.java index f32bc72f96..33accc601e 100644 --- a/android/src/main/java/com/brentvatne/react/ReactVideoPackage.java +++ b/android/src/main/java/com/brentvatne/react/ReactVideoPackage.java @@ -3,6 +3,7 @@ import com.brentvatne.exoplayer.DefaultReactExoplayerConfig; import com.brentvatne.exoplayer.ReactExoplayerConfig; import com.brentvatne.exoplayer.ReactExoplayerViewManager; +import com.brentvatne.react.VideoModule; import com.facebook.react.ReactPackage; import com.facebook.react.bridge.JavaScriptModule; import com.facebook.react.bridge.NativeModule; diff --git a/android/src/main/java/com/brentvatne/react/VideoModule.java b/android/src/main/java/com/brentvatne/react/VideoModule.java index 03371588be..9d47df5981 100644 --- a/android/src/main/java/com/brentvatne/react/VideoModule.java +++ b/android/src/main/java/com/brentvatne/react/VideoModule.java @@ -1,5 +1,7 @@ package com.brentvatne.react; +import com.brentvatne.exoplayer.ReactExoplayerView; + import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReactContextBaseJavaModule; import com.facebook.react.bridge.ReactMethod; From e21c5beb2812276fe0488026ed0a999bd9f93d4c Mon Sep 17 00:00:00 2001 From: Mihai Lapuste Date: Wed, 25 Oct 2023 18:49:56 +0300 Subject: [PATCH 14/20] fix --- .../main/java/com/brentvatne/exoplayer/ReactExoplayerView.java | 2 +- .../src/main/java/com/brentvatne/react/ReactVideoPackage.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java index 509a6c78e9..5c034faf8f 100644 --- a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java +++ b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java @@ -112,7 +112,7 @@ import java.lang.Integer; @SuppressLint("ViewConstructor") -class ReactExoplayerView extends FrameLayout implements +public class ReactExoplayerView extends FrameLayout implements LifecycleEventListener, Player.Listener, BandwidthMeter.EventListener, diff --git a/android/src/main/java/com/brentvatne/react/ReactVideoPackage.java b/android/src/main/java/com/brentvatne/react/ReactVideoPackage.java index 33accc601e..131a178ce6 100644 --- a/android/src/main/java/com/brentvatne/react/ReactVideoPackage.java +++ b/android/src/main/java/com/brentvatne/react/ReactVideoPackage.java @@ -1,9 +1,9 @@ package com.brentvatne.react; +import com.brentvatne.react.VideoModule; import com.brentvatne.exoplayer.DefaultReactExoplayerConfig; import com.brentvatne.exoplayer.ReactExoplayerConfig; import com.brentvatne.exoplayer.ReactExoplayerViewManager; -import com.brentvatne.react.VideoModule; import com.facebook.react.ReactPackage; import com.facebook.react.bridge.JavaScriptModule; import com.facebook.react.bridge.NativeModule; From 9056f3fecfaa941224614189cd5b32b31e671b54 Mon Sep 17 00:00:00 2001 From: Mihai Lapuste Date: Wed, 25 Oct 2023 18:55:48 +0300 Subject: [PATCH 15/20] remove import --- .../src/main/java/com/brentvatne/react/ReactVideoPackage.java | 1 - 1 file changed, 1 deletion(-) diff --git a/android/src/main/java/com/brentvatne/react/ReactVideoPackage.java b/android/src/main/java/com/brentvatne/react/ReactVideoPackage.java index 131a178ce6..f32bc72f96 100644 --- a/android/src/main/java/com/brentvatne/react/ReactVideoPackage.java +++ b/android/src/main/java/com/brentvatne/react/ReactVideoPackage.java @@ -1,6 +1,5 @@ package com.brentvatne.react; -import com.brentvatne.react.VideoModule; import com.brentvatne.exoplayer.DefaultReactExoplayerConfig; import com.brentvatne.exoplayer.ReactExoplayerConfig; import com.brentvatne.exoplayer.ReactExoplayerViewManager; From 3c33199e9d7a4b558ba315d903b699bfadaa112f Mon Sep 17 00:00:00 2001 From: Mihai Lapuste Date: Wed, 25 Oct 2023 18:59:34 +0300 Subject: [PATCH 16/20] fix --- .../com/brentvatne/exoplayer/ReactExoplayerViewManager.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerViewManager.java b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerViewManager.java index e8a6726543..6da6ad1ca2 100644 --- a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerViewManager.java +++ b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerViewManager.java @@ -1,5 +1,7 @@ package com.brentvatne.exoplayer; +import com.brentvatne.react.VideoModule; + import android.content.Context; import android.net.Uri; import android.text.TextUtils; From 46ca0c26178839d09508c02e78d04c411c221109 Mon Sep 17 00:00:00 2001 From: Mihai Lapuste Date: Wed, 25 Oct 2023 19:17:46 +0300 Subject: [PATCH 17/20] add new function to for refresh --- Video.js | 4 ++-- .../java/com/brentvatne/exoplayer/ReactExoplayerView.java | 5 +++++ android/src/main/java/com/brentvatne/react/VideoModule.java | 4 ++-- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/Video.js b/Video.js index 4b9aaba70e..de439628bf 100644 --- a/Video.js +++ b/Video.js @@ -77,9 +77,9 @@ export default class Video extends Component { this.setNativeProps({ fullscreen: false }); }; - cleanUpResources = () => { + forceRefreshPlayer = () => { if (Platform.OS === 'android') { - VideoModule.cleanUpResources(); + VideoModule.forceRefreshPlayer(); } } diff --git a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java index 5c034faf8f..c08602b4c2 100644 --- a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java +++ b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java @@ -342,6 +342,11 @@ public void cleanUpResources() { stopPlayback(); } + public void forceRefreshPlayer() { + releasePlayer(); + initializePlayer(); + } + //BandwidthMeter.EventListener implementation @Override public void onBandwidthSample(int elapsedMs, long bytes, long bitrate) { diff --git a/android/src/main/java/com/brentvatne/react/VideoModule.java b/android/src/main/java/com/brentvatne/react/VideoModule.java index 9d47df5981..12b2825bec 100644 --- a/android/src/main/java/com/brentvatne/react/VideoModule.java +++ b/android/src/main/java/com/brentvatne/react/VideoModule.java @@ -26,9 +26,9 @@ public String getName() { } @ReactMethod - public void cleanUpResources() { + public void forceRefreshPlayer() { if (videoView != null) { - videoView.cleanUpResources(); + videoView.forceRefreshPlayer(); } } } From cc0f8d2aa8e5f9a0dec0f53982ab149e86bb6ea5 Mon Sep 17 00:00:00 2001 From: Mihai Lapuste Date: Wed, 25 Oct 2023 19:30:29 +0300 Subject: [PATCH 18/20] try clearing source --- .../main/java/com/brentvatne/exoplayer/ReactExoplayerView.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java index c08602b4c2..2a2f6ee71a 100644 --- a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java +++ b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java @@ -343,8 +343,7 @@ public void cleanUpResources() { } public void forceRefreshPlayer() { - releasePlayer(); - initializePlayer(); + clearSrc(); } //BandwidthMeter.EventListener implementation From 92342eab357314affcf6fedfd15264ec6fcce9f2 Mon Sep 17 00:00:00 2001 From: Mihai Lapuste Date: Wed, 25 Oct 2023 19:35:14 +0300 Subject: [PATCH 19/20] do nothing --- .../main/java/com/brentvatne/exoplayer/ReactExoplayerView.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java index 2a2f6ee71a..ba8c9aa68c 100644 --- a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java +++ b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java @@ -343,7 +343,7 @@ public void cleanUpResources() { } public void forceRefreshPlayer() { - clearSrc(); + // clearSrc(); } //BandwidthMeter.EventListener implementation From 5de9ae04f14a64e28cb1baf13b71254a755fdfd0 Mon Sep 17 00:00:00 2001 From: Mihai Lapuste Date: Wed, 25 Oct 2023 19:58:35 +0300 Subject: [PATCH 20/20] test --- .../com/brentvatne/exoplayer/ReactExoplayerView.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java index ba8c9aa68c..5b956f1edd 100644 --- a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java +++ b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java @@ -343,7 +343,15 @@ public void cleanUpResources() { } public void forceRefreshPlayer() { - // clearSrc(); + test(); + } + + private void test() { + isInBackground = true; + if (playInBackground) { + return; + } + setPlayWhenReady(false); } //BandwidthMeter.EventListener implementation