bitmovin-player-react-native 1.9.0 → 1.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/.eslintrc.js +11 -0
  2. package/CHANGELOG.md +25 -0
  3. package/android/build.gradle +2 -2
  4. package/android/src/main/java/com/bitmovin/player/reactnative/RNPlayerViewManager.kt +35 -1
  5. package/android/src/main/java/com/bitmovin/player/reactnative/converter/JsonConverter.kt +47 -28
  6. package/build/advertising.d.ts +3 -3
  7. package/build/advertising.js.map +1 -1
  8. package/build/components/PlayerView/events.d.ts +7 -1
  9. package/build/components/PlayerView/events.d.ts.map +1 -1
  10. package/build/components/PlayerView/events.js.map +1 -1
  11. package/build/components/PlayerView/index.d.ts.map +1 -1
  12. package/build/components/PlayerView/index.js +3 -3
  13. package/build/components/PlayerView/index.js.map +1 -1
  14. package/build/components/PlayerView/nativeEvents.d.ts +9 -1
  15. package/build/components/PlayerView/nativeEvents.d.ts.map +1 -1
  16. package/build/components/PlayerView/nativeEvents.js.map +1 -1
  17. package/build/drm/fairplayDrmApi.d.ts +21 -0
  18. package/build/drm/fairplayDrmApi.d.ts.map +1 -0
  19. package/build/drm/fairplayDrmApi.js +30 -0
  20. package/build/drm/fairplayDrmApi.js.map +1 -0
  21. package/build/drm/index.d.ts +9 -1
  22. package/build/drm/index.d.ts.map +1 -1
  23. package/build/drm/index.js +13 -0
  24. package/build/drm/index.js.map +1 -1
  25. package/build/events.d.ts +37 -3
  26. package/build/events.d.ts.map +1 -1
  27. package/build/events.js.map +1 -1
  28. package/build/metadata.d.ts.map +1 -1
  29. package/build/metadata.js.map +1 -1
  30. package/build/modules/SourceModule.d.ts +6 -0
  31. package/build/modules/SourceModule.d.ts.map +1 -1
  32. package/build/modules/SourceModule.js.map +1 -1
  33. package/build/network/index.js +4 -12
  34. package/build/network/index.js.map +1 -1
  35. package/build/offline/offlineContentManager.js +1 -1
  36. package/build/offline/offlineContentManager.js.map +1 -1
  37. package/build/offline/offlineContentManagerListener.d.ts.map +1 -1
  38. package/build/offline/offlineContentManagerListener.js.map +1 -1
  39. package/build/player.js +24 -24
  40. package/build/player.js.map +1 -1
  41. package/build/source.d.ts +6 -3
  42. package/build/source.d.ts.map +1 -1
  43. package/build/source.js +8 -5
  44. package/build/source.js.map +1 -1
  45. package/build/tweaksConfig.d.ts +8 -0
  46. package/build/tweaksConfig.d.ts.map +1 -1
  47. package/build/tweaksConfig.js.map +1 -1
  48. package/build/ui/custommessagehandlerbridge.d.ts.map +1 -1
  49. package/build/ui/custommessagehandlerbridge.js +4 -4
  50. package/build/ui/custommessagehandlerbridge.js.map +1 -1
  51. package/build/ui/fullscreenhandlerbridge.js +5 -5
  52. package/build/ui/fullscreenhandlerbridge.js.map +1 -1
  53. package/ios/Event+JSON.swift +20 -1
  54. package/ios/FairplayContentKeyRequestRegistry.swift +39 -0
  55. package/ios/NetworkModule.swift +1 -0
  56. package/ios/PlayerModule.swift +3 -3
  57. package/ios/RCTConvert+BitmovinPlayer.swift +1 -0
  58. package/ios/RNBitmovinPlayer.podspec +1 -1
  59. package/ios/RNPlayerView.swift +5 -0
  60. package/ios/RNPlayerViewManager.swift +2 -1
  61. package/ios/SourceModule.swift +24 -0
  62. package/package.json +2 -2
  63. package/src/advertising.ts +3 -3
  64. package/src/components/PlayerView/events.ts +7 -0
  65. package/src/components/PlayerView/index.tsx +3 -2
  66. package/src/components/PlayerView/nativeEvents.ts +9 -0
  67. package/src/drm/fairplayDrmApi.ts +36 -0
  68. package/src/drm/index.ts +14 -2
  69. package/src/events.ts +40 -3
  70. package/src/metadata.ts +2 -4
  71. package/src/modules/SourceModule.ts +10 -0
  72. package/src/network/index.ts +12 -12
  73. package/src/offline/offlineContentManager.ts +1 -1
  74. package/src/offline/offlineContentManagerListener.ts +3 -6
  75. package/src/player.ts +24 -24
  76. package/src/source.ts +9 -6
  77. package/src/tweaksConfig.ts +8 -0
  78. package/src/ui/custommessagehandlerbridge.ts +7 -4
  79. package/src/ui/fullscreenhandlerbridge.ts +5 -5
