react-native-spalla-player 0.8.0 → 0.9.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.
package/README.md CHANGED
@@ -79,6 +79,16 @@ const [subtitle, setSubtitle] = React.useState<String | null>('pt-br');
79
79
  case 'subtitlesAvailable':
80
80
  console.log('subtitlesAvailable', nativeEvent.subtitles);
81
81
  break;
82
+ case 'playbackRateSelected':
83
+ setPlaybackRate(nativeEvent.rate);
84
+ break;
85
+ case 'metadataLoaded':
86
+ console.log(
87
+ 'metadataLoaded',
88
+ nativeEvent.isLive,
89
+ nativeEvent.duration
90
+ );
91
+ break;
82
92
  default:
83
93
  console.log('event', nativeEvent.event);
84
94
  }
@@ -113,6 +123,7 @@ const [subtitle, setSubtitle] = React.useState<String | null>('pt-br');
113
123
  | **`startTime`** | number | time to start the video in seconds (defaults to 0 = start of the video)
114
124
  | **`onPlayerEvent`**| callback | Function that will be called with player events
115
125
  | **`subtitle`** | string | subtitle to enable. Null will hide subtitles
126
+ | **`playbackRate`** | number | Playback speed. Allowed values are 0.5, 1.0, 1.5 and 2.0
116
127
 
117
128
  ## Imperative Methods
118
129
 
@@ -104,7 +104,7 @@ dependencies {
104
104
  implementation "com.facebook.react:react-native:+"
105
105
  implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
106
106
  implementation "androidx.mediarouter:mediarouter:1.2.0"
107
- implementation "stream.spalla:spalla-android-sdk:1.7.0"
107
+ implementation "stream.spalla:spalla-android-sdk:1.8.0"
108
108
  implementation "com.google.android.gms:play-services-cast-framework:21.3.0"
109
109
  }
110
110
 
@@ -39,8 +39,23 @@ class SpallaPlayerModule(reactContext: ReactApplicationContext) :
39
39
 
40
40
  @ReactMethod
41
41
  fun play(tag: Int) {
42
- _reactContext.getNativeModule(UIManagerModule::class.java)!!
43
- .prependUIBlock { nativeViewHierarchyManager: NativeViewHierarchyManager ->
42
+ if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
43
+ val uiManager = UIManagerHelper.getUIManager(_reactContext, UIManagerType.FABRIC)
44
+ if (uiManager is UIManager) {
45
+ uiManager.resolveView(tag)?.let { view ->
46
+ if (view is SpallaPlayerView) {
47
+ view.play()
48
+ } else {
49
+ throw ClassCastException(
50
+ "Cannot play: view with tag #$tag is not a SpallaPlayerView"
51
+ )
52
+ }
53
+ }
54
+ }
55
+ } else {
56
+ val uiManager: UIManagerModule? =
57
+ _reactContext.getNativeModule(UIManagerModule::class.java)
58
+ uiManager?.prependUIBlock { nativeViewHierarchyManager: NativeViewHierarchyManager ->
44
59
  val playerView = nativeViewHierarchyManager.resolveView(tag)
45
60
  if (playerView is SpallaPlayerView) {
46
61
  playerView.play()
@@ -53,11 +68,11 @@ class SpallaPlayerModule(reactContext: ReactApplicationContext) :
53
68
  )
54
69
  }
55
70
  }
71
+ }
56
72
  }
57
73
 
58
74
  @ReactMethod
59
75
  fun pause(tag: Int) {
60
-
61
76
  if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
62
77
  val uiManager = UIManagerHelper.getUIManager(_reactContext, UIManagerType.FABRIC)
63
78
  if (uiManager is UIManager) {
@@ -128,6 +143,24 @@ class SpallaPlayerModule(reactContext: ReactApplicationContext) :
128
143
  }
129
144
  }
130
145
 
146
+ @ReactMethod
147
+ fun selectPlaybackRate(tag: Int, rate: Double) {
148
+ _reactContext.getNativeModule(UIManagerModule::class.java)!!
149
+ .prependUIBlock { nativeViewHierarchyManager: NativeViewHierarchyManager ->
150
+ val playerView = nativeViewHierarchyManager.resolveView(tag)
151
+ if (playerView is SpallaPlayerView) {
152
+ playerView.selectPlaybackRate(rate)
153
+ } else {
154
+ throw ClassCastException(
155
+ String.format(
156
+ "Cannot play: view with tag #%d is not a SpallaPplayerView",
157
+ tag
158
+ )
159
+ )
160
+ }
161
+ }
162
+ }
163
+
131
164
  @ReactMethod
132
165
  fun initialize(token: String, applicationId: String?) {
133
166
  SpallaSDK.initialize(_reactContext, token)
@@ -27,6 +27,7 @@ class RNSpallaPlayerManager() : SimpleViewManager<SpallaPlayerView>(), SpallaPla
27
27
  private var startTime: Double? = null
28
28
  private var subtitle: String? = null
29
29
  private var loadTimer: Timer? = null
30
+ private var playbackRate: Double = 1.0
30
31
 
31
32
  override fun getName() = "RNSpallaPlayer"
32
33
 
@@ -85,6 +86,14 @@ class RNSpallaPlayerManager() : SimpleViewManager<SpallaPlayerView>(), SpallaPla
85
86
  _playerView?.selectSubtitle(subtitle)
86
87
  }
87
88
 
