@pigeonmal/react-native-video 7.0.0-beta.4 → 7.0.0-beta.5

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
@@ -19,6 +19,7 @@ Features:
19
19
  - videoconfig: forceType 'm3u8' or 'mpd' if url not have explicit extension
20
20
  - videoconfig: forceOkhttp cronet by default but still okhttp work
21
21
  - videoconfig: initialSubtitleDelay (ms positive or negative)
22
+ - videoconfig: startPosition (in ms)
22
23
  - player.subtitleDelay for subtitle delay adjust (ms positive or negative)
23
24
  - player.getAllPlayerTracks() for get all current tracks (audios, videos, texts)
24
25
  - player.selectTrackById and selectTrackByIndex for select video or audio or text
@@ -65,7 +65,7 @@ class HybridVideoPlayer() : HybridVideoPlayerSpec() {
65
65
  return@runOnMainThreadSync ExoPlayer.Builder(context).build()
66
66
  }
67
67
 
68
- private lateinit var renderersFactory: MyRenderersFactory
68
+ private var renderersFactory: MyRenderersFactory?
69
69
 
70
70
  var loadedWithSource = false
71
71
  private var currentPlayerView: WeakReference<PlayerView>? = null
@@ -129,8 +129,8 @@ class HybridVideoPlayer() : HybridVideoPlayerSpec() {
129
129
  )
130
130
 
131
131
  override var subtitleDelay: Long by mainThreadProperty(
132
- get = { renderersFactory.getTextOffset() },
133
- set = { value -> runOnMainThread { renderersFactory.setTextOffset(value * 1_000L) } }
132
+ get = { renderersFactory?.getTextOffset() ?: 0L },
133
+ set = { value -> runOnMainThread { renderersFactory?.setTextOffset(value * 1_000L) } }
134
134
  )
135
135
 
136
136
  // volume defined by user