package/src/source.ts CHANGED
@@ -154,9 +154,12 @@ export interface SourceRemoteControlConfig {
154
154
  */
155
155
  export class Source extends NativeInstance<SourceConfig> {
156
156
  /**
157
- * The native DRM config reference of this source.
157
+ * Provides access to DRM runtime APIs for this source.
158
+ * Use `drm.fairplay` to access {@link FairplayDrmApi} for FairPlay-specific APIs such as {@link FairplayDrmApi.renewExpiringLicense}.
159
+ *
160
+ * `undefined` if the source was created without a {@link DrmConfig}.
158
161
  */
159
- private drm?: Drm;
162
+ drm?: Drm;
160
163
  /**
161
164
  * The remote control config for this source.
162
165
  * This is only supported on iOS.
@@ -180,7 +183,7 @@ export class Source extends NativeInstance<SourceConfig> {
180
183
  if (!this.isInitialized) {
181
184
  const sourceMetadata = this.config?.analyticsSourceMetadata;
182
185
  if (this.config?.drmConfig) {
183
- this.drm = new Drm(this.config.drmConfig);
186
+ this.drm = new Drm(this.config.drmConfig, this.nativeId);
184
187
  await this.drm.initialize();
185
188
  }
186
189
  if (sourceMetadata) {
@@ -209,8 +212,8 @@ export class Source extends NativeInstance<SourceConfig> {
209
212
  */
210
213
  destroy = () => {
211
214
  if (!this.isDestroyed) {
212
- SourceModule.destroy(this.nativeId);
213
- this.drm?.destroy();
215
+ void SourceModule.destroy(this.nativeId);
216
+ void this.drm?.destroy();
214
217
  this.isDestroyed = true;
215
218
  }
216
219
  };
@@ -252,7 +255,7 @@ export class Source extends NativeInstance<SourceConfig> {
252
255
  * @param metadata metadata to be set.
253
256
  */
254
257
  setMetadata = (metadata: Record<string, any> | null): void => {
255
- SourceModule.setMetadata(this.nativeId, metadata);
258
+ void SourceModule.setMetadata(this.nativeId, metadata);
256
259
  };
257
260
 
258
261
  /**
@@ -166,6 +166,14 @@ export interface TweaksConfig {
166
166
  * @platform Android
167
167
  */
168
168
  useFiletypeExtractorFallbackForHls?: boolean;
169
+ /**
170
+ * If enabled, the player will retry renewing a DRM license in case the first renewal attempt fails.
171
+ * This can help maintain playback for long-running sessions where the license might expire.
172
+ *
173
+ * @defaultValue `false`
174
+ * @platform Android
175
+ */
176
+ enableDrmLicenseRenewRetry?: boolean;
169
177
  /**
170
178
  * Determines whether `AVKit` should update Now Playing information automatically when using System UI.
171
179
  *
@@ -42,7 +42,7 @@ export class CustomMessageHandlerBridge implements CustomMessageSender {
42
42
  }
43
43
  );
44
44
 
45
- CustomMessageHandlerModule.registerHandler(this.nativeId);
45
+ void CustomMessageHandlerModule.registerHandler(this.nativeId);
46
46
  }
47
47
 
48
48
  setCustomMessageHandler(customMessageHandler: CustomMessageHandler) {
@@ -55,7 +55,7 @@ export class CustomMessageHandlerBridge implements CustomMessageSender {
55
55
  */
56
56
  destroy() {
57
57
  if (!this.isDestroyed) {
58
- CustomMessageHandlerModule.destroy(this.nativeId);
58
+ void CustomMessageHandlerModule.destroy(this.nativeId);
59
59
  this.onReceivedSynchronousMessageSubscription?.remove();
60
60
  this.onReceivedAsynchronousMessageSubscription?.remove();
61
61
  this.onReceivedSynchronousMessageSubscription = undefined;
@@ -77,7 +77,10 @@ export class CustomMessageHandlerBridge implements CustomMessageSender {
77
77
  message,
78
78
  data
79
79
  );
80
- CustomMessageHandlerModule.onReceivedSynchronousMessageResult(id, result);
80
+ void CustomMessageHandlerModule.onReceivedSynchronousMessageResult(
81
+ id,
82
+ result
83
+ );
81
84
  }
82
85
 
83
86
  /**
@@ -96,6 +99,6 @@ export class CustomMessageHandlerBridge implements CustomMessageSender {
96
99
  * Called by CustomMessageHandler, when sending a message to the UI.
97
100
  */
98
101
  sendMessage(message: string, data: string | undefined): void {
99
- CustomMessageHandlerModule.sendMessage(this.nativeId, message, data);
102
+ void CustomMessageHandlerModule.sendMessage(this.nativeId, message, data);
100
103
  }
101
104
  }
@@ -36,7 +36,7 @@ export class FullscreenHandlerBridge {
36
36
  this.exitFullscreen(id);
37
37
  }
38
38
  );
39
- FullscreenHandlerModule.registerHandler(this.nativeId);
39
+ void FullscreenHandlerModule.registerHandler(this.nativeId);
40
40
  }
41
41
 
42
42
  setFullscreenHandler(fullscreenHandler: FullscreenHandler | undefined) {
@@ -47,7 +47,7 @@ export class FullscreenHandlerBridge {
47
47
  this.fullscreenHandler = fullscreenHandler;
48
48
 
49
49
  // synchronize current state from fullscreenHandler to native
50
- FullscreenHandlerModule.setIsFullscreenActive(
50
+ void FullscreenHandlerModule.setIsFullscreenActive(
51
51
  this.nativeId,
52
52
  fullscreenHandler?.isFullscreenActive ?? false
53
53
  );
@@ -58,7 +58,7 @@ export class FullscreenHandlerBridge {
58
58
  */
59
59
  destroy() {
60
60
  if (!this.isDestroyed) {
61
- FullscreenHandlerModule.destroy(this.nativeId);
61
+ void FullscreenHandlerModule.destroy(this.nativeId);
62
62
  this.onEnterFullScreenSubscription?.remove();
63
63
  this.onExitFullScreenSubscription?.remove();
64
64
  this.onEnterFullScreenSubscription = undefined;
@@ -73,7 +73,7 @@ export class FullscreenHandlerBridge {
73
73
  */
74
74
  private enterFullscreen(id: number): void {
75
75
  this.fullscreenHandler?.enterFullscreen();
76
- FullscreenHandlerModule.notifyFullscreenChanged(
76
+ void FullscreenHandlerModule.notifyFullscreenChanged(
77
77
  id,
78
78
  this.fullscreenHandler?.isFullscreenActive ?? false
79
79
  );
@@ -85,7 +85,7 @@ export class FullscreenHandlerBridge {
85
85
  */
86
86
  private exitFullscreen(id: number): void {
87
87
  this.fullscreenHandler?.exitFullscreen();
88
- FullscreenHandlerModule.notifyFullscreenChanged(
88
+ void FullscreenHandlerModule.notifyFullscreenChanged(
89
89
  id,
90
90
  this.fullscreenHandler?.isFullscreenActive ?? false
91
91
  );