89
+ @ReactProp(name = "playbackRate")
90
+ fun setPlaybackRate(view: SpallaPlayerView, playbackRate: Double) {
91
+ if(playbackRate > 0) {
92
+ this.playbackRate = playbackRate
93
+ _playerView?.selectPlaybackRate(playbackRate)
94
+ }
95
+ }
96
+
88
97
  private fun checkAndLoadPlayer(view: SpallaPlayerView) {
89
98
  if (contentId != null && startTime != null) {
90
99
  view.load(contentId!!, false, true, startTime!!)
@@ -141,6 +150,19 @@ class RNSpallaPlayerManager() : SimpleViewManager<SpallaPlayerView>(), SpallaPla
141
150
  map.putString("event", "subtitleSelected")
142
151
  map.putString("subtitle", spallaPlayerEvent.subtitle)
143
152
  }
153
+ is MetadataLoaded -> {
154
+ map.putString("event", "metadataLoaded")
155
+ map.putBoolean("isLive", spallaPlayerEvent.metadata.isLive)
156
+ map.putDouble("duration", spallaPlayerEvent.metadata.duration)
157
+
158
+ // make sure current playback rate is applied if set initially
159
+ _playerView?.selectPlaybackRate(playbackRate)
160
+ }
161
+ is PlaybackRateSelected -> {
162
+ map.putString("event", "playbackRateSelected")
163
+ map.putDouble("rate", spallaPlayerEvent.rate)
164
+ }
165
+
144
166
  }
145
167
  _playerView?.let { player ->
146
168
  _reactContext?.getJSModule(RCTEventEmitter::class.java)?.receiveEvent(
@@ -151,11 +173,4 @@ class RNSpallaPlayerManager() : SimpleViewManager<SpallaPlayerView>(), SpallaPla
151
173
  }
152
174
  }
153
175
 
154
-
155
- // Expose a method to set the current subtitle track
156
- fun setSubtitleTrack(view: SpallaPlayerView, trackId: String) {
157
- //check if current trackId exists
158
-
159
- //view.setSubtitleTrack(trackId)
160
- }
161
176
  }
@@ -15,6 +15,8 @@ RCT_EXPORT_VIEW_PROPERTY(startTime, NSNumber)
15
15
 
16
16
  RCT_EXPORT_VIEW_PROPERTY(subtitle, NSString)
17
17
 