@@ -258,14 +258,20 @@ class HybridVideoPlayer() : HybridVideoPlayerSpec() {
258
258
  player = ExoPlayer.Builder(context)
259
259
  .setLoadControl(loadControl)
260
260
  .setLooper(Looper.getMainLooper())
261
- .setRenderersFactory(renderersFactory)
261
+ .setRenderersFactory(renderersFactory!!)
262
262
  .build()
263
263
 
264
264
  loadedWithSource = true
265
265
 
266
266
  player.addListener(playerListener)
267
267
  player.addAnalyticsListener(analyticsListener)
268
- player.setMediaSource(hybridSource.mediaSource)
268
+
269
+ val startPosition = hybridSource.config.startPosition
270
+ if (startPosition != null && startPosition > 0L) {
271
+ player.setMediaSource(hybridSource.mediaSource, startPosition)
272
+ } else {
273
+ player.setMediaSource(hybridSource.mediaSource)
274
+ }
269
275
 
270
276
  // Emit onLoadStart
271
277
  val sourceType = if (hybridSource.uri.startsWith("http")) SourceType.NETWORK else SourceType.LOCAL
@@ -333,7 +339,13 @@ class HybridVideoPlayer() : HybridVideoPlayerSpec() {
333
339
  runOnMainThreadSync {
334
340
  // Update source
335
341
  this.source = source
336
- player.setMediaSource(hybridSource.mediaSource)
342
+ renderersFactory?.setTextOffset((hybridSource.config.initialSubtitleDelay ?: 0L) * 1_000L)
343
+ val startPosition = hybridSource.config.startPosition
344
+ if (startPosition != null && startPosition > 0L) {
345
+ player.setMediaSource(hybridSource.mediaSource, startPosition)
346
+ } else {
347
+ player.setMediaSource(hybridSource.mediaSource)
348
+ }
337
349
 
338
350
  // Prepare player
339
351
  player.prepare()
@@ -45,6 +45,7 @@ class HybridVideoPlayerSourceFactory: HybridVideoPlayerSourceFactorySpec() {
45
45
  initializeOnCreation = true,
46
46
  forceType = null,
47
47
  forceOkhttp = null,
48
+ startPosition = null,
48
49
  externalAudios = null,
49
50
  initialSubtitleDelay = null
50
51
  )
@@ -57,6 +57,7 @@ export type VideoConfig = {
57
57
  /** Positive or negative delay in millis */
58
58
  initialSubtitleDelay?: bigint;
59
59
  forceOkhttp?: boolean;
60
+ startPosition?: bigint;
60
61
  /**
61
62
  * when the player is created, this flag will determine if native player should be initialized immediately.
62
63
  * If set to true, the player will be initialized as soon as player is created
@@ -1 +1 @@
1
- {"version":3,"file":"VideoConfig.d.ts","sourceRoot":"","sources":["../../../../../../src/core/types/VideoConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,CAAC;AAE1C,MAAM,MAAM,WAAW,GAAG;IACxB;;;;;;;;OAQG;IACH,GAAG,EAAE,WAAW,CAAC;IACjB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC;;OAEG;IACH,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB;;OAEG;IACH,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B;;;OAGG;IACH,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACvC,yDAAyD;IACzD,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;IACjC,2CAA2C;IAC3C,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,iFAAiF;IACjF,SAAS,CAAC,EAAE,kBAAkB,CAAC;CAChC,CAAC;AAUF,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;AAElE,UAAU,gCAAgC;IACxC;;;OAGG;IACH,GAAG,EAAE,GAAG,MAAM,IAAI,YAAY,EAAE,CAAC;IACjC;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,8BAA8B;IACtC;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IACjC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,KAAK,CAAC;AAEhD,MAAM,MAAM,gBAAgB,GACxB,gCAAgC,GAChC,8BAA8B,CAAC;AAanC,UAAU,mBAAmB;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB"}
1
+ {"version":3,"file":"VideoConfig.d.ts","sourceRoot":"","sources":["../../../../../../src/core/types/VideoConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,CAAC;AAE1C,MAAM,MAAM,WAAW,GAAG;IACxB;;;;;;;;OAQG;IACH,GAAG,EAAE,WAAW,CAAC;IACjB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC;;OAEG;IACH,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB;;OAEG;IACH,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B;;;OAGG;IACH,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACvC,yDAAyD;IACzD,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;IACjC,2CAA2C;IAC3C,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,iFAAiF;IACjF,SAAS,CAAC,EAAE,kBAAkB,CAAC;CAChC,CAAC;AAUF,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;AAElE,UAAU,gCAAgC;IACxC;;;OAGG;IACH,GAAG,EAAE,GAAG,MAAM,IAAI,YAAY,EAAE,CAAC;IACjC;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,8BAA8B;IACtC;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IACjC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,KAAK,CAAC;AAEhD,MAAM,MAAM,gBAAgB,GACxB,gCAAgC,GAChC,8BAA8B,CAAC;AAanC,UAAU,mBAAmB;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB"}
@@ -57,6 +57,7 @@ export type VideoConfig = {
57
57
  /** Positive or negative delay in millis */
58
58
  initialSubtitleDelay?: bigint;
59
59
  forceOkhttp?: boolean;
60
+ startPosition?: bigint;
60
61
  /**
61
62
  * when the player is created, this flag will determine if native player should be initialized immediately.
62
63
  * If set to true, the player will be initialized as soon as player is created
@@ -1 +1 @@
1
- {"version":3,"file":"VideoConfig.d.ts","sourceRoot":"","sources":["../../../../../../src/core/types/VideoConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,CAAC;AAE1C,MAAM,MAAM,WAAW,GAAG;IACxB;;;;;;;;OAQG;IACH,GAAG,EAAE,WAAW,CAAC;IACjB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC;;OAEG;IACH,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB;;OAEG;IACH,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B;;;OAGG;IACH,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACvC,yDAAyD;IACzD,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;IACjC,2CAA2C;IAC3C,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,iFAAiF;IACjF,SAAS,CAAC,EAAE,kBAAkB,CAAC;CAChC,CAAC;AAUF,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;AAElE,UAAU,gCAAgC;IACxC;;;OAGG;IACH,GAAG,EAAE,GAAG,MAAM,IAAI,YAAY,EAAE,CAAC;IACjC;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,8BAA8B;IACtC;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IACjC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,KAAK,CAAC;AAEhD,MAAM,MAAM,gBAAgB,GACxB,gCAAgC,GAChC,8BAA8B,CAAC;AAanC,UAAU,mBAAmB;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB"}
1
+ {"version":3,"file":"VideoConfig.d.ts","sourceRoot":"","sources":["../../../../../../src/core/types/VideoConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,CAAC;AAE1C,MAAM,MAAM,WAAW,GAAG;IACxB;;;;;;;;OAQG;IACH,GAAG,EAAE,WAAW,CAAC;IACjB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC;;OAEG;IACH,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB;;OAEG;IACH,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B;;;OAGG;IACH,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACvC,yDAAyD;IACzD,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;IACjC,2CAA2C;IAC3C,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,iFAAiF;IACjF,SAAS,CAAC,EAAE,kBAAkB,CAAC;CAChC,CAAC;AAUF,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;AAElE,UAAU,gCAAgC;IACxC;;;OAGG;IACH,GAAG,EAAE,GAAG,MAAM,IAAI,YAAY,EAAE,CAAC;IACjC;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,8BAA8B;IACtC;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IACjC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,KAAK,CAAC;AAEhD,MAAM,MAAM,gBAAgB,GACxB,gCAAgC,GAChC,8BAA8B,CAAC;AAanC,UAAU,mBAAmB;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB"}
@@ -77,6 +77,8 @@ namespace margelo::nitro::video {
77
77
  jni::local_ref<jni::JLong> initialSubtitleDelay = this->getFieldValue(fieldInitialSubtitleDelay);
78
78
  static const auto fieldForceOkhttp = clazz->getField<jni::JBoolean>("forceOkhttp");
79
79
  jni::local_ref<jni::JBoolean> forceOkhttp = this->getFieldValue(fieldForceOkhttp);
80
+ static const auto fieldStartPosition = clazz->getField<jni::JLong>("startPosition");
81
+ jni::local_ref<jni::JLong> startPosition = this->getFieldValue(fieldStartPosition);
80
82
  static const auto fieldInitializeOnCreation = clazz->getField<jni::JBoolean>("initializeOnCreation");
81
83
  jni::local_ref<jni::JBoolean> initializeOnCreation = this->getFieldValue(fieldInitializeOnCreation);
82
84
  static const auto fieldForceType = clazz->getField<JExternalForcedType>("forceType");
@@ -116,6 +118,7 @@ namespace margelo::nitro::video {
116
118
  }()) : std::nullopt,
117
119
  initialSubtitleDelay != nullptr ? std::make_optional(initialSubtitleDelay->value()) : std::nullopt,
118
120
  forceOkhttp != nullptr ? std::make_optional(static_cast<bool>(forceOkhttp->value())) : std::nullopt,
121
+ startPosition != nullptr ? std::make_optional(startPosition->value()) : std::nullopt,
119
122
  initializeOnCreation != nullptr ? std::make_optional(static_cast<bool>(initializeOnCreation->value())) : std::nullopt,
120
123
  forceType != nullptr ? std::make_optional(forceType->toCpp()) : std::nullopt
121
124
  );
@@ -127,7 +130,7 @@ namespace margelo::nitro::video {
127
130
  */
128
131
  [[maybe_unused]]
129
132
  static jni::local_ref<JNativeVideoConfig::javaobject> fromCpp(const NativeVideoConfig& value) {
130
- using JSignature = JNativeVideoConfig(jni::alias_ref<jni::JString>, jni::alias_ref<jni::JArrayClass<JNativeExternalSubtitle>>, jni::alias_ref<JNativeDrmParams>, jni::alias_ref<jni::JMap<jni::JString, jni::JString>>, jni::alias_ref<JBufferConfig>, jni::alias_ref<JCustomVideoMetadata>, jni::alias_ref<jni::JArrayClass<JExternalAudio>>, jni::alias_ref<jni::JLong>, jni::alias_ref<jni::JBoolean>, jni::alias_ref<jni::JBoolean>, jni::alias_ref<JExternalForcedType>);
133
+ using JSignature = JNativeVideoConfig(jni::alias_ref<jni::JString>, jni::alias_ref<jni::JArrayClass<JNativeExternalSubtitle>>, jni::alias_ref<JNativeDrmParams>, jni::alias_ref<jni::JMap<jni::JString, jni::JString>>, jni::alias_ref<JBufferConfig>, jni::alias_ref<JCustomVideoMetadata>, jni::alias_ref<jni::JArrayClass<JExternalAudio>>, jni::alias_ref<jni::JLong>, jni::alias_ref<jni::JBoolean>, jni::alias_ref<jni::JLong>, jni::alias_ref<jni::JBoolean>, jni::alias_ref<JExternalForcedType>);
131
134
  static const auto clazz = javaClassStatic();
132
135
  static const auto create = clazz->getStaticMethod<JSignature>("fromCpp");
133
136
  return create(
@@ -165,6 +168,7 @@ namespace margelo::nitro::video {
165
168
  }() : nullptr,
166
169
  value.initialSubtitleDelay.has_value() ? jni::JLong::valueOf(value.initialSubtitleDelay.value()) : nullptr,
167
170
  value.forceOkhttp.has_value() ? jni::JBoolean::valueOf(value.forceOkhttp.value()) : nullptr,
171
+ value.startPosition.has_value() ? jni::JLong::valueOf(value.startPosition.value()) : nullptr,
168
172
  value.initializeOnCreation.has_value() ? jni::JBoolean::valueOf(value.initializeOnCreation.value()) : nullptr,
169
173
  value.forceType.has_value() ? JExternalForcedType::fromCpp(value.forceType.value()) : nullptr
170
174
  );
@@ -46,6 +46,9 @@ data class NativeVideoConfig(
46
46
  val forceOkhttp: Boolean?,
47
47
  @DoNotStrip
48
48
  @Keep
49
+ val startPosition: Long?,
50
+ @DoNotStrip
51
+ @Keep
49
52
  val initializeOnCreation: Boolean?,
50
53
  @DoNotStrip
51
54
  @Keep
@@ -61,8 +64,8 @@ data class NativeVideoConfig(
61
64
  @Keep
62
65
  @Suppress("unused")
63
66
  @JvmStatic
64
- private fun fromCpp(uri: String, externalSubtitles: Array<NativeExternalSubtitle>?, drm: NativeDrmParams?, headers: Map<String, String>?, bufferConfig: BufferConfig?, metadata: CustomVideoMetadata?, externalAudios: Array<ExternalAudio>?, initialSubtitleDelay: Long?, forceOkhttp: Boolean?, initializeOnCreation: Boolean?, forceType: ExternalForcedType?): NativeVideoConfig {
65
- return NativeVideoConfig(uri, externalSubtitles, drm, headers, bufferConfig, metadata, externalAudios, initialSubtitleDelay, forceOkhttp, initializeOnCreation, forceType)
67
+ private fun fromCpp(uri: String, externalSubtitles: Array<NativeExternalSubtitle>?, drm: NativeDrmParams?, headers: Map<String, String>?, bufferConfig: BufferConfig?, metadata: CustomVideoMetadata?, externalAudios: Array<ExternalAudio>?, initialSubtitleDelay: Long?, forceOkhttp: Boolean?, startPosition: Long?, initializeOnCreation: Boolean?, forceType: ExternalForcedType?): NativeVideoConfig {
68
+ return NativeVideoConfig(uri, externalSubtitles, drm, headers, bufferConfig, metadata, externalAudios, initialSubtitleDelay, forceOkhttp, startPosition, initializeOnCreation, forceType)
66
69
  }
67
70
  }
68
71
  }
@@ -19,7 +19,7 @@ public extension NativeVideoConfig {
19
19
  /**
20
20
  * Create a new instance of `NativeVideoConfig`.
21
21
  */
22
- init(uri: String, externalSubtitles: [NativeExternalSubtitle]?, drm: NativeDrmParams?, headers: Dictionary<String, String>?, bufferConfig: BufferConfig?, metadata: CustomVideoMetadata?, externalAudios: [ExternalAudio]?, initialSubtitleDelay: Int64?, forceOkhttp: Bool?, initializeOnCreation: Bool?, forceType: ExternalForcedType?) {
22
+ init(uri: String, externalSubtitles: [NativeExternalSubtitle]?, drm: NativeDrmParams?, headers: Dictionary<String, String>?, bufferConfig: BufferConfig?, metadata: CustomVideoMetadata?, externalAudios: [ExternalAudio]?, initialSubtitleDelay: Int64?, forceOkhttp: Bool?, startPosition: Int64?, initializeOnCreation: Bool?, forceType: ExternalForcedType?) {
23
23
  self.init(std.string(uri), { () -> bridge.std__optional_std__vector_NativeExternalSubtitle__ in
24
24
  if let __unwrappedValue = externalSubtitles {
25
25
  return bridge.create_std__optional_std__vector_NativeExternalSubtitle__({ () -> bridge.std__vector_NativeExternalSubtitle_ in
@@ -86,6 +86,12 @@ public extension NativeVideoConfig {
86
86
  } else {
87
87
  return .init()
88
88
  }
89
+ }(), { () -> bridge.std__optional_int64_t_ in
90
+ if let __unwrappedValue = startPosition {
91
+ return bridge.create_std__optional_int64_t_(__unwrappedValue)
92
+ } else {
93
+ return .init()
94
+ }
89
95
  }(), { () -> bridge.std__optional_bool_ in
90
96
  if let __unwrappedValue = initializeOnCreation {
91
97
  return bridge.create_std__optional_bool_(__unwrappedValue)
@@ -302,6 +308,23 @@ public extension NativeVideoConfig {
302
308
  }
303
309
  }
304
310
 
311
+ var startPosition: Int64? {
312
+ @inline(__always)
313
+ get {
314
+ return self.__startPosition.value
315
+ }
316
+ @inline(__always)
317
+ set {
318
+ self.__startPosition = { () -> bridge.std__optional_int64_t_ in
319
+ if let __unwrappedValue = newValue {
320
+ return bridge.create_std__optional_int64_t_(__unwrappedValue)
321
+ } else {
322
+ return .init()
323
+ }
324
+ }()
325
+ }
326
+ }
327
+
305
328
  var initializeOnCreation: Bool? {
306
329
  @inline(__always)
307
330
  get {
@@ -63,12 +63,13 @@ namespace margelo::nitro::video {
63
63
  std::optional<std::vector<ExternalAudio>> externalAudios SWIFT_PRIVATE;
64
64
  std::optional<int64_t> initialSubtitleDelay SWIFT_PRIVATE;
65
65
  std::optional<bool> forceOkhttp SWIFT_PRIVATE;
66
+ std::optional<int64_t> startPosition SWIFT_PRIVATE;
66
67
  std::optional<bool> initializeOnCreation SWIFT_PRIVATE;
67
68
  std::optional<ExternalForcedType> forceType SWIFT_PRIVATE;
68
69
 
69
70
  public:
70
71
  NativeVideoConfig() = default;
71
- explicit NativeVideoConfig(std::string uri, std::optional<std::vector<NativeExternalSubtitle>> externalSubtitles, std::optional<NativeDrmParams> drm, std::optional<std::unordered_map<std::string, std::string>> headers, std::optional<BufferConfig> bufferConfig, std::optional<CustomVideoMetadata> metadata, std::optional<std::vector<ExternalAudio>> externalAudios, std::optional<int64_t> initialSubtitleDelay, std::optional<bool> forceOkhttp, std::optional<bool> initializeOnCreation, std::optional<ExternalForcedType> forceType): uri(uri), externalSubtitles(externalSubtitles), drm(drm), headers(headers), bufferConfig(bufferConfig), metadata(metadata), externalAudios(externalAudios), initialSubtitleDelay(initialSubtitleDelay), forceOkhttp(forceOkhttp), initializeOnCreation(initializeOnCreation), forceType(forceType) {}
72
+ explicit NativeVideoConfig(std::string uri, std::optional<std::vector<NativeExternalSubtitle>> externalSubtitles, std::optional<NativeDrmParams> drm, std::optional<std::unordered_map<std::string, std::string>> headers, std::optional<BufferConfig> bufferConfig, std::optional<CustomVideoMetadata> metadata, std::optional<std::vector<ExternalAudio>> externalAudios, std::optional<int64_t> initialSubtitleDelay, std::optional<bool> forceOkhttp, std::optional<int64_t> startPosition, std::optional<bool> initializeOnCreation, std::optional<ExternalForcedType> forceType): uri(uri), externalSubtitles(externalSubtitles), drm(drm), headers(headers), bufferConfig(bufferConfig), metadata(metadata), externalAudios(externalAudios), initialSubtitleDelay(initialSubtitleDelay), forceOkhttp(forceOkhttp), startPosition(startPosition), initializeOnCreation(initializeOnCreation), forceType(forceType) {}
72
73
  };
73
74
 
74
75
  } // namespace margelo::nitro::video
@@ -90,6 +91,7 @@ namespace margelo::nitro {
90
91
  JSIConverter<std::optional<std::vector<margelo::nitro::video::ExternalAudio>>>::fromJSI(runtime, obj.getProperty(runtime, "externalAudios")),
91
92
  JSIConverter<std::optional<int64_t>>::fromJSI(runtime, obj.getProperty(runtime, "initialSubtitleDelay")),
92
93
  JSIConverter<std::optional<bool>>::fromJSI(runtime, obj.getProperty(runtime, "forceOkhttp")),
94
+ JSIConverter<std::optional<int64_t>>::fromJSI(runtime, obj.getProperty(runtime, "startPosition")),
93
95
  JSIConverter<std::optional<bool>>::fromJSI(runtime, obj.getProperty(runtime, "initializeOnCreation")),
94
96
  JSIConverter<std::optional<margelo::nitro::video::ExternalForcedType>>::fromJSI(runtime, obj.getProperty(runtime, "forceType"))
95
97
  );
@@ -105,6 +107,7 @@ namespace margelo::nitro {
105
107
  obj.setProperty(runtime, "externalAudios", JSIConverter<std::optional<std::vector<margelo::nitro::video::ExternalAudio>>>::toJSI(runtime, arg.externalAudios));
106
108
  obj.setProperty(runtime, "initialSubtitleDelay", JSIConverter<std::optional<int64_t>>::toJSI(runtime, arg.initialSubtitleDelay));
107
109
  obj.setProperty(runtime, "forceOkhttp", JSIConverter<std::optional<bool>>::toJSI(runtime, arg.forceOkhttp));
110
+ obj.setProperty(runtime, "startPosition", JSIConverter<std::optional<int64_t>>::toJSI(runtime, arg.startPosition));
108
111
  obj.setProperty(runtime, "initializeOnCreation", JSIConverter<std::optional<bool>>::toJSI(runtime, arg.initializeOnCreation));
109
112
  obj.setProperty(runtime, "forceType", JSIConverter<std::optional<margelo::nitro::video::ExternalForcedType>>::toJSI(runtime, arg.forceType));
110
113
  return obj;
@@ -126,6 +129,7 @@ namespace margelo::nitro {
126
129
  if (!JSIConverter<std::optional<std::vector<margelo::nitro::video::ExternalAudio>>>::canConvert(runtime, obj.getProperty(runtime, "externalAudios"))) return false;
127
130
  if (!JSIConverter<std::optional<int64_t>>::canConvert(runtime, obj.getProperty(runtime, "initialSubtitleDelay"))) return false;
128
131
  if (!JSIConverter<std::optional<bool>>::canConvert(runtime, obj.getProperty(runtime, "forceOkhttp"))) return false;
132
+ if (!JSIConverter<std::optional<int64_t>>::canConvert(runtime, obj.getProperty(runtime, "startPosition"))) return false;
129
133
  if (!JSIConverter<std::optional<bool>>::canConvert(runtime, obj.getProperty(runtime, "initializeOnCreation"))) return false;
130
134
  if (!JSIConverter<std::optional<margelo::nitro::video::ExternalForcedType>>::canConvert(runtime, obj.getProperty(runtime, "forceType"))) return false;
131
135
  return true;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pigeonmal/react-native-video",
3
- "version": "7.0.0-beta.4",
3
+ "version": "7.0.0-beta.5",
4
4
  "description": "<Video /> Component for React Native",
5
5
  "source": "./src/index.tsx",
6
6
  "main": "./lib/commonjs/index.js",
@@ -59,6 +59,7 @@ export type VideoConfig = {
59
59
  /** Positive or negative delay in millis */
60
60
  initialSubtitleDelay?: bigint;
61
61
  forceOkhttp?: boolean;
62
+ startPosition?: bigint;
62
63
  /**
63
64
  * when the player is created, this flag will determine if native player should be initialized immediately.
64
65
  * If set to true, the player will be initialized as soon as player is created