amazon-ivs-react-native-player 1.3.0 → 1.4.1

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.
@@ -19,7 +19,7 @@ Pod::Spec.new do |s|
19
19
  s.license = package["license"]
20
20
  s.authors = package["author"]
21
21
 
22
- s.platforms = { :ios => "11.0" }
22
+ s.platforms = { :ios => "12.4" }
23
23
  s.source = { :git => "https://github.com/aws/amazon-ivs-react-native-player.git", :tag => "#{s.version}" }
24
24
 
25
25
 
@@ -27,5 +27,5 @@ Pod::Spec.new do |s|
27
27
 
28
28
 
29
29
  s.dependency "React-Core"
30
- s.dependency "AmazonIVSPlayer", "~> 1.13.0"
30
+ s.dependency "AmazonIVSPlayer", "~> 1.18.0"
31
31
  end
@@ -2,4 +2,4 @@ AmazonIvs_kotlinVersion=1.6.10
2
2
  AmazonIvs_compileSdkVersion=31
3
3
  AmazonIvs_buildToolsVersion=31.0.0
4
4
  AmazonIvs_targetSdkVersion=31
5
- AmazonIvs_ivsVersion=1.13.0
5
+ AmazonIvs_ivsVersion=1.18.0
@@ -93,7 +93,7 @@ class AmazonIvsView(private val context: ThemedReactContext) : FrameLayout(conte
93
93
  }
94
94
 
95
95
  override fun onError(e: PlayerException) {
96
- onError(e.errorMessage)
96
+ onError(e.getErrorMessage())
97
97
  }
98
98
  }
99
99
 
@@ -130,6 +130,10 @@ class AmazonIvsView(private val context: ThemedReactContext) : FrameLayout(conte
130
130
  player?.isMuted = muted
131
131
  }
132
132
 
133
+ fun setLooping(shouldLoop: Boolean) {
134
+ player?.setLooping(shouldLoop)
135
+ }
136
+
133
137
  fun setVolume(volume: Double) {
134
138
  player?.setVolume(volume.toFloat())
135
139
  }