18
+ RCT_EXPORT_VIEW_PROPERTY(playbackRate, NSNumber)
19
+
18
20
  RCT_EXPORT_METHOD(play: (nonnull NSNumber *) reactTag {
19
21
 
20
22
  [self.bridge.uiManager addUIBlock:^(RCTUIManager *uiManager, NSDictionary<NSNumber *,UIView *> *viewRegistry) {
@@ -65,6 +67,18 @@ RCT_EXPORT_METHOD(selectSubtitle: (nonnull NSNumber *) reactTag subtitle:(NSStri
65
67
  }];
66
68
  }
67
69
 
70
+ RCT_EXPORT_METHOD(selectPlaybackRate: (nonnull NSNumber *) reactTag rate:(NSNumber *)rate) {
71
+ [self.bridge.uiManager addUIBlock:^(RCTUIManager *uiManager, NSDictionary<NSNumber *,UIView *> *viewRegistry) {
72
+ UIView *view = viewRegistry[reactTag];
73
+ if (!view || ![view isKindOfClass:[SpallaPlayerWrapper class]]) {
74
+ RCTLogError(@"Cannot find NativeView with tag #%@", reactTag);
75
+ return;
76
+ } else {
77
+ [(SpallaPlayerWrapper *)view selectPlaybackRate: rate.doubleValue];
78
+ }
79
+ }];
80
+ }
81
+
68
82
  RCT_EXPORT_METHOD(initialize: (nonnull NSString *) token: (NSString *) applicationId) {
69
83
  dispatch_async(dispatch_get_main_queue(), ^{
70
84
  [SpallaPlayerWrapper initializeWithToken: token applicationId: applicationId];
@@ -49,6 +49,12 @@ import SpallaSDK
49
49
  viewController.selectSubtitle(subtitle: subtitle)
50
50
  }
51
51
  }
52
+
53
+ @objc var playbackRate: NSNumber = 1.0 {
54
+ didSet {
55
+ viewController.setPlaybackRate(rate: playbackRate.doubleValue)
56
+ }
57
+ }
52
58
 
53
59
  @objc var onPlayerEvent: RCTBubblingEventBlock?
54
60
 
@@ -104,6 +110,10 @@ import SpallaSDK
104
110
  viewController.selectSubtitle(subtitle: subtitle)
105
111
  }
106
112
 
113
+ @objc public func selectPlaybackRate(_ rate: Double) {
114
+ viewController.setPlaybackRate(rate: rate)
115
+ }
116
+
107
117
  private func updateMutedState() {
108
118
  viewController.mute()
109
119
  if muted {
@@ -154,6 +164,10 @@ extension SpallaPlayerWrapper: SpallaPlayerListener {
154
164
  onPlayerEvent(["event": "subtitlesAvailable", "subtitles": subtitles])
155
165
  case .subtitleSelected(let subtitle):
156
166
  onPlayerEvent(["event": "subtitleSelected", "subtitle": subtitle != nil ? subtitle! : NSNull()])
167
+ case .metadataLoaded(let metadata):
168
+ onPlayerEvent(["event": "metadataLoaded", "isLive": metadata.isLive, "duration": metadata.duration])
169
+ case .playbackRateChanged(let rate):
170
+ onPlayerEvent(["event": "playbackRateSelected", "rate": rate])
157
171
  @unknown default:
158
172
  break
159
173
  }
@@ -42,13 +42,15 @@ class SpallaPlayer extends _react.default.Component {
42
42
  render() {
43
43
  const {
44
44
  style,
45
- startTime
45
+ startTime,
46
+ playbackRate
46
47
  } = this.props;
47
48
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(RNSpallaPlayer, {
48
49
  ...this.props,
49
50
  ref: this._setRef,
50
51
  style: style,
51
52
  startTime: startTime ?? 0,
53
+ playbackRate: playbackRate ?? 1.0,
52
54
  children: this.props.children
53
55
  });
54
56
  }
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_jsxRuntime","_CastButton","e","__esModule","default","RNSpallaPlayer","requireNativeComponent","RNSpallaPlayerModule","NativeModules","play","ref","handle","findNodeHandle","exports","pause","seekTo","time","SpallaPlayer","React","Component","_player","_setRef","render","style","startTime","props","jsx","children","initialize","token","applicationId","_default"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;;;;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAKsB,IAAAE,WAAA,GAAAF,OAAA;AAuHtB,IAAAG,WAAA,GAAAJ,sBAAA,CAAAC,OAAA;AAAsE,SAAAD,uBAAAK,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AA7GtE,MAAMG,cAAc,GAClB,IAAAC,mCAAsB,EAAsB,gBAAgB,CAAC;AAE/D,MAAMC,oBAAoB,GAAGC,0BAAa,CAACH,cAAc;AAmDlD,MAAMI,IAAI,GAAIC,GAAQ,IAAK;EAChC,MAAMC,MAAM,GAAG,IAAAC,2BAAc,EAACF,GAAG,CAAC;EAClCH,oBAAoB,CAACE,IAAI,CAACE,MAAM,CAAC;AACnC,CAAC;AAACE,OAAA,CAAAJ,IAAA,GAAAA,IAAA;AAEK,MAAMK,KAAK,GAAIJ,GAAQ,IAAK;EACjC,MAAMC,MAAM,GAAG,IAAAC,2BAAc,EAACF,GAAG,CAAC;EAClCH,oBAAoB,CAACO,KAAK,CAACH,MAAM,CAAC;AACpC,CAAC;AAACE,OAAA,CAAAC,KAAA,GAAAA,KAAA;AAEK,MAAMC,MAAM,GAAGA,CAACL,GAAQ,EAAEM,IAAY,KAAK;EAChD,MAAML,MAAM,GAAG,IAAAC,2BAAc,EAACF,GAAG,CAAC;EAClCH,oBAAoB,CAACQ,MAAM,CAACJ,MAAM,EAAEK,IAAI,CAAC;AAC3C,CAAC;;AAED;AAAAH,OAAA,CAAAE,MAAA,GAAAA,MAAA;AAEA,MAAME,YAAY,SAASC,cAAK,CAACC,SAAS,CAAQ;EAChDC,OAAO,GAAG,IAAI;EAEdC,OAAO,GAAIX,GAAQ,IAAK;IACtB,IAAI,CAACU,OAAO,GAAGV,GAAG;EACpB,CAAC;EAEDY,MAAMA,CAAA,EAAG;IACP,MAAM;MAAEC,KAAK;MAAEC;IAAU,CAAC,GAAG,IAAI,CAACC,KAAK;IAEvC,oBACE,IAAAzB,WAAA,CAAA0B,GAAA,EAACrB,cAAc;MAAA,GACT,IAAI,CAACoB,KAAK;MACdf,GAAG,EAAE,IAAI,CAACW,OAAQ;MAClBE,KAAK,EAAEA,KAAM;MACbC,SAAS,EAAEA,SAAS,IAAI,CAAE;MAAAG,QAAA,EAEzB,IAAI,CAACF,KAAK,CAACE;IAAQ,CACN,CAAC;EAErB;EAEAlB,IAAI,GAAGA,CAAA,KAAM;IACX,MAAME,MAAM,GAAG,IAAAC,2BAAc,EAAC,IAAI,CAACQ,OAAO,CAAC;IAC3Cb,oBAAoB,CAACE,IAAI,CAACE,MAAM,CAAC;EACnC,CAAC;EAEDG,KAAK,GAAGA,CAAA,KAAM;IACZ,MAAMH,MAAM,GAAG,IAAAC,2BAAc,EAAC,IAAI,CAACQ,OAAO,CAAC;IAC3Cb,oBAAoB,CAACO,KAAK,CAACH,MAAM,CAAC;EACpC,CAAC;AACH;AAEO,MAAMiB,UAAU,GAAGA,CAACC,KAAa,EAAEC,aAA4B,KAAK;EACzEvB,oBAAoB,CAACqB,UAAU,CAACC,KAAK,EAAEC,aAAa,CAAC;AACvD,CAAC;AAACjB,OAAA,CAAAe,UAAA,GAAAA,UAAA;AAAA,IAAAG,QAAA,GAAAlB,OAAA,CAAAT,OAAA,GAEaa,YAAY","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_jsxRuntime","_CastButton","e","__esModule","default","RNSpallaPlayer","requireNativeComponent","RNSpallaPlayerModule","NativeModules","play","ref","handle","findNodeHandle","exports","pause","seekTo","time","SpallaPlayer","React","Component","_player","_setRef","render","style","startTime","playbackRate","props","jsx","children","initialize","token","applicationId","_default"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;;;;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAKsB,IAAAE,WAAA,GAAAF,OAAA;AA0ItB,IAAAG,WAAA,GAAAJ,sBAAA,CAAAC,OAAA;AAAsE,SAAAD,uBAAAK,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AA7HtE,MAAMG,cAAc,GAClB,IAAAC,mCAAsB,EAAsB,gBAAgB,CAAC;AAE/D,MAAMC,oBAAoB,GAAGC,0BAAa,CAACH,cAAc;AAkElD,MAAMI,IAAI,GAAIC,GAAQ,IAAK;EAChC,MAAMC,MAAM,GAAG,IAAAC,2BAAc,EAACF,GAAG,CAAC;EAClCH,oBAAoB,CAACE,IAAI,CAACE,MAAM,CAAC;AACnC,CAAC;AAACE,OAAA,CAAAJ,IAAA,GAAAA,IAAA;AAEK,MAAMK,KAAK,GAAIJ,GAAQ,IAAK;EACjC,MAAMC,MAAM,GAAG,IAAAC,2BAAc,EAACF,GAAG,CAAC;EAClCH,oBAAoB,CAACO,KAAK,CAACH,MAAM,CAAC;AACpC,CAAC;AAACE,OAAA,CAAAC,KAAA,GAAAA,KAAA;AAEK,MAAMC,MAAM,GAAGA,CAACL,GAAQ,EAAEM,IAAY,KAAK;EAChD,MAAML,MAAM,GAAG,IAAAC,2BAAc,EAACF,GAAG,CAAC;EAClCH,oBAAoB,CAACQ,MAAM,CAACJ,MAAM,EAAEK,IAAI,CAAC;AAC3C,CAAC;;AAED;AAAAH,OAAA,CAAAE,MAAA,GAAAA,MAAA;AAEA,MAAME,YAAY,SAASC,cAAK,CAACC,SAAS,CAAQ;EAChDC,OAAO,GAAG,IAAI;EAEdC,OAAO,GAAIX,GAAQ,IAAK;IACtB,IAAI,CAACU,OAAO,GAAGV,GAAG;EACpB,CAAC;EAEDY,MAAMA,CAAA,EAAG;IACP,MAAM;MAAEC,KAAK;MAAEC,SAAS;MAAEC;IAAa,CAAC,GAAG,IAAI,CAACC,KAAK;IAErD,oBACE,IAAA1B,WAAA,CAAA2B,GAAA,EAACtB,cAAc;MAAA,GACT,IAAI,CAACqB,KAAK;MACdhB,GAAG,EAAE,IAAI,CAACW,OAAQ;MAClBE,KAAK,EAAEA,KAAM;MACbC,SAAS,EAAEA,SAAS,IAAI,CAAE;MAC1BC,YAAY,EAAEA,YAAY,IAAI,GAAI;MAAAG,QAAA,EAEjC,IAAI,CAACF,KAAK,CAACE;IAAQ,CACN,CAAC;EAErB;EAEAnB,IAAI,GAAGA,CAAA,KAAM;IACX,MAAME,MAAM,GAAG,IAAAC,2BAAc,EAAC,IAAI,CAACQ,OAAO,CAAC;IAC3Cb,oBAAoB,CAACE,IAAI,CAACE,MAAM,CAAC;EACnC,CAAC;EAEDG,KAAK,GAAGA,CAAA,KAAM;IACZ,MAAMH,MAAM,GAAG,IAAAC,2BAAc,EAAC,IAAI,CAACQ,OAAO,CAAC;IAC3Cb,oBAAoB,CAACO,KAAK,CAACH,MAAM,CAAC;EACpC,CAAC;AACH;AAEO,MAAMkB,UAAU,GAAGA,CAACC,KAAa,EAAEC,aAA4B,KAAK;EACzExB,oBAAoB,CAACsB,UAAU,CAACC,KAAK,EAAEC,aAAa,CAAC;AACvD,CAAC;AAAClB,OAAA,CAAAgB,UAAA,GAAAA,UAAA;AAAA,IAAAG,QAAA,GAAAnB,OAAA,CAAAT,OAAA,GAEaa,YAAY","ignoreList":[]}
@@ -28,13 +28,15 @@ class SpallaPlayer extends React.Component {
28
28
  render() {
29
29
  const {
30
30
  style,
31
- startTime
31
+ startTime,
32
+ playbackRate
32
33
  } = this.props;
33
34
  return /*#__PURE__*/_jsx(RNSpallaPlayer, {
34
35
  ...this.props,
35
36
  ref: this._setRef,
36
37
  style: style,
37
38
  startTime: startTime ?? 0,
39
+ playbackRate: playbackRate ?? 1.0,
38
40
  children: this.props.children
39
41
  });
40
42
  }
@@ -1 +1 @@
1
- {"version":3,"names":["React","requireNativeComponent","NativeModules","findNodeHandle","jsx","_jsx","RNSpallaPlayer","RNSpallaPlayerModule","play","ref","handle","pause","seekTo","time","SpallaPlayer","Component","_player","_setRef","render","style","startTime","props","children","initialize","token","applicationId","default","SpallaCastButton"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SACEC,sBAAsB,EAEtBC,aAAa,EACbC,cAAc,QACT,cAAc;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAUtB,MAAMC,cAAc,GAClBL,sBAAsB,CAAsB,gBAAgB,CAAC;AAE/D,MAAMM,oBAAoB,GAAGL,aAAa,CAACI,cAAc;AAmDzD,OAAO,MAAME,IAAI,GAAIC,GAAQ,IAAK;EAChC,MAAMC,MAAM,GAAGP,cAAc,CAACM,GAAG,CAAC;EAClCF,oBAAoB,CAACC,IAAI,CAACE,MAAM,CAAC;AACnC,CAAC;AAED,OAAO,MAAMC,KAAK,GAAIF,GAAQ,IAAK;EACjC,MAAMC,MAAM,GAAGP,cAAc,CAACM,GAAG,CAAC;EAClCF,oBAAoB,CAACI,KAAK,CAACD,MAAM,CAAC;AACpC,CAAC;AAED,OAAO,MAAME,MAAM,GAAGA,CAACH,GAAQ,EAAEI,IAAY,KAAK;EAChD,MAAMH,MAAM,GAAGP,cAAc,CAACM,GAAG,CAAC;EAClCF,oBAAoB,CAACK,MAAM,CAACF,MAAM,EAAEG,IAAI,CAAC;AAC3C,CAAC;;AAED;;AAEA,MAAMC,YAAY,SAASd,KAAK,CAACe,SAAS,CAAQ;EAChDC,OAAO,GAAG,IAAI;EAEdC,OAAO,GAAIR,GAAQ,IAAK;IACtB,IAAI,CAACO,OAAO,GAAGP,GAAG;EACpB,CAAC;EAEDS,MAAMA,CAAA,EAAG;IACP,MAAM;MAAEC,KAAK;MAAEC;IAAU,CAAC,GAAG,IAAI,CAACC,KAAK;IAEvC,oBACEhB,IAAA,CAACC,cAAc;MAAA,GACT,IAAI,CAACe,KAAK;MACdZ,GAAG,EAAE,IAAI,CAACQ,OAAQ;MAClBE,KAAK,EAAEA,KAAM;MACbC,SAAS,EAAEA,SAAS,IAAI,CAAE;MAAAE,QAAA,EAEzB,IAAI,CAACD,KAAK,CAACC;IAAQ,CACN,CAAC;EAErB;EAEAd,IAAI,GAAGA,CAAA,KAAM;IACX,MAAME,MAAM,GAAGP,cAAc,CAAC,IAAI,CAACa,OAAO,CAAC;IAC3CT,oBAAoB,CAACC,IAAI,CAACE,MAAM,CAAC;EACnC,CAAC;EAEDC,KAAK,GAAGA,CAAA,KAAM;IACZ,MAAMD,MAAM,GAAGP,cAAc,CAAC,IAAI,CAACa,OAAO,CAAC;IAC3CT,oBAAoB,CAACI,KAAK,CAACD,MAAM,CAAC;EACpC,CAAC;AACH;AAEA,OAAO,MAAMa,UAAU,GAAGA,CAACC,KAAa,EAAEC,aAA4B,KAAK;EACzElB,oBAAoB,CAACgB,UAAU,CAACC,KAAK,EAAEC,aAAa,CAAC;AACvD,CAAC;AAED,eAAeX,YAAY;AAC3B,SAASY,OAAO,IAAIC,gBAAgB,QAAQ,4BAAyB","ignoreList":[]}
1
+ {"version":3,"names":["React","requireNativeComponent","NativeModules","findNodeHandle","jsx","_jsx","RNSpallaPlayer","RNSpallaPlayerModule","play","ref","handle","pause","seekTo","time","SpallaPlayer","Component","_player","_setRef","render","style","startTime","playbackRate","props","children","initialize","token","applicationId","default","SpallaCastButton"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SACEC,sBAAsB,EAEtBC,aAAa,EACbC,cAAc,QACT,cAAc;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAatB,MAAMC,cAAc,GAClBL,sBAAsB,CAAsB,gBAAgB,CAAC;AAE/D,MAAMM,oBAAoB,GAAGL,aAAa,CAACI,cAAc;AAkEzD,OAAO,MAAME,IAAI,GAAIC,GAAQ,IAAK;EAChC,MAAMC,MAAM,GAAGP,cAAc,CAACM,GAAG,CAAC;EAClCF,oBAAoB,CAACC,IAAI,CAACE,MAAM,CAAC;AACnC,CAAC;AAED,OAAO,MAAMC,KAAK,GAAIF,GAAQ,IAAK;EACjC,MAAMC,MAAM,GAAGP,cAAc,CAACM,GAAG,CAAC;EAClCF,oBAAoB,CAACI,KAAK,CAACD,MAAM,CAAC;AACpC,CAAC;AAED,OAAO,MAAME,MAAM,GAAGA,CAACH,GAAQ,EAAEI,IAAY,KAAK;EAChD,MAAMH,MAAM,GAAGP,cAAc,CAACM,GAAG,CAAC;EAClCF,oBAAoB,CAACK,MAAM,CAACF,MAAM,EAAEG,IAAI,CAAC;AAC3C,CAAC;;AAED;;AAEA,MAAMC,YAAY,SAASd,KAAK,CAACe,SAAS,CAAQ;EAChDC,OAAO,GAAG,IAAI;EAEdC,OAAO,GAAIR,GAAQ,IAAK;IACtB,IAAI,CAACO,OAAO,GAAGP,GAAG;EACpB,CAAC;EAEDS,MAAMA,CAAA,EAAG;IACP,MAAM;MAAEC,KAAK;MAAEC,SAAS;MAAEC;IAAa,CAAC,GAAG,IAAI,CAACC,KAAK;IAErD,oBACEjB,IAAA,CAACC,cAAc;MAAA,GACT,IAAI,CAACgB,KAAK;MACdb,GAAG,EAAE,IAAI,CAACQ,OAAQ;MAClBE,KAAK,EAAEA,KAAM;MACbC,SAAS,EAAEA,SAAS,IAAI,CAAE;MAC1BC,YAAY,EAAEA,YAAY,IAAI,GAAI;MAAAE,QAAA,EAEjC,IAAI,CAACD,KAAK,CAACC;IAAQ,CACN,CAAC;EAErB;EAEAf,IAAI,GAAGA,CAAA,KAAM;IACX,MAAME,MAAM,GAAGP,cAAc,CAAC,IAAI,CAACa,OAAO,CAAC;IAC3CT,oBAAoB,CAACC,IAAI,CAACE,MAAM,CAAC;EACnC,CAAC;EAEDC,KAAK,GAAGA,CAAA,KAAM;IACZ,MAAMD,MAAM,GAAGP,cAAc,CAAC,IAAI,CAACa,OAAO,CAAC;IAC3CT,oBAAoB,CAACI,KAAK,CAACD,MAAM,CAAC;EACpC,CAAC;AACH;AAEA,OAAO,MAAMc,UAAU,GAAGA,CAACC,KAAa,EAAEC,aAA4B,KAAK;EACzEnB,oBAAoB,CAACiB,UAAU,CAACC,KAAK,EAAEC,aAAa,CAAC;AACvD,CAAC;AAED,eAAeZ,YAAY;AAC3B,SAASa,OAAO,IAAIC,gBAAgB,QAAQ,4BAAyB","ignoreList":[]}
@@ -1,5 +1,6 @@
1
1
  import React from 'react';
2
2
  import { type ViewStyle } from 'react-native';
3
+ type allowedPlaybackRates = 0.25 | 0.5 | 1.0 | 1.25 | 1.5 | 2.0;
3
4
  interface PlayerEventTimeUpdate {
4
5
  event: 'timeUpdate';
5
6
  time: number;
@@ -16,6 +17,15 @@ interface PlayerEventSubtitleSelected {
16
17
  event: 'subtitleSelected';
17
18
  subtitle: String;
18
19
  }
20
+ interface PlayerEventPlaybackRateSelected {
21
+ event: 'playbackRateSelected';
22
+ rate: allowedPlaybackRates;
23
+ }
24
+ interface PlayerEventMedataLoaded {
25
+ event: 'metadataLoaded';
26
+ isLive: boolean;
27
+ duration: number;
28
+ }
19
29
  interface PlayerEvent {
20
30
  event: 'play' | 'pause' | 'ended' | 'muted' | 'unmuted' | 'buffering' | 'playing';
21
31
  }
@@ -28,8 +38,9 @@ interface Props {
28
38
  autoplay?: boolean;
29
39
  startTime?: number;
30
40
  subtitle?: String | null;
41
+ playbackRate?: 0.25 | 0.5 | 1.0 | 1.25 | 1.5 | 2.0;
31
42
  onPlayerEvent?: (event: {
32
- nativeEvent: PlayerEventTimeUpdate | PlayerEvent | PlayerEventDurationUpdate | PlayerEventSubtitlesAvailable | PlayerEventSubtitleSelected;
43
+ nativeEvent: PlayerEventTimeUpdate | PlayerEvent | PlayerEventDurationUpdate | PlayerEventSubtitlesAvailable | PlayerEventSubtitleSelected | PlayerEventPlaybackRateSelected | PlayerEventMedataLoaded;
33
44
  }) => void;
34
45
  }
35
46
  export declare const play: (ref: any) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAEL,KAAK,SAAS,EAGf,MAAM,cAAc,CAAC;AAetB,UAAU,qBAAqB;IAC7B,KAAK,EAAE,YAAY,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,UAAU,yBAAyB;IACjC,KAAK,EAAE,gBAAgB,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,6BAA6B;IACrC,KAAK,EAAE,oBAAoB,CAAC;IAC5B,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;CAC1B;AAED,UAAU,2BAA2B;IACnC,KAAK,EAAE,kBAAkB,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;CAClB;AACD,UAAU,WAAW;IACnB,KAAK,EACD,MAAM,GACN,OAAO,GACP,OAAO,GACP,OAAO,GACP,SAAS,GACT,WAAW,GACX,SAAS,CAAC;CACf;AAED,UAAU,KAAK;IACb,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE;QACtB,WAAW,EACP,qBAAqB,GACrB,WAAW,GACX,yBAAyB,GACzB,6BAA6B,GAC7B,2BAA2B,CAAC;KACjC,KAAK,IAAI,CAAC;CACZ;AAED,eAAO,MAAM,IAAI,QAAS,GAAG,SAG5B,CAAC;AAEF,eAAO,MAAM,KAAK,QAAS,GAAG,SAG7B,CAAC;AAEF,eAAO,MAAM,MAAM,QAAS,GAAG,QAAQ,MAAM,SAG5C,CAAC;AAIF,cAAM,YAAa,SAAQ,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC;IAC/C,OAAO,OAAQ;IAEf,OAAO,QAAS,GAAG,UAEjB;IAEF,MAAM;IAeN,IAAI,aAGF;IAEF,KAAK,aAGH;CACH;AAED,eAAO,MAAM,UAAU,UAAW,MAAM,iBAAiB,MAAM,GAAG,IAAI,SAErE,CAAC;AAEF,eAAe,YAAY,CAAC;AAC5B,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAEL,KAAK,SAAS,EAGf,MAAM,cAAc,CAAC;AAEtB,KAAK,oBAAoB,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAgBhE,UAAU,qBAAqB;IAC7B,KAAK,EAAE,YAAY,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,UAAU,yBAAyB;IACjC,KAAK,EAAE,gBAAgB,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,6BAA6B;IACrC,KAAK,EAAE,oBAAoB,CAAC;IAC5B,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;CAC1B;AAED,UAAU,2BAA2B;IACnC,KAAK,EAAE,kBAAkB,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,+BAA+B;IACvC,KAAK,EAAE,sBAAsB,CAAC;IAC9B,IAAI,EAAE,oBAAoB,CAAC;CAC5B;AAED,UAAU,uBAAuB;IAC/B,KAAK,EAAE,gBAAgB,CAAC;IACxB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,WAAW;IACnB,KAAK,EACD,MAAM,GACN,OAAO,GACP,OAAO,GACP,OAAO,GACP,SAAS,GACT,WAAW,GACX,SAAS,CAAC;CACf;AAED,UAAU,KAAK;IACb,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;IACnD,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE;QACtB,WAAW,EACP,qBAAqB,GACrB,WAAW,GACX,yBAAyB,GACzB,6BAA6B,GAC7B,2BAA2B,GAC3B,+BAA+B,GAC/B,uBAAuB,CAAC;KAC7B,KAAK,IAAI,CAAC;CACZ;AAED,eAAO,MAAM,IAAI,QAAS,GAAG,SAG5B,CAAC;AAEF,eAAO,MAAM,KAAK,QAAS,GAAG,SAG7B,CAAC;AAEF,eAAO,MAAM,MAAM,QAAS,GAAG,QAAQ,MAAM,SAG5C,CAAC;AAIF,cAAM,YAAa,SAAQ,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC;IAC/C,OAAO,OAAQ;IAEf,OAAO,QAAS,GAAG,UAEjB;IAEF,MAAM;IAgBN,IAAI,aAGF;IAEF,KAAK,aAGH;CACH;AAED,eAAO,MAAM,UAAU,UAAW,MAAM,iBAAiB,MAAM,GAAG,IAAI,SAErE,CAAC;AAEF,eAAe,YAAY,CAAC;AAC5B,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,yBAAyB,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import React from 'react';
2
2
  import { type ViewStyle } from 'react-native';
3
+ type allowedPlaybackRates = 0.25 | 0.5 | 1.0 | 1.25 | 1.5 | 2.0;
3
4
  interface PlayerEventTimeUpdate {
4
5
  event: 'timeUpdate';
5
6
  time: number;
@@ -16,6 +17,15 @@ interface PlayerEventSubtitleSelected {
16
17
  event: 'subtitleSelected';
17
18
  subtitle: String;
18
19
  }
20
+ interface PlayerEventPlaybackRateSelected {
21
+ event: 'playbackRateSelected';
22
+ rate: allowedPlaybackRates;
23
+ }
24
+ interface PlayerEventMedataLoaded {
25
+ event: 'metadataLoaded';
26
+ isLive: boolean;
27
+ duration: number;
28
+ }
19
29
  interface PlayerEvent {
20
30
  event: 'play' | 'pause' | 'ended' | 'muted' | 'unmuted' | 'buffering' | 'playing';
21
31
  }
@@ -28,8 +38,9 @@ interface Props {
28
38
  autoplay?: boolean;
29
39
  startTime?: number;
30
40
  subtitle?: String | null;
41
+ playbackRate?: 0.25 | 0.5 | 1.0 | 1.25 | 1.5 | 2.0;
31
42
  onPlayerEvent?: (event: {
32
- nativeEvent: PlayerEventTimeUpdate | PlayerEvent | PlayerEventDurationUpdate | PlayerEventSubtitlesAvailable | PlayerEventSubtitleSelected;
43
+ nativeEvent: PlayerEventTimeUpdate | PlayerEvent | PlayerEventDurationUpdate | PlayerEventSubtitlesAvailable | PlayerEventSubtitleSelected | PlayerEventPlaybackRateSelected | PlayerEventMedataLoaded;
33
44
  }) => void;
34
45
  }
35
46
  export declare const play: (ref: any) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAEL,KAAK,SAAS,EAGf,MAAM,cAAc,CAAC;AAetB,UAAU,qBAAqB;IAC7B,KAAK,EAAE,YAAY,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,UAAU,yBAAyB;IACjC,KAAK,EAAE,gBAAgB,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,6BAA6B;IACrC,KAAK,EAAE,oBAAoB,CAAC;IAC5B,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;CAC1B;AAED,UAAU,2BAA2B;IACnC,KAAK,EAAE,kBAAkB,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;CAClB;AACD,UAAU,WAAW;IACnB,KAAK,EACD,MAAM,GACN,OAAO,GACP,OAAO,GACP,OAAO,GACP,SAAS,GACT,WAAW,GACX,SAAS,CAAC;CACf;AAED,UAAU,KAAK;IACb,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE;QACtB,WAAW,EACP,qBAAqB,GACrB,WAAW,GACX,yBAAyB,GACzB,6BAA6B,GAC7B,2BAA2B,CAAC;KACjC,KAAK,IAAI,CAAC;CACZ;AAED,eAAO,MAAM,IAAI,QAAS,GAAG,SAG5B,CAAC;AAEF,eAAO,MAAM,KAAK,QAAS,GAAG,SAG7B,CAAC;AAEF,eAAO,MAAM,MAAM,QAAS,GAAG,QAAQ,MAAM,SAG5C,CAAC;AAIF,cAAM,YAAa,SAAQ,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC;IAC/C,OAAO,OAAQ;IAEf,OAAO,QAAS,GAAG,UAEjB;IAEF,MAAM;IAeN,IAAI,aAGF;IAEF,KAAK,aAGH;CACH;AAED,eAAO,MAAM,UAAU,UAAW,MAAM,iBAAiB,MAAM,GAAG,IAAI,SAErE,CAAC;AAEF,eAAe,YAAY,CAAC;AAC5B,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAEL,KAAK,SAAS,EAGf,MAAM,cAAc,CAAC;AAEtB,KAAK,oBAAoB,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAgBhE,UAAU,qBAAqB;IAC7B,KAAK,EAAE,YAAY,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,UAAU,yBAAyB;IACjC,KAAK,EAAE,gBAAgB,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,6BAA6B;IACrC,KAAK,EAAE,oBAAoB,CAAC;IAC5B,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;CAC1B;AAED,UAAU,2BAA2B;IACnC,KAAK,EAAE,kBAAkB,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,+BAA+B;IACvC,KAAK,EAAE,sBAAsB,CAAC;IAC9B,IAAI,EAAE,oBAAoB,CAAC;CAC5B;AAED,UAAU,uBAAuB;IAC/B,KAAK,EAAE,gBAAgB,CAAC;IACxB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,WAAW;IACnB,KAAK,EACD,MAAM,GACN,OAAO,GACP,OAAO,GACP,OAAO,GACP,SAAS,GACT,WAAW,GACX,SAAS,CAAC;CACf;AAED,UAAU,KAAK;IACb,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;IACnD,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE;QACtB,WAAW,EACP,qBAAqB,GACrB,WAAW,GACX,yBAAyB,GACzB,6BAA6B,GAC7B,2BAA2B,GAC3B,+BAA+B,GAC/B,uBAAuB,CAAC;KAC7B,KAAK,IAAI,CAAC;CACZ;AAED,eAAO,MAAM,IAAI,QAAS,GAAG,SAG5B,CAAC;AAEF,eAAO,MAAM,KAAK,QAAS,GAAG,SAG7B,CAAC;AAEF,eAAO,MAAM,MAAM,QAAS,GAAG,QAAQ,MAAM,SAG5C,CAAC;AAIF,cAAM,YAAa,SAAQ,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC;IAC/C,OAAO,OAAQ;IAEf,OAAO,QAAS,GAAG,UAEjB;IAEF,MAAM;IAgBN,IAAI,aAGF;IAEF,KAAK,aAGH;CACH;AAED,eAAO,MAAM,UAAU,UAAW,MAAM,iBAAiB,MAAM,GAAG,IAAI,SAErE,CAAC;AAEF,eAAe,YAAY,CAAC;AAC5B,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,yBAAyB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-spalla-player",
3
- "version": "0.8.0",
3
+ "version": "0.9.0",
4
4
  "description": "Spalla SDK for RN",
5
5
  "source": "./src/index.tsx",
6
6
  "main": "./lib/commonjs/index.js",
@@ -16,7 +16,7 @@ Pod::Spec.new do |s|
16
16
 
17
17
  s.source_files = "ios/**/*.{h,m,mm,swift}"
18
18
 
19
- s.dependency "SpallaSDK", "~> 0.9.1"
19
+ s.dependency "SpallaSDK", "~> 1.8.2"
20
20
 
21
21
  # Use install_modules_dependencies helper to install the dependencies if React Native version >=0.71.0.
22
22
  # See https://github.com/facebook/react-native/blob/febf6b7f33fdb4904669f99d795eba4c0f95d7bf/scripts/cocoapods/new_architecture.rb#L79.
package/src/index.tsx CHANGED
@@ -6,11 +6,14 @@ import {
6
6
  findNodeHandle,
7
7
  } from 'react-native';
8
8
 
9
+ type allowedPlaybackRates = 0.25 | 0.5 | 1.0 | 1.25 | 1.5 | 2.0;
10
+
9
11
  interface RNSpallaPlayerProps {
10
12
  children?: React.ReactNode;
11
13
  style?: ViewStyle;
12
14
  startTime: number;
13
15
  subtitle?: String | null;
16
+ playbackRate?: allowedPlaybackRates;
14
17
  ref?: (ref: any) => void;
15
18
  }
16
19
 
@@ -38,6 +41,18 @@ interface PlayerEventSubtitleSelected {
38
41
  event: 'subtitleSelected';
39
42
  subtitle: String;
40
43
  }
44
+
45
+ interface PlayerEventPlaybackRateSelected {
46
+ event: 'playbackRateSelected';
47
+ rate: allowedPlaybackRates;
48
+ }
49
+
50
+ interface PlayerEventMedataLoaded {
51
+ event: 'metadataLoaded';
52
+ isLive: boolean;
53
+ duration: number;
54
+ }
55
+
41
56
  interface PlayerEvent {
42
57
  event:
43
58
  | 'play'
@@ -58,13 +73,16 @@ interface Props {
58
73
  autoplay?: boolean;
59
74
  startTime?: number;
60
75
  subtitle?: String | null;
76
+ playbackRate?: 0.25 | 0.5 | 1.0 | 1.25 | 1.5 | 2.0;
61
77
  onPlayerEvent?: (event: {
62
78
  nativeEvent:
63
79
  | PlayerEventTimeUpdate
64
80
  | PlayerEvent
65
81
  | PlayerEventDurationUpdate
66
82
  | PlayerEventSubtitlesAvailable
67
- | PlayerEventSubtitleSelected;
83
+ | PlayerEventSubtitleSelected
84
+ | PlayerEventPlaybackRateSelected
85
+ | PlayerEventMedataLoaded;
68
86
  }) => void;
69
87
  }
70
88
 
@@ -93,7 +111,7 @@ class SpallaPlayer extends React.Component<Props> {
93
111
  };
94
112
 
95
113
  render() {
96
- const { style, startTime } = this.props;
114
+ const { style, startTime, playbackRate } = this.props;
97
115
 
98
116
  return (
99
117
  <RNSpallaPlayer
@@ -101,6 +119,7 @@ class SpallaPlayer extends React.Component<Props> {
101
119
  ref={this._setRef}
102
120
  style={style}
103
121
  startTime={startTime ?? 0}
122
+ playbackRate={playbackRate ?? 1.0}
104
123
  >
105
124
  {this.props.children}
106
125
  </RNSpallaPlayer>