@@ -257,19 +261,21 @@ class AmazonIvsView(private val context: ThemedReactContext) : FrameLayout(conte
257
261
  fun onSeek(position: Long) {
258
262
  val reactContext = context as ReactContext
259
263
  val data = Arguments.createMap()
260
- data.putInt("position", TimeUnit.MILLISECONDS.toSeconds(position).toInt())
261
-
264
+ data.putDouble("position", convertMilliSecondsToSeconds(position))
262
265
  reactContext.getJSModule(RCTEventEmitter::class.java).receiveEvent(id, Events.SEEK.toString(), data)
263
266
  }
264
267
 
265
268
  fun onProgress(position: Long) {
266
269
  val reactContext = context as ReactContext
267
270
  val data = Arguments.createMap()
268
- data.putInt("position", TimeUnit.MILLISECONDS.toSeconds(position).toInt())
269
-
271
+ data.putDouble("position", convertMilliSecondsToSeconds(position))
270
272
  reactContext.getJSModule(RCTEventEmitter::class.java).receiveEvent(id, Events.PROGRESS.toString(), data)
271
273
  }
272
274
 
275
+ private fun convertMilliSecondsToSeconds (milliSeconds: Long): Double {
276
+ return milliSeconds / 1000.0
277
+ }
278
+
273
279
  private val mLayoutRunnable = Runnable {
274
280
  measure(
275
281
  MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
@@ -285,8 +291,13 @@ class AmazonIvsView(private val context: ThemedReactContext) : FrameLayout(conte
285
291
  player?.pause()
286
292
  }
287
293
 
288
- fun seekTo(position: Long) {
289
- player?.seekTo(TimeUnit.SECONDS.toMillis(position))
294
+ fun seekTo(position: Double) {
295
+ val milliseconds = (position * 1000.0).toLong()
296
+ player?.seekTo(milliseconds)
297
+ }
298
+
299
+ fun setOrigin(origin: String) {
300
+ player?.setOrigin(origin)
290
301
  }
291
302
 
292
303
 
@@ -326,7 +337,8 @@ class AmazonIvsView(private val context: ThemedReactContext) : FrameLayout(conte
326
337
  data.putMap("playerData", playerData)
327
338
 
328
339
  reactContext.getJSModule(RCTEventEmitter::class.java).receiveEvent(id, Events.DATA.toString(), data)
329
- };
340
+ }
341
+ else -> {}
330
342
  }
331
343
 
332
344
  val onStateChangeData = Arguments.createMap()
@@ -404,8 +416,7 @@ class AmazonIvsView(private val context: ThemedReactContext) : FrameLayout(conte
404
416
  }
405
417
 
406
418
  private fun getDuration(duration: Long): Double {
407
- val durationInSeconds = TimeUnit.MILLISECONDS.toSeconds(duration).toInt()
408
- return durationInSeconds.toDouble()
419
+ return convertMilliSecondsToSeconds(duration)
409
420
  }
410
421
 
411
422
  private fun mapPlayerState(state: Player.State): String {
@@ -12,6 +12,7 @@ class AmazonIvsViewManager : SimpleViewManager<AmazonIvsView>() {
12
12
  PLAY,
13
13
  PAUSE,
14
14
  SEEK_TO,
15
+ SET_ORIGIN,
15
16
  TOGGLE_PIP
16
17
  }
17
18
 
@@ -31,6 +32,8 @@ class AmazonIvsViewManager : SimpleViewManager<AmazonIvsView>() {
31
32
  Commands.PLAY.ordinal,
32
33
  "pause",
33
34
  Commands.PAUSE.ordinal,
35
+ "setOrigin",
36
+ Commands.SET_ORIGIN.ordinal,
34
37
  "seekTo",
35
38
  Commands.SEEK_TO.ordinal,
36
39
  "togglePip",
@@ -43,9 +46,15 @@ class AmazonIvsViewManager : SimpleViewManager<AmazonIvsView>() {
43
46
  Commands.PLAY.ordinal -> view.play()
44
47
  Commands.PAUSE.ordinal -> view.pause()
45
48
  Commands.TOGGLE_PIP.ordinal -> view.togglePip()
49
+ Commands.SET_ORIGIN.ordinal -> {
50
+ args?.getString(0)?.let {
51
+ origin ->
52
+ view.setOrigin(origin)
53
+ }
54
+ }
46
55
  Commands.SEEK_TO.ordinal -> {
47
- args?.getInt(0)?.let { position ->
48
- view.seekTo(position.toLong())
56
+ args?.getDouble(0)?.let { position ->
57
+ view.seekTo(position)
49
58
  }
50
59
  }
51
60
  else -> {
@@ -58,6 +67,11 @@ class AmazonIvsViewManager : SimpleViewManager<AmazonIvsView>() {
58
67
  view.setStreamUrl(streamUrl);
59
68
  }
60
69
 
70
+ @ReactProp(name = "loop")
71
+ fun setLooping(view: AmazonIvsView, shouldLoop: Boolean){
72
+ view.setLooping(shouldLoop);
73
+ }
74
+
61
75
  @ReactProp(name = "resizeMode")
62
76
  fun setResizeMode(view: AmazonIvsView, mode: String) {
63
77
  view.setResizeMode(mode);
package/ios/.gitignore ADDED
@@ -0,0 +1 @@
1
+ AmazonIvsManager+Framework.swift
@@ -4,6 +4,7 @@
4
4
  @interface RCT_EXTERN_MODULE(AmazonIvsManager, RCTViewManager)
5
5
  RCT_EXPORT_VIEW_PROPERTY(resizeMode, NSString)
6
6
  RCT_EXPORT_VIEW_PROPERTY(muted, BOOL)
7
+ RCT_EXPORT_VIEW_PROPERTY(loop, BOOL)
7
8
  RCT_EXPORT_VIEW_PROPERTY(liveLowLatency, BOOL)
8
9
  RCT_EXPORT_VIEW_PROPERTY(quality, NSDictionary)
9
10
  RCT_EXPORT_VIEW_PROPERTY(initialBufferDuration, double)
@@ -18,6 +19,7 @@ RCT_EXTERN_METHOD(play:(nonnull NSNumber *)node)
18
19
  RCT_EXTERN_METHOD(pause:(nonnull NSNumber *)node)
19
20
  RCT_EXPORT_VIEW_PROPERTY(streamUrl, NSString)
20
21
  RCT_EXTERN_METHOD(seekTo:(nonnull NSNumber *)node position:(double)position)
22
+ RCT_EXTERN_METHOD(setOrigin:(nonnull NSNumber *)node origin:(NSString *)origin)
21
23
  RCT_EXTERN_METHOD(togglePip:(nonnull NSNumber *)node)
22
24
  RCT_EXPORT_VIEW_PROPERTY(onSeek, RCTDirectEventBlock)
23
25
  RCT_EXPORT_VIEW_PROPERTY(onData, RCTDirectEventBlock)
@@ -27,6 +27,13 @@ class AmazonIvsManager: RCTViewManager {
27
27
  }
28
28
  }
29
29
 
30
+ @objc func setOrigin(_ node: NSNumber, origin: NSString) {
31
+ DispatchQueue.main.async {
32
+ let component = self.bridge.uiManager.view(forReactTag: node) as! AmazonIvsView
33
+ component.setOrigin(origin: origin)
34
+ }
35
+ }
36
+
30
37
  @objc func togglePip(_ node: NSNumber) {
31
38
  DispatchQueue.main.async {
32
39
  let component = self.bridge.uiManager.view(forReactTag: node) as! AmazonIvsView
@@ -51,6 +51,7 @@ class AmazonIvsView: UIView, IVSPlayer.Delegate {
51
51
 
52
52
  override init(frame: CGRect) {
53
53
  self.muted = player.muted
54
+ self.loop = player.looping
54
55
  self.liveLowLatency = player.isLiveLowLatency
55
56
  self.autoQualityMode = player.autoQualityMode
56
57
  self.playbackRate = Double(player.playbackRate)
@@ -100,6 +101,12 @@ class AmazonIvsView: UIView, IVSPlayer.Delegate {
100
101
  self.addProgressObserver()
101
102
  }
102
103
  }
104
+
105
+ @objc var loop: Bool {
106
+ didSet {
107
+ player.looping = loop
108
+ }
109
+ }
103
110
 
104
111
  @objc var muted: Bool {
105
112
  didSet {
@@ -238,6 +245,11 @@ class AmazonIvsView: UIView, IVSPlayer.Delegate {
238
245
  let parsedTime = CMTimeMakeWithSeconds(position, preferredTimescale: 1000000)
239
246
  player.seek(to: parsedTime)
240
247
  }
248
+
249
+ @objc func setOrigin(origin: NSString){
250
+ let url = URL(string: origin as String)
251
+ player.setOrigin(url)
252
+ }
241
253
 
242
254
 
243
255
 
@@ -30,6 +30,7 @@ const IVSPlayerContainer = /*#__PURE__*/_react.default.forwardRef((_ref, ref) =>
30
30
  streamUrl,
31
31
  paused,
32
32
  muted,
33
+ loop = false,
33
34
  resizeMode,
34
35
  autoplay = true,
35
36
  liveLowLatency,
@@ -71,6 +72,9 @@ const IVSPlayerContainer = /*#__PURE__*/_react.default.forwardRef((_ref, ref) =>
71
72
  const seekTo = (0, _react.useCallback)(value => {
72
73
  _reactNative.UIManager.dispatchViewManagerCommand((0, _reactNative.findNodeHandle)(mediaPlayerRef.current), _reactNative.UIManager.getViewManagerConfig(VIEW_NAME).Commands.seekTo, [value]);
73
74
  }, []);
75
+ const setOrigin = (0, _react.useCallback)(value => {
76
+ _reactNative.UIManager.dispatchViewManagerCommand((0, _reactNative.findNodeHandle)(mediaPlayerRef.current), _reactNative.UIManager.getViewManagerConfig(VIEW_NAME).Commands.setOrigin, [value]);
77
+ }, []);
74
78
  const togglePip = (0, _react.useCallback)(() => {
75
79
  _reactNative.UIManager.dispatchViewManagerCommand((0, _reactNative.findNodeHandle)(mediaPlayerRef.current), _reactNative.UIManager.getViewManagerConfig(VIEW_NAME).Commands.togglePip, []);
76
80
  }, []);
@@ -89,8 +93,9 @@ const IVSPlayerContainer = /*#__PURE__*/_react.default.forwardRef((_ref, ref) =>
89
93
  play,
90
94
  pause,
91
95
  seekTo,
96
+ setOrigin,
92
97
  togglePip
93
- }), [play, pause, seekTo, togglePip]);
98
+ }), [play, pause, seekTo, setOrigin, togglePip]);
94
99
 
95
100
  const onSeekHandler = event => {
96
101
  const {
@@ -121,10 +126,9 @@ const IVSPlayerContainer = /*#__PURE__*/_react.default.forwardRef((_ref, ref) =>
121
126
  };
122
127
 
123
128
  const onLoadHandler = event => {
124
- if (!paused) {
125
- play();
126
- } else {
127
- pause();
129
+ if (_reactNative.Platform.OS === 'android') {
130
+ const shouldAutoPlay = autoplay && !paused;
131
+ shouldAutoPlay ? play() : pause();
128
132
  }
129
133
 
130
134
  const {
@@ -198,6 +202,7 @@ const IVSPlayerContainer = /*#__PURE__*/_react.default.forwardRef((_ref, ref) =>
198
202
  }, /*#__PURE__*/_react.default.createElement(IVSPlayer, {
199
203
  testID: "IVSPlayer",
200
204
  muted: muted,
205
+ loop: loop,
201
206
  liveLowLatency: liveLowLatency,
202
207
  style: styles.mediaPlayer,
203
208
  ref: mediaPlayerRef,
@@ -22,6 +22,7 @@ declare type Props = {|
22
22
  style?: ViewStyleProp,
23
23
  paused?: boolean,
24
24
  muted?: boolean,
25
+ loop?: boolean,
25
26
  autoplay?: boolean,
26
27
  streamUrl?: string,
27
28
  resizeMode?: ResizeMode,
@@ -1 +1 @@
1
- {"version":3,"sources":["IVSPlayer.tsx"],"names":["VIEW_NAME","IVSPlayer","parseDuration","duration","Infinity","IVSPlayerContainer","React","forwardRef","ref","style","streamUrl","paused","muted","resizeMode","autoplay","liveLowLatency","playbackRate","logLevel","progressInterval","volume","quality","autoMaxQuality","autoQualityMode","breakpoints","maxBitrate","initialBufferDuration","onSeek","onData","onVideoStatistics","onPlayerStateChange","onDurationChange","onQualityChange","onRebuffering","onLoadStart","onLoad","onLiveLatencyChange","onTextCue","onTextMetadataCue","onProgress","onError","onTimePoint","children","mediaPlayerRef","initialized","play","UIManager","dispatchViewManagerCommand","current","getViewManagerConfig","Commands","pause","seekTo","value","togglePip","onSeekHandler","event","position","nativeEvent","onPlayerStateChangeHandler","state","onDurationChangeHandler","onQualityChangeHandler","newQuality","onLoadHandler","onLiveLatencyChangeHandler","liveLatency","onDataHandler","playerData","onTextCueHandler","textCue","onVideoStatisticsHandler","videoData","statistics","onTextMetadataCueHandler","textMetadataCue","onProgressHandler","onErrorHandler","error","onTimePointHandler","styles","container","mediaPlayer","undefined","StyleSheet","create","flex","width","height"],"mappings":"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","sourcesContent":["import React, {\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n} from 'react';\nimport {\n requireNativeComponent,\n ViewStyle,\n StyleSheet,\n UIManager,\n findNodeHandle,\n View,\n NativeSyntheticEvent,\n} from 'react-native';\nimport type { LogLevel, PlayerState } from './enums';\nimport type {\n Quality,\n PlayerData,\n TextCue,\n TextMetadataCue,\n VideoData,\n IVSPlayerRef,\n ResizeMode,\n} from './types';\n\ntype IVSPlayerProps = {\n style?: ViewStyle;\n testID?: string;\n ref: any;\n muted?: boolean;\n liveLowLatency?: boolean;\n playbackRate?: number;\n streamUrl?: string;\n resizeMode?: ResizeMode;\n logLevel?: LogLevel;\n progressInterval?: number;\n volume?: number;\n quality?: Quality | null;\n autoMaxQuality?: Quality | null;\n autoQualityMode?: boolean;\n breakpoints?: number[];\n maxBitrate?: number;\n initialBufferDuration?: number;\n onSeek?(event: NativeSyntheticEvent<{ position: number }>): void;\n onData?(event: NativeSyntheticEvent<{ playerData: PlayerData }>): void;\n onVideoStatistics?(\n event: NativeSyntheticEvent<{ videoData: VideoData }>\n ): void;\n onPlayerStateChange?(\n event: NativeSyntheticEvent<{ state: PlayerState }>\n ): void;\n onDurationChange?(\n event: NativeSyntheticEvent<{ duration: number | null }>\n ): void;\n onQualityChange?(event: NativeSyntheticEvent<{ quality: Quality }>): void;\n onRebuffering?(): void;\n onLoadStart?(): void;\n onLoad?(event: NativeSyntheticEvent<{ duration: number | null }>): void;\n onLiveLatencyChange?(\n event: NativeSyntheticEvent<{ liveLatency: number }>\n ): void;\n onTextCue?(event: NativeSyntheticEvent<{ textCue: TextCue }>): void;\n onTextMetadataCue?(\n event: NativeSyntheticEvent<{ textMetadataCue: TextMetadataCue }>\n ): void;\n onProgress?(event: NativeSyntheticEvent<{ position: number }>): void;\n onError?(event: NativeSyntheticEvent<{ error: string }>): void;\n onTimePoint?(event: NativeSyntheticEvent<{ position: number }>): void;\n};\n\nconst VIEW_NAME = 'AmazonIvs';\n\nconst IVSPlayer = requireNativeComponent<IVSPlayerProps>(VIEW_NAME);\n\ntype Props = {\n style?: ViewStyle;\n testID?: string;\n paused?: boolean;\n muted?: boolean;\n autoplay?: boolean;\n streamUrl?: string;\n liveLowLatency?: boolean;\n playbackRate?: number;\n logLevel?: LogLevel;\n resizeMode?: ResizeMode;\n progressInterval?: number;\n volume?: number;\n quality?: Quality | null;\n autoMaxQuality?: Quality | null;\n autoQualityMode?: boolean;\n breakpoints?: number[];\n maxBitrate?: number;\n initialBufferDuration?: number;\n onSeek?(position: number): void;\n onData?(data: PlayerData): void;\n onVideoStatistics?(data: VideoData): void;\n onPlayerStateChange?(state: PlayerState): void;\n onDurationChange?(duration: number | null): void;\n onQualityChange?(quality: Quality | null): void;\n onRebuffering?(): void;\n onLoadStart?(): void;\n onLoad?(duration: number | null): void;\n onLiveLatencyChange?(liveLatency: number): void;\n onTextCue?(textCue: TextCue): void;\n onTextMetadataCue?(textMetadataCue: TextMetadataCue): void;\n onProgress?(progress: number): void;\n onError?(error: string): void;\n onTimePoint?(position: number): void;\n children?: React.ReactNode;\n};\n\nfunction parseDuration(duration: number | null) {\n if (duration == null) {\n return duration;\n }\n return duration > 0 ? duration : Infinity;\n}\n\nconst IVSPlayerContainer = React.forwardRef<IVSPlayerRef, Props>(\n (\n {\n style,\n streamUrl,\n paused,\n muted,\n resizeMode,\n autoplay = true,\n liveLowLatency,\n playbackRate,\n logLevel,\n progressInterval,\n volume,\n quality,\n autoMaxQuality,\n autoQualityMode,\n breakpoints = [],\n maxBitrate,\n initialBufferDuration,\n onSeek,\n onData,\n onVideoStatistics,\n onPlayerStateChange,\n onDurationChange,\n onQualityChange,\n onRebuffering,\n onLoadStart,\n onLoad,\n onLiveLatencyChange,\n onTextCue,\n onTextMetadataCue,\n onProgress,\n onError,\n onTimePoint,\n children,\n },\n ref\n ) => {\n const mediaPlayerRef = useRef(null);\n const initialized = useRef(false);\n\n const play = useCallback(() => {\n UIManager.dispatchViewManagerCommand(\n findNodeHandle(mediaPlayerRef.current),\n UIManager.getViewManagerConfig(VIEW_NAME).Commands.play,\n []\n );\n }, []);\n\n const pause = useCallback(() => {\n UIManager.dispatchViewManagerCommand(\n findNodeHandle(mediaPlayerRef.current),\n UIManager.getViewManagerConfig(VIEW_NAME).Commands.pause,\n []\n );\n }, []);\n\n const seekTo = useCallback((value) => {\n UIManager.dispatchViewManagerCommand(\n findNodeHandle(mediaPlayerRef.current),\n\n UIManager.getViewManagerConfig(VIEW_NAME).Commands.seekTo,\n [value]\n );\n }, []);\n\n const togglePip = useCallback(() => {\n UIManager.dispatchViewManagerCommand(\n findNodeHandle(mediaPlayerRef.current),\n\n UIManager.getViewManagerConfig(VIEW_NAME).Commands.togglePip,\n []\n );\n }, []);\n\n useEffect(() => {\n if (initialized.current || autoplay) {\n if (paused) {\n pause();\n } else {\n play();\n }\n }\n initialized.current = true;\n }, [pause, paused, play, autoplay]);\n\n useImperativeHandle(\n ref,\n () => ({\n play,\n pause,\n seekTo,\n togglePip,\n }),\n [play, pause, seekTo, togglePip]\n );\n\n const onSeekHandler = (\n event: NativeSyntheticEvent<{ position: number }>\n ) => {\n const { position } = event.nativeEvent;\n onSeek?.(position);\n };\n\n const onPlayerStateChangeHandler = (\n event: NativeSyntheticEvent<{ state: PlayerState }>\n ) => {\n const { state } = event.nativeEvent;\n onPlayerStateChange?.(state);\n };\n\n const onDurationChangeHandler = (\n event: NativeSyntheticEvent<{ duration: number | null }>\n ) => {\n const { duration } = event.nativeEvent;\n\n onDurationChange?.(parseDuration(duration));\n };\n\n const onQualityChangeHandler = (\n event: NativeSyntheticEvent<{ quality: Quality }>\n ) => {\n const { quality: newQuality } = event.nativeEvent;\n onQualityChange?.(newQuality);\n };\n\n const onLoadHandler = (\n event: NativeSyntheticEvent<{\n duration: number | null;\n }>\n ) => {\n if (!paused) {\n play();\n } else {\n pause();\n }\n\n const { duration } = event.nativeEvent;\n\n onLoad?.(parseDuration(duration));\n };\n\n const onLiveLatencyChangeHandler = (\n event: NativeSyntheticEvent<{ liveLatency: number }>\n ) => {\n const { liveLatency } = event.nativeEvent;\n onLiveLatencyChange?.(liveLatency);\n };\n\n const onDataHandler = (\n event: NativeSyntheticEvent<{ playerData: PlayerData }>\n ) => {\n const { playerData } = event.nativeEvent;\n onData?.(playerData);\n };\n\n const onTextCueHandler = (\n event: NativeSyntheticEvent<{ textCue: TextCue }>\n ) => {\n const { textCue } = event.nativeEvent;\n onTextCue?.(textCue);\n };\n\n const onVideoStatisticsHandler = (\n event: NativeSyntheticEvent<{ videoData: VideoData }>\n ) => {\n const { videoData } = event.nativeEvent;\n const statistics: VideoData = {\n ...videoData,\n duration: parseDuration(videoData.duration),\n };\n onVideoStatistics?.(statistics);\n };\n\n const onTextMetadataCueHandler = (\n event: NativeSyntheticEvent<{ textMetadataCue: TextMetadataCue }>\n ) => {\n const { textMetadataCue } = event.nativeEvent;\n onTextMetadataCue?.(textMetadataCue);\n };\n\n const onProgressHandler = (\n event: NativeSyntheticEvent<{ position: number }>\n ) => {\n const { position } = event.nativeEvent;\n onProgress?.(position);\n };\n\n const onErrorHandler = (event: NativeSyntheticEvent<{ error: string }>) => {\n const { error } = event.nativeEvent;\n onError?.(error);\n };\n\n const onTimePointHandler = (\n event: NativeSyntheticEvent<{ position: number }>\n ) => {\n const { position } = event.nativeEvent;\n onTimePoint?.(position);\n };\n\n return (\n <View style={[styles.container, style]} ref={ref as any}>\n <IVSPlayer\n testID=\"IVSPlayer\"\n muted={muted}\n liveLowLatency={liveLowLatency}\n style={styles.mediaPlayer}\n ref={mediaPlayerRef}\n playbackRate={playbackRate}\n streamUrl={streamUrl}\n logLevel={logLevel}\n resizeMode={resizeMode}\n progressInterval={progressInterval}\n volume={volume}\n quality={quality}\n initialBufferDuration={initialBufferDuration}\n autoMaxQuality={autoMaxQuality}\n autoQualityMode={autoQualityMode}\n breakpoints={breakpoints}\n maxBitrate={maxBitrate}\n onVideoStatistics={\n onVideoStatistics ? onVideoStatisticsHandler : undefined\n }\n onData={onDataHandler}\n onSeek={onSeekHandler}\n onQualityChange={onQualityChangeHandler}\n onPlayerStateChange={onPlayerStateChangeHandler}\n onDurationChange={onDurationChangeHandler}\n onRebuffering={onRebuffering}\n onLoadStart={onLoadStart}\n onLoad={onLoadHandler}\n onTextCue={onTextCueHandler}\n onTextMetadataCue={onTextMetadataCueHandler}\n onProgress={onProgressHandler}\n onLiveLatencyChange={\n onLiveLatencyChange ? onLiveLatencyChangeHandler : undefined\n }\n onError={onErrorHandler}\n onTimePoint={onTimePointHandler}\n />\n <View style={styles.children}>{children}</View>\n </View>\n );\n }\n);\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n mediaPlayer: {\n flex: 1,\n },\n children: {\n position: 'absolute',\n width: '100%',\n height: '100%',\n },\n});\n\nexport default IVSPlayerContainer;\n"]}
1
+ {"version":3,"sources":["IVSPlayer.tsx"],"names":["VIEW_NAME","IVSPlayer","parseDuration","duration","Infinity","IVSPlayerContainer","React","forwardRef","ref","style","streamUrl","paused","muted","loop","resizeMode","autoplay","liveLowLatency","playbackRate","logLevel","progressInterval","volume","quality","autoMaxQuality","autoQualityMode","breakpoints","maxBitrate","initialBufferDuration","onSeek","onData","onVideoStatistics","onPlayerStateChange","onDurationChange","onQualityChange","onRebuffering","onLoadStart","onLoad","onLiveLatencyChange","onTextCue","onTextMetadataCue","onProgress","onError","onTimePoint","children","mediaPlayerRef","initialized","play","UIManager","dispatchViewManagerCommand","current","getViewManagerConfig","Commands","pause","seekTo","value","setOrigin","togglePip","onSeekHandler","event","position","nativeEvent","onPlayerStateChangeHandler","state","onDurationChangeHandler","onQualityChangeHandler","newQuality","onLoadHandler","Platform","OS","shouldAutoPlay","onLiveLatencyChangeHandler","liveLatency","onDataHandler","playerData","onTextCueHandler","textCue","onVideoStatisticsHandler","videoData","statistics","onTextMetadataCueHandler","textMetadataCue","onProgressHandler","onErrorHandler","error","onTimePointHandler","styles","container","mediaPlayer","undefined","StyleSheet","create","flex","width","height"],"mappings":"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","sourcesContent":["import React, {\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n} from 'react';\nimport {\n requireNativeComponent,\n ViewStyle,\n StyleSheet,\n UIManager,\n findNodeHandle,\n View,\n NativeSyntheticEvent,\n Platform,\n} from 'react-native';\nimport type { LogLevel, PlayerState } from './enums';\nimport type {\n Quality,\n PlayerData,\n TextCue,\n TextMetadataCue,\n VideoData,\n IVSPlayerRef,\n ResizeMode,\n} from './types';\n\ntype IVSPlayerProps = {\n style?: ViewStyle;\n testID?: string;\n ref: any;\n muted?: boolean;\n loop?: boolean;\n liveLowLatency?: boolean;\n playbackRate?: number;\n streamUrl?: string;\n resizeMode?: ResizeMode;\n logLevel?: LogLevel;\n progressInterval?: number;\n volume?: number;\n quality?: Quality | null;\n autoMaxQuality?: Quality | null;\n autoQualityMode?: boolean;\n breakpoints?: number[];\n maxBitrate?: number;\n initialBufferDuration?: number;\n onSeek?(event: NativeSyntheticEvent<{ position: number }>): void;\n onData?(event: NativeSyntheticEvent<{ playerData: PlayerData }>): void;\n onVideoStatistics?(\n event: NativeSyntheticEvent<{ videoData: VideoData }>\n ): void;\n onPlayerStateChange?(\n event: NativeSyntheticEvent<{ state: PlayerState }>\n ): void;\n onDurationChange?(\n event: NativeSyntheticEvent<{ duration: number | null }>\n ): void;\n onQualityChange?(event: NativeSyntheticEvent<{ quality: Quality }>): void;\n onRebuffering?(): void;\n onLoadStart?(): void;\n onLoad?(event: NativeSyntheticEvent<{ duration: number | null }>): void;\n onLiveLatencyChange?(\n event: NativeSyntheticEvent<{ liveLatency: number }>\n ): void;\n onTextCue?(event: NativeSyntheticEvent<{ textCue: TextCue }>): void;\n onTextMetadataCue?(\n event: NativeSyntheticEvent<{ textMetadataCue: TextMetadataCue }>\n ): void;\n onProgress?(event: NativeSyntheticEvent<{ position: number }>): void;\n onError?(event: NativeSyntheticEvent<{ error: string }>): void;\n onTimePoint?(event: NativeSyntheticEvent<{ position: number }>): void;\n};\n\nconst VIEW_NAME = 'AmazonIvs';\n\nconst IVSPlayer = requireNativeComponent<IVSPlayerProps>(VIEW_NAME);\n\ntype Props = {\n style?: ViewStyle;\n testID?: string;\n paused?: boolean;\n muted?: boolean;\n loop?: boolean;\n autoplay?: boolean;\n streamUrl?: string;\n liveLowLatency?: boolean;\n playbackRate?: number;\n logLevel?: LogLevel;\n resizeMode?: ResizeMode;\n progressInterval?: number;\n volume?: number;\n quality?: Quality | null;\n autoMaxQuality?: Quality | null;\n autoQualityMode?: boolean;\n breakpoints?: number[];\n maxBitrate?: number;\n initialBufferDuration?: number;\n onSeek?(position: number): void;\n onData?(data: PlayerData): void;\n onVideoStatistics?(data: VideoData): void;\n onPlayerStateChange?(state: PlayerState): void;\n onDurationChange?(duration: number | null): void;\n onQualityChange?(quality: Quality | null): void;\n onRebuffering?(): void;\n onLoadStart?(): void;\n onLoad?(duration: number | null): void;\n onLiveLatencyChange?(liveLatency: number): void;\n onTextCue?(textCue: TextCue): void;\n onTextMetadataCue?(textMetadataCue: TextMetadataCue): void;\n onProgress?(progress: number): void;\n onError?(error: string): void;\n onTimePoint?(position: number): void;\n children?: React.ReactNode;\n};\n\nfunction parseDuration(duration: number | null) {\n if (duration == null) {\n return duration;\n }\n return duration > 0 ? duration : Infinity;\n}\n\nconst IVSPlayerContainer = React.forwardRef<IVSPlayerRef, Props>(\n (\n {\n style,\n streamUrl,\n paused,\n muted,\n loop = false,\n resizeMode,\n autoplay = true,\n liveLowLatency,\n playbackRate,\n logLevel,\n progressInterval,\n volume,\n quality,\n autoMaxQuality,\n autoQualityMode,\n breakpoints = [],\n maxBitrate,\n initialBufferDuration,\n onSeek,\n onData,\n onVideoStatistics,\n onPlayerStateChange,\n onDurationChange,\n onQualityChange,\n onRebuffering,\n onLoadStart,\n onLoad,\n onLiveLatencyChange,\n onTextCue,\n onTextMetadataCue,\n onProgress,\n onError,\n onTimePoint,\n children,\n },\n ref\n ) => {\n const mediaPlayerRef = useRef(null);\n const initialized = useRef(false);\n\n const play = useCallback(() => {\n UIManager.dispatchViewManagerCommand(\n findNodeHandle(mediaPlayerRef.current),\n UIManager.getViewManagerConfig(VIEW_NAME).Commands.play,\n []\n );\n }, []);\n\n const pause = useCallback(() => {\n UIManager.dispatchViewManagerCommand(\n findNodeHandle(mediaPlayerRef.current),\n UIManager.getViewManagerConfig(VIEW_NAME).Commands.pause,\n []\n );\n }, []);\n\n const seekTo = useCallback((value) => {\n UIManager.dispatchViewManagerCommand(\n findNodeHandle(mediaPlayerRef.current),\n\n UIManager.getViewManagerConfig(VIEW_NAME).Commands.seekTo,\n [value]\n );\n }, []);\n\n const setOrigin = useCallback((value) => {\n UIManager.dispatchViewManagerCommand(\n findNodeHandle(mediaPlayerRef.current),\n\n UIManager.getViewManagerConfig(VIEW_NAME).Commands.setOrigin,\n [value]\n );\n }, []);\n\n const togglePip = useCallback(() => {\n UIManager.dispatchViewManagerCommand(\n findNodeHandle(mediaPlayerRef.current),\n\n UIManager.getViewManagerConfig(VIEW_NAME).Commands.togglePip,\n []\n );\n }, []);\n\n useEffect(() => {\n if (initialized.current || autoplay) {\n if (paused) {\n pause();\n } else {\n play();\n }\n }\n initialized.current = true;\n }, [pause, paused, play, autoplay]);\n\n useImperativeHandle(\n ref,\n () => ({\n play,\n pause,\n seekTo,\n setOrigin,\n togglePip,\n }),\n [play, pause, seekTo, setOrigin, togglePip]\n );\n\n const onSeekHandler = (\n event: NativeSyntheticEvent<{ position: number }>\n ) => {\n const { position } = event.nativeEvent;\n onSeek?.(position);\n };\n\n const onPlayerStateChangeHandler = (\n event: NativeSyntheticEvent<{ state: PlayerState }>\n ) => {\n const { state } = event.nativeEvent;\n onPlayerStateChange?.(state);\n };\n\n const onDurationChangeHandler = (\n event: NativeSyntheticEvent<{ duration: number | null }>\n ) => {\n const { duration } = event.nativeEvent;\n\n onDurationChange?.(parseDuration(duration));\n };\n\n const onQualityChangeHandler = (\n event: NativeSyntheticEvent<{ quality: Quality }>\n ) => {\n const { quality: newQuality } = event.nativeEvent;\n onQualityChange?.(newQuality);\n };\n\n const onLoadHandler = (\n event: NativeSyntheticEvent<{\n duration: number | null;\n }>\n ) => {\n if (Platform.OS === 'android') {\n const shouldAutoPlay = autoplay && !paused;\n shouldAutoPlay ? play() : pause();\n }\n\n const { duration } = event.nativeEvent;\n\n onLoad?.(parseDuration(duration));\n };\n\n const onLiveLatencyChangeHandler = (\n event: NativeSyntheticEvent<{ liveLatency: number }>\n ) => {\n const { liveLatency } = event.nativeEvent;\n onLiveLatencyChange?.(liveLatency);\n };\n\n const onDataHandler = (\n event: NativeSyntheticEvent<{ playerData: PlayerData }>\n ) => {\n const { playerData } = event.nativeEvent;\n onData?.(playerData);\n };\n\n const onTextCueHandler = (\n event: NativeSyntheticEvent<{ textCue: TextCue }>\n ) => {\n const { textCue } = event.nativeEvent;\n onTextCue?.(textCue);\n };\n\n const onVideoStatisticsHandler = (\n event: NativeSyntheticEvent<{ videoData: VideoData }>\n ) => {\n const { videoData } = event.nativeEvent;\n const statistics: VideoData = {\n ...videoData,\n duration: parseDuration(videoData.duration),\n };\n onVideoStatistics?.(statistics);\n };\n\n const onTextMetadataCueHandler = (\n event: NativeSyntheticEvent<{ textMetadataCue: TextMetadataCue }>\n ) => {\n const { textMetadataCue } = event.nativeEvent;\n onTextMetadataCue?.(textMetadataCue);\n };\n\n const onProgressHandler = (\n event: NativeSyntheticEvent<{ position: number }>\n ) => {\n const { position } = event.nativeEvent;\n onProgress?.(position);\n };\n\n const onErrorHandler = (event: NativeSyntheticEvent<{ error: string }>) => {\n const { error } = event.nativeEvent;\n onError?.(error);\n };\n\n const onTimePointHandler = (\n event: NativeSyntheticEvent<{ position: number }>\n ) => {\n const { position } = event.nativeEvent;\n onTimePoint?.(position);\n };\n\n return (\n <View style={[styles.container, style]} ref={ref as any}>\n <IVSPlayer\n testID=\"IVSPlayer\"\n muted={muted}\n loop={loop}\n liveLowLatency={liveLowLatency}\n style={styles.mediaPlayer}\n ref={mediaPlayerRef}\n playbackRate={playbackRate}\n streamUrl={streamUrl}\n logLevel={logLevel}\n resizeMode={resizeMode}\n progressInterval={progressInterval}\n volume={volume}\n quality={quality}\n initialBufferDuration={initialBufferDuration}\n autoMaxQuality={autoMaxQuality}\n autoQualityMode={autoQualityMode}\n breakpoints={breakpoints}\n maxBitrate={maxBitrate}\n onVideoStatistics={\n onVideoStatistics ? onVideoStatisticsHandler : undefined\n }\n onData={onDataHandler}\n onSeek={onSeekHandler}\n onQualityChange={onQualityChangeHandler}\n onPlayerStateChange={onPlayerStateChangeHandler}\n onDurationChange={onDurationChangeHandler}\n onRebuffering={onRebuffering}\n onLoadStart={onLoadStart}\n onLoad={onLoadHandler}\n onTextCue={onTextCueHandler}\n onTextMetadataCue={onTextMetadataCueHandler}\n onProgress={onProgressHandler}\n onLiveLatencyChange={\n onLiveLatencyChange ? onLiveLatencyChangeHandler : undefined\n }\n onError={onErrorHandler}\n onTimePoint={onTimePointHandler}\n />\n <View style={styles.children}>{children}</View>\n </View>\n );\n }\n);\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n mediaPlayer: {\n flex: 1,\n },\n children: {\n position: 'absolute',\n width: '100%',\n height: '100%',\n },\n});\n\nexport default IVSPlayerContainer;\n"]}
@@ -41,5 +41,6 @@ export type IVSPlayerRef = {|
41
41
  play: () => void,
42
42
  pause: () => void,
43
43
  seekTo: (position: number) => void,
44
+ setOrigin: (origin: string) => void,
44
45
  togglePip: () => void,
45
46
  |};
@@ -1,5 +1,5 @@
1
1
  import React, { useCallback, useEffect, useImperativeHandle, useRef } from 'react';
2
- import { requireNativeComponent, StyleSheet, UIManager, findNodeHandle, View } from 'react-native';
2
+ import { requireNativeComponent, StyleSheet, UIManager, findNodeHandle, View, Platform } from 'react-native';
3
3
  const VIEW_NAME = 'AmazonIvs';
4
4
  const IVSPlayer = requireNativeComponent(VIEW_NAME);
5
5
 
@@ -17,6 +17,7 @@ const IVSPlayerContainer = /*#__PURE__*/React.forwardRef((_ref, ref) => {
17
17
  streamUrl,
18
18
  paused,
19
19
  muted,
20
+ loop = false,
20
21
  resizeMode,
21
22
  autoplay = true,
22
23
  liveLowLatency,
@@ -58,6 +59,9 @@ const IVSPlayerContainer = /*#__PURE__*/React.forwardRef((_ref, ref) => {
58
59
  const seekTo = useCallback(value => {
59
60
  UIManager.dispatchViewManagerCommand(findNodeHandle(mediaPlayerRef.current), UIManager.getViewManagerConfig(VIEW_NAME).Commands.seekTo, [value]);
60
61
  }, []);
62
+ const setOrigin = useCallback(value => {
63
+ UIManager.dispatchViewManagerCommand(findNodeHandle(mediaPlayerRef.current), UIManager.getViewManagerConfig(VIEW_NAME).Commands.setOrigin, [value]);
64
+ }, []);
61
65
  const togglePip = useCallback(() => {
62
66
  UIManager.dispatchViewManagerCommand(findNodeHandle(mediaPlayerRef.current), UIManager.getViewManagerConfig(VIEW_NAME).Commands.togglePip, []);
63
67
  }, []);
@@ -76,8 +80,9 @@ const IVSPlayerContainer = /*#__PURE__*/React.forwardRef((_ref, ref) => {
76
80
  play,
77
81
  pause,
78
82
  seekTo,
83
+ setOrigin,
79
84
  togglePip
80
- }), [play, pause, seekTo, togglePip]);
85
+ }), [play, pause, seekTo, setOrigin, togglePip]);
81
86
 
82
87
  const onSeekHandler = event => {
83
88
  const {
@@ -108,10 +113,9 @@ const IVSPlayerContainer = /*#__PURE__*/React.forwardRef((_ref, ref) => {
108
113
  };
109
114
 
110
115
  const onLoadHandler = event => {
111
- if (!paused) {
112
- play();
113
- } else {
114
- pause();
116
+ if (Platform.OS === 'android') {
117
+ const shouldAutoPlay = autoplay && !paused;
118
+ shouldAutoPlay ? play() : pause();
115
119
  }
116
120
 
117
121
  const {
@@ -185,6 +189,7 @@ const IVSPlayerContainer = /*#__PURE__*/React.forwardRef((_ref, ref) => {
185
189
  }, /*#__PURE__*/React.createElement(IVSPlayer, {
186
190
  testID: "IVSPlayer",
187
191
  muted: muted,
192
+ loop: loop,
188
193
  liveLowLatency: liveLowLatency,
189
194
  style: styles.mediaPlayer,
190
195
  ref: mediaPlayerRef,
@@ -22,6 +22,7 @@ declare type Props = {|
22
22
  style?: ViewStyleProp,
23
23
  paused?: boolean,
24
24
  muted?: boolean,
25
+ loop?: boolean,
25
26
  autoplay?: boolean,
26
27
  streamUrl?: string,
27
28
  resizeMode?: ResizeMode,
@@ -1 +1 @@
1
- {"version":3,"sources":["IVSPlayer.tsx"],"names":["React","useCallback","useEffect","useImperativeHandle","useRef","requireNativeComponent","StyleSheet","UIManager","findNodeHandle","View","VIEW_NAME","IVSPlayer","parseDuration","duration","Infinity","IVSPlayerContainer","forwardRef","ref","style","streamUrl","paused","muted","resizeMode","autoplay","liveLowLatency","playbackRate","logLevel","progressInterval","volume","quality","autoMaxQuality","autoQualityMode","breakpoints","maxBitrate","initialBufferDuration","onSeek","onData","onVideoStatistics","onPlayerStateChange","onDurationChange","onQualityChange","onRebuffering","onLoadStart","onLoad","onLiveLatencyChange","onTextCue","onTextMetadataCue","onProgress","onError","onTimePoint","children","mediaPlayerRef","initialized","play","dispatchViewManagerCommand","current","getViewManagerConfig","Commands","pause","seekTo","value","togglePip","onSeekHandler","event","position","nativeEvent","onPlayerStateChangeHandler","state","onDurationChangeHandler","onQualityChangeHandler","newQuality","onLoadHandler","onLiveLatencyChangeHandler","liveLatency","onDataHandler","playerData","onTextCueHandler","textCue","onVideoStatisticsHandler","videoData","statistics","onTextMetadataCueHandler","textMetadataCue","onProgressHandler","onErrorHandler","error","onTimePointHandler","styles","container","mediaPlayer","undefined","create","flex","width","height"],"mappings":"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","sourcesContent":["import React, {\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n} from 'react';\nimport {\n requireNativeComponent,\n ViewStyle,\n StyleSheet,\n UIManager,\n findNodeHandle,\n View,\n NativeSyntheticEvent,\n} from 'react-native';\nimport type { LogLevel, PlayerState } from './enums';\nimport type {\n Quality,\n PlayerData,\n TextCue,\n TextMetadataCue,\n VideoData,\n IVSPlayerRef,\n ResizeMode,\n} from './types';\n\ntype IVSPlayerProps = {\n style?: ViewStyle;\n testID?: string;\n ref: any;\n muted?: boolean;\n liveLowLatency?: boolean;\n playbackRate?: number;\n streamUrl?: string;\n resizeMode?: ResizeMode;\n logLevel?: LogLevel;\n progressInterval?: number;\n volume?: number;\n quality?: Quality | null;\n autoMaxQuality?: Quality | null;\n autoQualityMode?: boolean;\n breakpoints?: number[];\n maxBitrate?: number;\n initialBufferDuration?: number;\n onSeek?(event: NativeSyntheticEvent<{ position: number }>): void;\n onData?(event: NativeSyntheticEvent<{ playerData: PlayerData }>): void;\n onVideoStatistics?(\n event: NativeSyntheticEvent<{ videoData: VideoData }>\n ): void;\n onPlayerStateChange?(\n event: NativeSyntheticEvent<{ state: PlayerState }>\n ): void;\n onDurationChange?(\n event: NativeSyntheticEvent<{ duration: number | null }>\n ): void;\n onQualityChange?(event: NativeSyntheticEvent<{ quality: Quality }>): void;\n onRebuffering?(): void;\n onLoadStart?(): void;\n onLoad?(event: NativeSyntheticEvent<{ duration: number | null }>): void;\n onLiveLatencyChange?(\n event: NativeSyntheticEvent<{ liveLatency: number }>\n ): void;\n onTextCue?(event: NativeSyntheticEvent<{ textCue: TextCue }>): void;\n onTextMetadataCue?(\n event: NativeSyntheticEvent<{ textMetadataCue: TextMetadataCue }>\n ): void;\n onProgress?(event: NativeSyntheticEvent<{ position: number }>): void;\n onError?(event: NativeSyntheticEvent<{ error: string }>): void;\n onTimePoint?(event: NativeSyntheticEvent<{ position: number }>): void;\n};\n\nconst VIEW_NAME = 'AmazonIvs';\n\nconst IVSPlayer = requireNativeComponent<IVSPlayerProps>(VIEW_NAME);\n\ntype Props = {\n style?: ViewStyle;\n testID?: string;\n paused?: boolean;\n muted?: boolean;\n autoplay?: boolean;\n streamUrl?: string;\n liveLowLatency?: boolean;\n playbackRate?: number;\n logLevel?: LogLevel;\n resizeMode?: ResizeMode;\n progressInterval?: number;\n volume?: number;\n quality?: Quality | null;\n autoMaxQuality?: Quality | null;\n autoQualityMode?: boolean;\n breakpoints?: number[];\n maxBitrate?: number;\n initialBufferDuration?: number;\n onSeek?(position: number): void;\n onData?(data: PlayerData): void;\n onVideoStatistics?(data: VideoData): void;\n onPlayerStateChange?(state: PlayerState): void;\n onDurationChange?(duration: number | null): void;\n onQualityChange?(quality: Quality | null): void;\n onRebuffering?(): void;\n onLoadStart?(): void;\n onLoad?(duration: number | null): void;\n onLiveLatencyChange?(liveLatency: number): void;\n onTextCue?(textCue: TextCue): void;\n onTextMetadataCue?(textMetadataCue: TextMetadataCue): void;\n onProgress?(progress: number): void;\n onError?(error: string): void;\n onTimePoint?(position: number): void;\n children?: React.ReactNode;\n};\n\nfunction parseDuration(duration: number | null) {\n if (duration == null) {\n return duration;\n }\n return duration > 0 ? duration : Infinity;\n}\n\nconst IVSPlayerContainer = React.forwardRef<IVSPlayerRef, Props>(\n (\n {\n style,\n streamUrl,\n paused,\n muted,\n resizeMode,\n autoplay = true,\n liveLowLatency,\n playbackRate,\n logLevel,\n progressInterval,\n volume,\n quality,\n autoMaxQuality,\n autoQualityMode,\n breakpoints = [],\n maxBitrate,\n initialBufferDuration,\n onSeek,\n onData,\n onVideoStatistics,\n onPlayerStateChange,\n onDurationChange,\n onQualityChange,\n onRebuffering,\n onLoadStart,\n onLoad,\n onLiveLatencyChange,\n onTextCue,\n onTextMetadataCue,\n onProgress,\n onError,\n onTimePoint,\n children,\n },\n ref\n ) => {\n const mediaPlayerRef = useRef(null);\n const initialized = useRef(false);\n\n const play = useCallback(() => {\n UIManager.dispatchViewManagerCommand(\n findNodeHandle(mediaPlayerRef.current),\n UIManager.getViewManagerConfig(VIEW_NAME).Commands.play,\n []\n );\n }, []);\n\n const pause = useCallback(() => {\n UIManager.dispatchViewManagerCommand(\n findNodeHandle(mediaPlayerRef.current),\n UIManager.getViewManagerConfig(VIEW_NAME).Commands.pause,\n []\n );\n }, []);\n\n const seekTo = useCallback((value) => {\n UIManager.dispatchViewManagerCommand(\n findNodeHandle(mediaPlayerRef.current),\n\n UIManager.getViewManagerConfig(VIEW_NAME).Commands.seekTo,\n [value]\n );\n }, []);\n\n const togglePip = useCallback(() => {\n UIManager.dispatchViewManagerCommand(\n findNodeHandle(mediaPlayerRef.current),\n\n UIManager.getViewManagerConfig(VIEW_NAME).Commands.togglePip,\n []\n );\n }, []);\n\n useEffect(() => {\n if (initialized.current || autoplay) {\n if (paused) {\n pause();\n } else {\n play();\n }\n }\n initialized.current = true;\n }, [pause, paused, play, autoplay]);\n\n useImperativeHandle(\n ref,\n () => ({\n play,\n pause,\n seekTo,\n togglePip,\n }),\n [play, pause, seekTo, togglePip]\n );\n\n const onSeekHandler = (\n event: NativeSyntheticEvent<{ position: number }>\n ) => {\n const { position } = event.nativeEvent;\n onSeek?.(position);\n };\n\n const onPlayerStateChangeHandler = (\n event: NativeSyntheticEvent<{ state: PlayerState }>\n ) => {\n const { state } = event.nativeEvent;\n onPlayerStateChange?.(state);\n };\n\n const onDurationChangeHandler = (\n event: NativeSyntheticEvent<{ duration: number | null }>\n ) => {\n const { duration } = event.nativeEvent;\n\n onDurationChange?.(parseDuration(duration));\n };\n\n const onQualityChangeHandler = (\n event: NativeSyntheticEvent<{ quality: Quality }>\n ) => {\n const { quality: newQuality } = event.nativeEvent;\n onQualityChange?.(newQuality);\n };\n\n const onLoadHandler = (\n event: NativeSyntheticEvent<{\n duration: number | null;\n }>\n ) => {\n if (!paused) {\n play();\n } else {\n pause();\n }\n\n const { duration } = event.nativeEvent;\n\n onLoad?.(parseDuration(duration));\n };\n\n const onLiveLatencyChangeHandler = (\n event: NativeSyntheticEvent<{ liveLatency: number }>\n ) => {\n const { liveLatency } = event.nativeEvent;\n onLiveLatencyChange?.(liveLatency);\n };\n\n const onDataHandler = (\n event: NativeSyntheticEvent<{ playerData: PlayerData }>\n ) => {\n const { playerData } = event.nativeEvent;\n onData?.(playerData);\n };\n\n const onTextCueHandler = (\n event: NativeSyntheticEvent<{ textCue: TextCue }>\n ) => {\n const { textCue } = event.nativeEvent;\n onTextCue?.(textCue);\n };\n\n const onVideoStatisticsHandler = (\n event: NativeSyntheticEvent<{ videoData: VideoData }>\n ) => {\n const { videoData } = event.nativeEvent;\n const statistics: VideoData = {\n ...videoData,\n duration: parseDuration(videoData.duration),\n };\n onVideoStatistics?.(statistics);\n };\n\n const onTextMetadataCueHandler = (\n event: NativeSyntheticEvent<{ textMetadataCue: TextMetadataCue }>\n ) => {\n const { textMetadataCue } = event.nativeEvent;\n onTextMetadataCue?.(textMetadataCue);\n };\n\n const onProgressHandler = (\n event: NativeSyntheticEvent<{ position: number }>\n ) => {\n const { position } = event.nativeEvent;\n onProgress?.(position);\n };\n\n const onErrorHandler = (event: NativeSyntheticEvent<{ error: string }>) => {\n const { error } = event.nativeEvent;\n onError?.(error);\n };\n\n const onTimePointHandler = (\n event: NativeSyntheticEvent<{ position: number }>\n ) => {\n const { position } = event.nativeEvent;\n onTimePoint?.(position);\n };\n\n return (\n <View style={[styles.container, style]} ref={ref as any}>\n <IVSPlayer\n testID=\"IVSPlayer\"\n muted={muted}\n liveLowLatency={liveLowLatency}\n style={styles.mediaPlayer}\n ref={mediaPlayerRef}\n playbackRate={playbackRate}\n streamUrl={streamUrl}\n logLevel={logLevel}\n resizeMode={resizeMode}\n progressInterval={progressInterval}\n volume={volume}\n quality={quality}\n initialBufferDuration={initialBufferDuration}\n autoMaxQuality={autoMaxQuality}\n autoQualityMode={autoQualityMode}\n breakpoints={breakpoints}\n maxBitrate={maxBitrate}\n onVideoStatistics={\n onVideoStatistics ? onVideoStatisticsHandler : undefined\n }\n onData={onDataHandler}\n onSeek={onSeekHandler}\n onQualityChange={onQualityChangeHandler}\n onPlayerStateChange={onPlayerStateChangeHandler}\n onDurationChange={onDurationChangeHandler}\n onRebuffering={onRebuffering}\n onLoadStart={onLoadStart}\n onLoad={onLoadHandler}\n onTextCue={onTextCueHandler}\n onTextMetadataCue={onTextMetadataCueHandler}\n onProgress={onProgressHandler}\n onLiveLatencyChange={\n onLiveLatencyChange ? onLiveLatencyChangeHandler : undefined\n }\n onError={onErrorHandler}\n onTimePoint={onTimePointHandler}\n />\n <View style={styles.children}>{children}</View>\n </View>\n );\n }\n);\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n mediaPlayer: {\n flex: 1,\n },\n children: {\n position: 'absolute',\n width: '100%',\n height: '100%',\n },\n});\n\nexport default IVSPlayerContainer;\n"]}
1
+ {"version":3,"sources":["IVSPlayer.tsx"],"names":["React","useCallback","useEffect","useImperativeHandle","useRef","requireNativeComponent","StyleSheet","UIManager","findNodeHandle","View","Platform","VIEW_NAME","IVSPlayer","parseDuration","duration","Infinity","IVSPlayerContainer","forwardRef","ref","style","streamUrl","paused","muted","loop","resizeMode","autoplay","liveLowLatency","playbackRate","logLevel","progressInterval","volume","quality","autoMaxQuality","autoQualityMode","breakpoints","maxBitrate","initialBufferDuration","onSeek","onData","onVideoStatistics","onPlayerStateChange","onDurationChange","onQualityChange","onRebuffering","onLoadStart","onLoad","onLiveLatencyChange","onTextCue","onTextMetadataCue","onProgress","onError","onTimePoint","children","mediaPlayerRef","initialized","play","dispatchViewManagerCommand","current","getViewManagerConfig","Commands","pause","seekTo","value","setOrigin","togglePip","onSeekHandler","event","position","nativeEvent","onPlayerStateChangeHandler","state","onDurationChangeHandler","onQualityChangeHandler","newQuality","onLoadHandler","OS","shouldAutoPlay","onLiveLatencyChangeHandler","liveLatency","onDataHandler","playerData","onTextCueHandler","textCue","onVideoStatisticsHandler","videoData","statistics","onTextMetadataCueHandler","textMetadataCue","onProgressHandler","onErrorHandler","error","onTimePointHandler","styles","container","mediaPlayer","undefined","create","flex","width","height"],"mappings":"AAAA,OAAOA,KAAP,IACEC,WADF,EAEEC,SAFF,EAGEC,mBAHF,EAIEC,MAJF,QAKO,OALP;AAMA,SACEC,sBADF,EAGEC,UAHF,EAIEC,SAJF,EAKEC,cALF,EAMEC,IANF,EAQEC,QARF,QASO,cATP;AAmEA,MAAMC,SAAS,GAAG,WAAlB;AAEA,MAAMC,SAAS,GAAGP,sBAAsB,CAAiBM,SAAjB,CAAxC;;AAwCA,SAASE,aAAT,CAAuBC,QAAvB,EAAgD;AAC9C,MAAIA,QAAQ,IAAI,IAAhB,EAAsB;AACpB,WAAOA,QAAP;AACD;;AACD,SAAOA,QAAQ,GAAG,CAAX,GAAeA,QAAf,GAA0BC,QAAjC;AACD;;AAED,MAAMC,kBAAkB,gBAAGhB,KAAK,CAACiB,UAAN,CACzB,OAqCEC,GArCF,KAsCK;AAAA,MArCH;AACEC,IAAAA,KADF;AAEEC,IAAAA,SAFF;AAGEC,IAAAA,MAHF;AAIEC,IAAAA,KAJF;AAKEC,IAAAA,IAAI,GAAG,KALT;AAMEC,IAAAA,UANF;AAOEC,IAAAA,QAAQ,GAAG,IAPb;AAQEC,IAAAA,cARF;AASEC,IAAAA,YATF;AAUEC,IAAAA,QAVF;AAWEC,IAAAA,gBAXF;AAYEC,IAAAA,MAZF;AAaEC,IAAAA,OAbF;AAcEC,IAAAA,cAdF;AAeEC,IAAAA,eAfF;AAgBEC,IAAAA,WAAW,GAAG,EAhBhB;AAiBEC,IAAAA,UAjBF;AAkBEC,IAAAA,qBAlBF;AAmBEC,IAAAA,MAnBF;AAoBEC,IAAAA,MApBF;AAqBEC,IAAAA,iBArBF;AAsBEC,IAAAA,mBAtBF;AAuBEC,IAAAA,gBAvBF;AAwBEC,IAAAA,eAxBF;AAyBEC,IAAAA,aAzBF;AA0BEC,IAAAA,WA1BF;AA2BEC,IAAAA,MA3BF;AA4BEC,IAAAA,mBA5BF;AA6BEC,IAAAA,SA7BF;AA8BEC,IAAAA,iBA9BF;AA+BEC,IAAAA,UA/BF;AAgCEC,IAAAA,OAhCF;AAiCEC,IAAAA,WAjCF;AAkCEC,IAAAA;AAlCF,GAqCG;AACH,QAAMC,cAAc,GAAGjD,MAAM,CAAC,IAAD,CAA7B;AACA,QAAMkD,WAAW,GAAGlD,MAAM,CAAC,KAAD,CAA1B;AAEA,QAAMmD,IAAI,GAAGtD,WAAW,CAAC,MAAM;AAC7BM,IAAAA,SAAS,CAACiD,0BAAV,CACEhD,cAAc,CAAC6C,cAAc,CAACI,OAAhB,CADhB,EAEElD,SAAS,CAACmD,oBAAV,CAA+B/C,SAA/B,EAA0CgD,QAA1C,CAAmDJ,IAFrD,EAGE,EAHF;AAKD,GANuB,EAMrB,EANqB,CAAxB;AAQA,QAAMK,KAAK,GAAG3D,WAAW,CAAC,MAAM;AAC9BM,IAAAA,SAAS,CAACiD,0BAAV,CACEhD,cAAc,CAAC6C,cAAc,CAACI,OAAhB,CADhB,EAEElD,SAAS,CAACmD,oBAAV,CAA+B/C,SAA/B,EAA0CgD,QAA1C,CAAmDC,KAFrD,EAGE,EAHF;AAKD,GANwB,EAMtB,EANsB,CAAzB;AAQA,QAAMC,MAAM,GAAG5D,WAAW,CAAE6D,KAAD,IAAW;AACpCvD,IAAAA,SAAS,CAACiD,0BAAV,CACEhD,cAAc,CAAC6C,cAAc,CAACI,OAAhB,CADhB,EAGElD,SAAS,CAACmD,oBAAV,CAA+B/C,SAA/B,EAA0CgD,QAA1C,CAAmDE,MAHrD,EAIE,CAACC,KAAD,CAJF;AAMD,GAPyB,EAOvB,EAPuB,CAA1B;AASA,QAAMC,SAAS,GAAG9D,WAAW,CAAE6D,KAAD,IAAW;AACvCvD,IAAAA,SAAS,CAACiD,0BAAV,CACEhD,cAAc,CAAC6C,cAAc,CAACI,OAAhB,CADhB,EAGElD,SAAS,CAACmD,oBAAV,CAA+B/C,SAA/B,EAA0CgD,QAA1C,CAAmDI,SAHrD,EAIE,CAACD,KAAD,CAJF;AAMD,GAP4B,EAO1B,EAP0B,CAA7B;AASA,QAAME,SAAS,GAAG/D,WAAW,CAAC,MAAM;AAClCM,IAAAA,SAAS,CAACiD,0BAAV,CACEhD,cAAc,CAAC6C,cAAc,CAACI,OAAhB,CADhB,EAGElD,SAAS,CAACmD,oBAAV,CAA+B/C,SAA/B,EAA0CgD,QAA1C,CAAmDK,SAHrD,EAIE,EAJF;AAMD,GAP4B,EAO1B,EAP0B,CAA7B;AASA9D,EAAAA,SAAS,CAAC,MAAM;AACd,QAAIoD,WAAW,CAACG,OAAZ,IAAuBhC,QAA3B,EAAqC;AACnC,UAAIJ,MAAJ,EAAY;AACVuC,QAAAA,KAAK;AACN,OAFD,MAEO;AACLL,QAAAA,IAAI;AACL;AACF;;AACDD,IAAAA,WAAW,CAACG,OAAZ,GAAsB,IAAtB;AACD,GATQ,EASN,CAACG,KAAD,EAAQvC,MAAR,EAAgBkC,IAAhB,EAAsB9B,QAAtB,CATM,CAAT;AAWAtB,EAAAA,mBAAmB,CACjBe,GADiB,EAEjB,OAAO;AACLqC,IAAAA,IADK;AAELK,IAAAA,KAFK;AAGLC,IAAAA,MAHK;AAILE,IAAAA,SAJK;AAKLC,IAAAA;AALK,GAAP,CAFiB,EASjB,CAACT,IAAD,EAAOK,KAAP,EAAcC,MAAd,EAAsBE,SAAtB,EAAiCC,SAAjC,CATiB,CAAnB;;AAYA,QAAMC,aAAa,GACjBC,KADoB,IAEjB;AACH,UAAM;AAAEC,MAAAA;AAAF,QAAeD,KAAK,CAACE,WAA3B;AACA/B,IAAAA,MAAM,SAAN,IAAAA,MAAM,WAAN,YAAAA,MAAM,CAAG8B,QAAH,CAAN;AACD,GALD;;AAOA,QAAME,0BAA0B,GAC9BH,KADiC,IAE9B;AACH,UAAM;AAAEI,MAAAA;AAAF,QAAYJ,KAAK,CAACE,WAAxB;AACA5B,IAAAA,mBAAmB,SAAnB,IAAAA,mBAAmB,WAAnB,YAAAA,mBAAmB,CAAG8B,KAAH,CAAnB;AACD,GALD;;AAOA,QAAMC,uBAAuB,GAC3BL,KAD8B,IAE3B;AACH,UAAM;AAAEpD,MAAAA;AAAF,QAAeoD,KAAK,CAACE,WAA3B;AAEA3B,IAAAA,gBAAgB,SAAhB,IAAAA,gBAAgB,WAAhB,YAAAA,gBAAgB,CAAG5B,aAAa,CAACC,QAAD,CAAhB,CAAhB;AACD,GAND;;AAQA,QAAM0D,sBAAsB,GAC1BN,KAD6B,IAE1B;AACH,UAAM;AAAEnC,MAAAA,OAAO,EAAE0C;AAAX,QAA0BP,KAAK,CAACE,WAAtC;AACA1B,IAAAA,eAAe,SAAf,IAAAA,eAAe,WAAf,YAAAA,eAAe,CAAG+B,UAAH,CAAf;AACD,GALD;;AAOA,QAAMC,aAAa,GACjBR,KADoB,IAIjB;AACH,QAAIxD,QAAQ,CAACiE,EAAT,KAAgB,SAApB,EAA+B;AAC7B,YAAMC,cAAc,GAAGnD,QAAQ,IAAI,CAACJ,MAApC;AACAuD,MAAAA,cAAc,GAAGrB,IAAI,EAAP,GAAYK,KAAK,EAA/B;AACD;;AAED,UAAM;AAAE9C,MAAAA;AAAF,QAAeoD,KAAK,CAACE,WAA3B;AAEAvB,IAAAA,MAAM,SAAN,IAAAA,MAAM,WAAN,YAAAA,MAAM,CAAGhC,aAAa,CAACC,QAAD,CAAhB,CAAN;AACD,GAbD;;AAeA,QAAM+D,0BAA0B,GAC9BX,KADiC,IAE9B;AACH,UAAM;AAAEY,MAAAA;AAAF,QAAkBZ,KAAK,CAACE,WAA9B;AACAtB,IAAAA,mBAAmB,SAAnB,IAAAA,mBAAmB,WAAnB,YAAAA,mBAAmB,CAAGgC,WAAH,CAAnB;AACD,GALD;;AAOA,QAAMC,aAAa,GACjBb,KADoB,IAEjB;AACH,UAAM;AAAEc,MAAAA;AAAF,QAAiBd,KAAK,CAACE,WAA7B;AACA9B,IAAAA,MAAM,SAAN,IAAAA,MAAM,WAAN,YAAAA,MAAM,CAAG0C,UAAH,CAAN;AACD,GALD;;AAOA,QAAMC,gBAAgB,GACpBf,KADuB,IAEpB;AACH,UAAM;AAAEgB,MAAAA;AAAF,QAAchB,KAAK,CAACE,WAA1B;AACArB,IAAAA,SAAS,SAAT,IAAAA,SAAS,WAAT,YAAAA,SAAS,CAAGmC,OAAH,CAAT;AACD,GALD;;AAOA,QAAMC,wBAAwB,GAC5BjB,KAD+B,IAE5B;AACH,UAAM;AAAEkB,MAAAA;AAAF,QAAgBlB,KAAK,CAACE,WAA5B;AACA,UAAMiB,UAAqB,GAAG,EAC5B,GAAGD,SADyB;AAE5BtE,MAAAA,QAAQ,EAAED,aAAa,CAACuE,SAAS,CAACtE,QAAX;AAFK,KAA9B;AAIAyB,IAAAA,iBAAiB,SAAjB,IAAAA,iBAAiB,WAAjB,YAAAA,iBAAiB,CAAG8C,UAAH,CAAjB;AACD,GATD;;AAWA,QAAMC,wBAAwB,GAC5BpB,KAD+B,IAE5B;AACH,UAAM;AAAEqB,MAAAA;AAAF,QAAsBrB,KAAK,CAACE,WAAlC;AACApB,IAAAA,iBAAiB,SAAjB,IAAAA,iBAAiB,WAAjB,YAAAA,iBAAiB,CAAGuC,eAAH,CAAjB;AACD,GALD;;AAOA,QAAMC,iBAAiB,GACrBtB,KADwB,IAErB;AACH,UAAM;AAAEC,MAAAA;AAAF,QAAeD,KAAK,CAACE,WAA3B;AACAnB,IAAAA,UAAU,SAAV,IAAAA,UAAU,WAAV,YAAAA,UAAU,CAAGkB,QAAH,CAAV;AACD,GALD;;AAOA,QAAMsB,cAAc,GAAIvB,KAAD,IAAoD;AACzE,UAAM;AAAEwB,MAAAA;AAAF,QAAYxB,KAAK,CAACE,WAAxB;AACAlB,IAAAA,OAAO,SAAP,IAAAA,OAAO,WAAP,YAAAA,OAAO,CAAGwC,KAAH,CAAP;AACD,GAHD;;AAKA,QAAMC,kBAAkB,GACtBzB,KADyB,IAEtB;AACH,UAAM;AAAEC,MAAAA;AAAF,QAAeD,KAAK,CAACE,WAA3B;AACAjB,IAAAA,WAAW,SAAX,IAAAA,WAAW,WAAX,YAAAA,WAAW,CAAGgB,QAAH,CAAX;AACD,GALD;;AAOA,sBACE,oBAAC,IAAD;AAAM,IAAA,KAAK,EAAE,CAACyB,MAAM,CAACC,SAAR,EAAmB1E,KAAnB,CAAb;AAAwC,IAAA,GAAG,EAAED;AAA7C,kBACE,oBAAC,SAAD;AACE,IAAA,MAAM,EAAC,WADT;AAEE,IAAA,KAAK,EAAEI,KAFT;AAGE,IAAA,IAAI,EAAEC,IAHR;AAIE,IAAA,cAAc,EAAEG,cAJlB;AAKE,IAAA,KAAK,EAAEkE,MAAM,CAACE,WALhB;AAME,IAAA,GAAG,EAAEzC,cANP;AAOE,IAAA,YAAY,EAAE1B,YAPhB;AAQE,IAAA,SAAS,EAAEP,SARb;AASE,IAAA,QAAQ,EAAEQ,QATZ;AAUE,IAAA,UAAU,EAAEJ,UAVd;AAWE,IAAA,gBAAgB,EAAEK,gBAXpB;AAYE,IAAA,MAAM,EAAEC,MAZV;AAaE,IAAA,OAAO,EAAEC,OAbX;AAcE,IAAA,qBAAqB,EAAEK,qBAdzB;AAeE,IAAA,cAAc,EAAEJ,cAflB;AAgBE,IAAA,eAAe,EAAEC,eAhBnB;AAiBE,IAAA,WAAW,EAAEC,WAjBf;AAkBE,IAAA,UAAU,EAAEC,UAlBd;AAmBE,IAAA,iBAAiB,EACfI,iBAAiB,GAAG4C,wBAAH,GAA8BY,SApBnD;AAsBE,IAAA,MAAM,EAAEhB,aAtBV;AAuBE,IAAA,MAAM,EAAEd,aAvBV;AAwBE,IAAA,eAAe,EAAEO,sBAxBnB;AAyBE,IAAA,mBAAmB,EAAEH,0BAzBvB;AA0BE,IAAA,gBAAgB,EAAEE,uBA1BpB;AA2BE,IAAA,aAAa,EAAE5B,aA3BjB;AA4BE,IAAA,WAAW,EAAEC,WA5Bf;AA6BE,IAAA,MAAM,EAAE8B,aA7BV;AA8BE,IAAA,SAAS,EAAEO,gBA9Bb;AA+BE,IAAA,iBAAiB,EAAEK,wBA/BrB;AAgCE,IAAA,UAAU,EAAEE,iBAhCd;AAiCE,IAAA,mBAAmB,EACjB1C,mBAAmB,GAAG+B,0BAAH,GAAgCkB,SAlCvD;AAoCE,IAAA,OAAO,EAAEN,cApCX;AAqCE,IAAA,WAAW,EAAEE;AArCf,IADF,eAwCE,oBAAC,IAAD;AAAM,IAAA,KAAK,EAAEC,MAAM,CAACxC;AAApB,KAA+BA,QAA/B,CAxCF,CADF;AA4CD,CA/PwB,CAA3B;AAkQA,MAAMwC,MAAM,GAAGtF,UAAU,CAAC0F,MAAX,CAAkB;AAC/BH,EAAAA,SAAS,EAAE;AACTI,IAAAA,IAAI,EAAE;AADG,GADoB;AAI/BH,EAAAA,WAAW,EAAE;AACXG,IAAAA,IAAI,EAAE;AADK,GAJkB;AAO/B7C,EAAAA,QAAQ,EAAE;AACRe,IAAAA,QAAQ,EAAE,UADF;AAER+B,IAAAA,KAAK,EAAE,MAFC;AAGRC,IAAAA,MAAM,EAAE;AAHA;AAPqB,CAAlB,CAAf;AAcA,eAAenF,kBAAf","sourcesContent":["import React, {\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n} from 'react';\nimport {\n requireNativeComponent,\n ViewStyle,\n StyleSheet,\n UIManager,\n findNodeHandle,\n View,\n NativeSyntheticEvent,\n Platform,\n} from 'react-native';\nimport type { LogLevel, PlayerState } from './enums';\nimport type {\n Quality,\n PlayerData,\n TextCue,\n TextMetadataCue,\n VideoData,\n IVSPlayerRef,\n ResizeMode,\n} from './types';\n\ntype IVSPlayerProps = {\n style?: ViewStyle;\n testID?: string;\n ref: any;\n muted?: boolean;\n loop?: boolean;\n liveLowLatency?: boolean;\n playbackRate?: number;\n streamUrl?: string;\n resizeMode?: ResizeMode;\n logLevel?: LogLevel;\n progressInterval?: number;\n volume?: number;\n quality?: Quality | null;\n autoMaxQuality?: Quality | null;\n autoQualityMode?: boolean;\n breakpoints?: number[];\n maxBitrate?: number;\n initialBufferDuration?: number;\n onSeek?(event: NativeSyntheticEvent<{ position: number }>): void;\n onData?(event: NativeSyntheticEvent<{ playerData: PlayerData }>): void;\n onVideoStatistics?(\n event: NativeSyntheticEvent<{ videoData: VideoData }>\n ): void;\n onPlayerStateChange?(\n event: NativeSyntheticEvent<{ state: PlayerState }>\n ): void;\n onDurationChange?(\n event: NativeSyntheticEvent<{ duration: number | null }>\n ): void;\n onQualityChange?(event: NativeSyntheticEvent<{ quality: Quality }>): void;\n onRebuffering?(): void;\n onLoadStart?(): void;\n onLoad?(event: NativeSyntheticEvent<{ duration: number | null }>): void;\n onLiveLatencyChange?(\n event: NativeSyntheticEvent<{ liveLatency: number }>\n ): void;\n onTextCue?(event: NativeSyntheticEvent<{ textCue: TextCue }>): void;\n onTextMetadataCue?(\n event: NativeSyntheticEvent<{ textMetadataCue: TextMetadataCue }>\n ): void;\n onProgress?(event: NativeSyntheticEvent<{ position: number }>): void;\n onError?(event: NativeSyntheticEvent<{ error: string }>): void;\n onTimePoint?(event: NativeSyntheticEvent<{ position: number }>): void;\n};\n\nconst VIEW_NAME = 'AmazonIvs';\n\nconst IVSPlayer = requireNativeComponent<IVSPlayerProps>(VIEW_NAME);\n\ntype Props = {\n style?: ViewStyle;\n testID?: string;\n paused?: boolean;\n muted?: boolean;\n loop?: boolean;\n autoplay?: boolean;\n streamUrl?: string;\n liveLowLatency?: boolean;\n playbackRate?: number;\n logLevel?: LogLevel;\n resizeMode?: ResizeMode;\n progressInterval?: number;\n volume?: number;\n quality?: Quality | null;\n autoMaxQuality?: Quality | null;\n autoQualityMode?: boolean;\n breakpoints?: number[];\n maxBitrate?: number;\n initialBufferDuration?: number;\n onSeek?(position: number): void;\n onData?(data: PlayerData): void;\n onVideoStatistics?(data: VideoData): void;\n onPlayerStateChange?(state: PlayerState): void;\n onDurationChange?(duration: number | null): void;\n onQualityChange?(quality: Quality | null): void;\n onRebuffering?(): void;\n onLoadStart?(): void;\n onLoad?(duration: number | null): void;\n onLiveLatencyChange?(liveLatency: number): void;\n onTextCue?(textCue: TextCue): void;\n onTextMetadataCue?(textMetadataCue: TextMetadataCue): void;\n onProgress?(progress: number): void;\n onError?(error: string): void;\n onTimePoint?(position: number): void;\n children?: React.ReactNode;\n};\n\nfunction parseDuration(duration: number | null) {\n if (duration == null) {\n return duration;\n }\n return duration > 0 ? duration : Infinity;\n}\n\nconst IVSPlayerContainer = React.forwardRef<IVSPlayerRef, Props>(\n (\n {\n style,\n streamUrl,\n paused,\n muted,\n loop = false,\n resizeMode,\n autoplay = true,\n liveLowLatency,\n playbackRate,\n logLevel,\n progressInterval,\n volume,\n quality,\n autoMaxQuality,\n autoQualityMode,\n breakpoints = [],\n maxBitrate,\n initialBufferDuration,\n onSeek,\n onData,\n onVideoStatistics,\n onPlayerStateChange,\n onDurationChange,\n onQualityChange,\n onRebuffering,\n onLoadStart,\n onLoad,\n onLiveLatencyChange,\n onTextCue,\n onTextMetadataCue,\n onProgress,\n onError,\n onTimePoint,\n children,\n },\n ref\n ) => {\n const mediaPlayerRef = useRef(null);\n const initialized = useRef(false);\n\n const play = useCallback(() => {\n UIManager.dispatchViewManagerCommand(\n findNodeHandle(mediaPlayerRef.current),\n UIManager.getViewManagerConfig(VIEW_NAME).Commands.play,\n []\n );\n }, []);\n\n const pause = useCallback(() => {\n UIManager.dispatchViewManagerCommand(\n findNodeHandle(mediaPlayerRef.current),\n UIManager.getViewManagerConfig(VIEW_NAME).Commands.pause,\n []\n );\n }, []);\n\n const seekTo = useCallback((value) => {\n UIManager.dispatchViewManagerCommand(\n findNodeHandle(mediaPlayerRef.current),\n\n UIManager.getViewManagerConfig(VIEW_NAME).Commands.seekTo,\n [value]\n );\n }, []);\n\n const setOrigin = useCallback((value) => {\n UIManager.dispatchViewManagerCommand(\n findNodeHandle(mediaPlayerRef.current),\n\n UIManager.getViewManagerConfig(VIEW_NAME).Commands.setOrigin,\n [value]\n );\n }, []);\n\n const togglePip = useCallback(() => {\n UIManager.dispatchViewManagerCommand(\n findNodeHandle(mediaPlayerRef.current),\n\n UIManager.getViewManagerConfig(VIEW_NAME).Commands.togglePip,\n []\n );\n }, []);\n\n useEffect(() => {\n if (initialized.current || autoplay) {\n if (paused) {\n pause();\n } else {\n play();\n }\n }\n initialized.current = true;\n }, [pause, paused, play, autoplay]);\n\n useImperativeHandle(\n ref,\n () => ({\n play,\n pause,\n seekTo,\n setOrigin,\n togglePip,\n }),\n [play, pause, seekTo, setOrigin, togglePip]\n );\n\n const onSeekHandler = (\n event: NativeSyntheticEvent<{ position: number }>\n ) => {\n const { position } = event.nativeEvent;\n onSeek?.(position);\n };\n\n const onPlayerStateChangeHandler = (\n event: NativeSyntheticEvent<{ state: PlayerState }>\n ) => {\n const { state } = event.nativeEvent;\n onPlayerStateChange?.(state);\n };\n\n const onDurationChangeHandler = (\n event: NativeSyntheticEvent<{ duration: number | null }>\n ) => {\n const { duration } = event.nativeEvent;\n\n onDurationChange?.(parseDuration(duration));\n };\n\n const onQualityChangeHandler = (\n event: NativeSyntheticEvent<{ quality: Quality }>\n ) => {\n const { quality: newQuality } = event.nativeEvent;\n onQualityChange?.(newQuality);\n };\n\n const onLoadHandler = (\n event: NativeSyntheticEvent<{\n duration: number | null;\n }>\n ) => {\n if (Platform.OS === 'android') {\n const shouldAutoPlay = autoplay && !paused;\n shouldAutoPlay ? play() : pause();\n }\n\n const { duration } = event.nativeEvent;\n\n onLoad?.(parseDuration(duration));\n };\n\n const onLiveLatencyChangeHandler = (\n event: NativeSyntheticEvent<{ liveLatency: number }>\n ) => {\n const { liveLatency } = event.nativeEvent;\n onLiveLatencyChange?.(liveLatency);\n };\n\n const onDataHandler = (\n event: NativeSyntheticEvent<{ playerData: PlayerData }>\n ) => {\n const { playerData } = event.nativeEvent;\n onData?.(playerData);\n };\n\n const onTextCueHandler = (\n event: NativeSyntheticEvent<{ textCue: TextCue }>\n ) => {\n const { textCue } = event.nativeEvent;\n onTextCue?.(textCue);\n };\n\n const onVideoStatisticsHandler = (\n event: NativeSyntheticEvent<{ videoData: VideoData }>\n ) => {\n const { videoData } = event.nativeEvent;\n const statistics: VideoData = {\n ...videoData,\n duration: parseDuration(videoData.duration),\n };\n onVideoStatistics?.(statistics);\n };\n\n const onTextMetadataCueHandler = (\n event: NativeSyntheticEvent<{ textMetadataCue: TextMetadataCue }>\n ) => {\n const { textMetadataCue } = event.nativeEvent;\n onTextMetadataCue?.(textMetadataCue);\n };\n\n const onProgressHandler = (\n event: NativeSyntheticEvent<{ position: number }>\n ) => {\n const { position } = event.nativeEvent;\n onProgress?.(position);\n };\n\n const onErrorHandler = (event: NativeSyntheticEvent<{ error: string }>) => {\n const { error } = event.nativeEvent;\n onError?.(error);\n };\n\n const onTimePointHandler = (\n event: NativeSyntheticEvent<{ position: number }>\n ) => {\n const { position } = event.nativeEvent;\n onTimePoint?.(position);\n };\n\n return (\n <View style={[styles.container, style]} ref={ref as any}>\n <IVSPlayer\n testID=\"IVSPlayer\"\n muted={muted}\n loop={loop}\n liveLowLatency={liveLowLatency}\n style={styles.mediaPlayer}\n ref={mediaPlayerRef}\n playbackRate={playbackRate}\n streamUrl={streamUrl}\n logLevel={logLevel}\n resizeMode={resizeMode}\n progressInterval={progressInterval}\n volume={volume}\n quality={quality}\n initialBufferDuration={initialBufferDuration}\n autoMaxQuality={autoMaxQuality}\n autoQualityMode={autoQualityMode}\n breakpoints={breakpoints}\n maxBitrate={maxBitrate}\n onVideoStatistics={\n onVideoStatistics ? onVideoStatisticsHandler : undefined\n }\n onData={onDataHandler}\n onSeek={onSeekHandler}\n onQualityChange={onQualityChangeHandler}\n onPlayerStateChange={onPlayerStateChangeHandler}\n onDurationChange={onDurationChangeHandler}\n onRebuffering={onRebuffering}\n onLoadStart={onLoadStart}\n onLoad={onLoadHandler}\n onTextCue={onTextCueHandler}\n onTextMetadataCue={onTextMetadataCueHandler}\n onProgress={onProgressHandler}\n onLiveLatencyChange={\n onLiveLatencyChange ? onLiveLatencyChangeHandler : undefined\n }\n onError={onErrorHandler}\n onTimePoint={onTimePointHandler}\n />\n <View style={styles.children}>{children}</View>\n </View>\n );\n }\n);\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n mediaPlayer: {\n flex: 1,\n },\n children: {\n position: 'absolute',\n width: '100%',\n height: '100%',\n },\n});\n\nexport default IVSPlayerContainer;\n"]}
@@ -41,5 +41,6 @@ export type IVSPlayerRef = {|
41
41
  play: () => void,
42
42
  pause: () => void,
43
43
  seekTo: (position: number) => void,
44
+ setOrigin: (origin: string) => void,
44
45
  togglePip: () => void,
45
46
  |};
@@ -7,6 +7,7 @@ declare type Props = {
7
7
  testID?: string;
8
8
  paused?: boolean;
9
9
  muted?: boolean;
10
+ loop?: boolean;
10
11
  autoplay?: boolean;
11
12
  streamUrl?: string;
12
13
  liveLowLatency?: boolean;
@@ -34,6 +34,7 @@ export declare type IVSPlayerRef = {
34
34
  play: () => void;
35
35
  pause: () => void;
36
36
  seekTo: (position: number) => void;
37
+ setOrigin: (origin: string) => void;
37
38
  togglePip: () => void;
38
39
  };
39
40
  export declare type ResizeMode = 'aspectFill' | 'aspectFit' | 'aspectZoom';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "amazon-ivs-react-native-player",
3
- "version": "1.3.0",
3
+ "version": "1.4.1",
4
4
  "description": "amazon-ivs-react-native-player",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
@@ -16,22 +16,28 @@
16
16
  "amazon-ivs-react-native-player.podspec"
17
17
  ],
18
18
  "scripts": {
19
+ "commit": "commit",
19
20
  "test": "jest",
20
21
  "typescript": "tsc --noEmit",
21
22
  "lint": "eslint \"**/*.{js,ts,tsx}\"",
22
- "prepare": "bob build",
23
+ "reset": "git clean -xdfe .vscode && yarn && yarn prepare",
24
+ "markbuild": "tsx ./scripts/example-dot-env.ts",
25
+ "prepare": "bob build && yarn markbuild",
23
26
  "example": "yarn --cwd example",
24
27
  "pods": "cd example && pod-install --quiet",
25
28
  "bootstrap": "yarn example && yarn && yarn pods",
29
+ "e2e:reset": "detox clean-framework-cache && detox build-framework-cache",
26
30
  "e2e:build:android": "detox build --configuration android",
27
31
  "e2e:build:ios": "detox build --configuration ios",
28
32
  "e2e:test:android": "yarn get:testbutler && detox test --configuration android --take-screenshots failing --loglevel verbose",
29
33
  "e2e:test:ios": "detox test --configuration ios --take-screenshots failing --loglevel verbose",
30
34
  "e2e:build:android:release": "detox build --configuration android.emu.release",
31
35
  "e2e:build:ios:release": "detox build --configuration ios.sim.release",
32
- "e2e:test:android:release": "yarn get:testbutler && detox test --configuration android.emu.release --record-logs all --loglevel trace",
33
- "e2e:test:ios:release": "detox test --configuration ios.sim.release --take-screenshots failing",
34
- "get:testbutler": "curl -f -o ./test-butler-app.apk https://repo1.maven.org/maven2/com/linkedin/testbutler/test-butler-app/2.2.1/test-butler-app-2.2.1.apk"
36
+ "e2e:test:android:release": "yarn get:testbutler && detox test --configuration android.emu.release --headless --take-screenshots failing",
37
+ "e2e:test:ios:release": "detox test --configuration ios.sim.release --headless --take-screenshots failing",
38
+ "get:testbutler": "curl -f -o ./test-butler-app.apk https://repo1.maven.org/maven2/com/linkedin/testbutler/test-butler-app/2.2.1/test-butler-app-2.2.1.apk",
39
+ "release:create": "tsx ./scripts/release-create.ts",
40
+ "release:verify": "tsx ./scripts/release-verify.ts"
35
41
  },
36
42
  "keywords": [
37
43
  "react-native",
@@ -52,27 +58,36 @@
52
58
  "@babel/runtime": "^7.16.7",
53
59
  "@callstack/eslint-config": "^11.0.0",
54
60
  "@commitlint/config-conventional": "^13.1.0",
61
+ "@commitlint/prompt-cli": "^17.6.6",
55
62
  "@react-native-community/eslint-config": "^2.0.0",
56
63
  "@testing-library/jest-native": "^4.0.1",
57
- "@testing-library/react-native": "^7.2.0",
64
+ "@testing-library/react-native": "^10.1.0",
65
+ "@types/inquirer": "^9.0.3",
58
66
  "@types/jest": "^26.0.0",
67
+ "@types/node": "^20.4.1",
59
68
  "@types/react": "^17.0.38",
60
- "@types/react-native": "0.66.15",
69
+ "@types/react-native": "0.69.9",
70
+ "@types/semver": "^7.5.0",
71
+ "chalk": "^5.3.0",
61
72
  "commitlint": "^13.1.0",
62
- "detox": "^19.7.1",
73
+ "detox": "^20.1.0",
63
74
  "eslint": "^7.32.0",
64
75
  "eslint-config-prettier": "^7.0.0",
65
76
  "eslint-plugin-detox": "^1.0.0",
66
77
  "eslint-plugin-prettier": "^3.1.3",
67
78
  "husky": "^4.2.5",
68
- "jest": "^27.2.1",
69
- "jest-circus": "^27.2.1",
79
+ "inquirer": "^9.2.7",
80
+ "jest": "^29.3.1",
81
+ "jest-circus": "^29.3.1",
70
82
  "pod-install": "^0.1.0",
71
83
  "prettier": "^2.0.5",
72
- "react": "17.0.2",
73
- "react-native": "0.68.2",
84
+ "react": "18.0.0",
85
+ "react-native": "0.69.9",
74
86
  "react-native-builder-bob": "^0.18.1",
75
- "react-test-renderer": "17.0.1",
87
+ "react-test-renderer": "18.0.0",
88
+ "semver": "^7.5.4",
89
+ "simple-git": "^3.19.1",
90
+ "tsx": "^3.12.7",
76
91
  "typescript": "^4.1.3"
77
92
  },
78
93
  "peerDependencies": {
@@ -92,7 +107,8 @@
92
107
  "husky": {
93
108
  "hooks": {
94
109
  "commit-msg": "commitlint -E HUSKY_GIT_PARAMS",
95
- "pre-commit": "yarn lint && yarn typescript"
110
+ "pre-commit": "yarn lint && yarn typescript",
111
+ "post-commit": "yarn markbuild"
96
112
  }
97
113
  },
98
114
  "commitlint": {
@@ -145,5 +161,6 @@
145
161
  }
146
162
  ]
147
163
  ]
148
- }
164
+ },
165
+ "dependencies": {}
149
166
  }
@@ -22,6 +22,7 @@ declare type Props = {|
22
22
  style?: ViewStyleProp,
23
23
  paused?: boolean,
24
24
  muted?: boolean,
25
+ loop?: boolean,
25
26
  autoplay?: boolean,
26
27
  streamUrl?: string,
27
28
  resizeMode?: ResizeMode,
package/src/IVSPlayer.tsx CHANGED
@@ -12,6 +12,7 @@ import {
12
12
  findNodeHandle,
13
13
  View,
14
14
  NativeSyntheticEvent,
15
+ Platform,
15
16
  } from 'react-native';
16
17
  import type { LogLevel, PlayerState } from './enums';
17
18
  import type {
@@ -29,6 +30,7 @@ type IVSPlayerProps = {
29
30
  testID?: string;
30
31
  ref: any;
31
32
  muted?: boolean;
33
+ loop?: boolean;
32
34
  liveLowLatency?: boolean;
33
35
  playbackRate?: number;
34
36
  streamUrl?: string;
@@ -78,6 +80,7 @@ type Props = {
78
80
  testID?: string;
79
81
  paused?: boolean;
80
82
  muted?: boolean;
83
+ loop?: boolean;
81
84
  autoplay?: boolean;
82
85
  streamUrl?: string;
83
86
  liveLowLatency?: boolean;
@@ -124,6 +127,7 @@ const IVSPlayerContainer = React.forwardRef<IVSPlayerRef, Props>(
124
127
  streamUrl,
125
128
  paused,
126
129
  muted,
130
+ loop = false,
127
131
  resizeMode,
128
132
  autoplay = true,
129
133
  liveLowLatency,
@@ -184,6 +188,15 @@ const IVSPlayerContainer = React.forwardRef<IVSPlayerRef, Props>(
184
188
  );
185
189
  }, []);
186
190
 
191
+ const setOrigin = useCallback((value) => {
192
+ UIManager.dispatchViewManagerCommand(
193
+ findNodeHandle(mediaPlayerRef.current),
194
+
195
+ UIManager.getViewManagerConfig(VIEW_NAME).Commands.setOrigin,
196
+ [value]
197
+ );
198
+ }, []);
199
+
187
200
  const togglePip = useCallback(() => {
188
201
  UIManager.dispatchViewManagerCommand(
189
202
  findNodeHandle(mediaPlayerRef.current),
@@ -210,9 +223,10 @@ const IVSPlayerContainer = React.forwardRef<IVSPlayerRef, Props>(
210
223
  play,
211
224
  pause,
212
225
  seekTo,
226
+ setOrigin,
213
227
  togglePip,
214
228
  }),
215
- [play, pause, seekTo, togglePip]
229
+ [play, pause, seekTo, setOrigin, togglePip]
216
230
  );
217
231
 
218
232
  const onSeekHandler = (
@@ -249,10 +263,9 @@ const IVSPlayerContainer = React.forwardRef<IVSPlayerRef, Props>(
249
263
  duration: number | null;
250
264
  }>
251
265
  ) => {
252
- if (!paused) {
253
- play();
254
- } else {
255
- pause();
266
+ if (Platform.OS === 'android') {
267
+ const shouldAutoPlay = autoplay && !paused;
268
+ shouldAutoPlay ? play() : pause();
256
269
  }
257
270
 
258
271
  const { duration } = event.nativeEvent;
@@ -323,6 +336,7 @@ const IVSPlayerContainer = React.forwardRef<IVSPlayerRef, Props>(
323
336
  <IVSPlayer
324
337
  testID="IVSPlayer"
325
338
  muted={muted}
339
+ loop={loop}
326
340
  liveLowLatency={liveLowLatency}
327
341
  style={styles.mediaPlayer}
328
342
  ref={mediaPlayerRef}
@@ -1,6 +1,6 @@
1
1
  import { render, fireEvent } from '@testing-library/react-native';
2
2
  import React from 'react';
3
- import { UIManager } from 'react-native';
3
+ import { Platform, UIManager } from 'react-native';
4
4
  import type { IVSPlayerRef } from '../types';
5
5
 
6
6
  import IVSPlayer from '../IVSPlayer';
@@ -18,6 +18,7 @@ jest.mock('react-native', () => {
18
18
  play: 1,
19
19
  pause: 2,
20
20
  seekTo: 3,
21
+ setOrigin: 4,
21
22
  togglePip: undefined,
22
23
  },
23
24
  };
@@ -226,8 +227,19 @@ test('Using togglePip on ref calls togglePip on native component', async () => {
226
227
  expect(mockCommandFn).toHaveBeenCalledTimes(2);
227
228
  });
228
229
 
230
+ test('Using setOrigin on ref calls setOrigin on native component', async () => {
231
+ const mockCommandFn = jest.fn();
232
+ const ref = React.createRef<IVSPlayerRef>();
233
+
234
+ render(<IVSPlayer streamUrl={URL} ref={ref} />);
235
+
236
+ UIManager.dispatchViewManagerCommand = mockCommandFn;
237
+ ref.current?.setOrigin('Access-Control-Allow-Origin');
238
+ });
239
+
229
240
  test('Autoplay when onLoad', async () => {
230
241
  const mockCommandFn = jest.fn();
242
+ Platform.OS = 'android';
231
243
 
232
244
  const { findByTestId } = render(<IVSPlayer streamUrl={URL} />);
233
245
  UIManager.dispatchViewManagerCommand = mockCommandFn;
package/src/types.js.flow CHANGED
@@ -41,5 +41,6 @@ export type IVSPlayerRef = {|
41
41
  play: () => void,
42
42
  pause: () => void,
43
43
  seekTo: (position: number) => void,
44
+ setOrigin: (origin: string) => void,
44
45
  togglePip: () => void,
45
46
  |};
package/src/types.ts CHANGED
@@ -39,6 +39,7 @@ export type IVSPlayerRef = {
39
39
  play: () => void;
40
40
  pause: () => void;
41
41
  seekTo: (position: number) => void;
42
+ setOrigin: (origin: string) => void;
42
43
  togglePip: () => void;
43
44
  };
44
45