@pigeonmal/react-native-video 7.0.0-beta.8 → 7.0.0-beta.9
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 +12 -6
- package/android/src/main/java/com/twg/video/core/VideoManager.kt +9 -1
- package/android/src/main/java/com/twg/video/hybrids/videoplayer/HybridVideoPlayer.kt +15 -6
- package/android/src/main/java/com/twg/video/hybrids/videoplayereventemitter/HybridVideoPlayerEventEmitter.kt +21 -7
- package/lib/commonjs/core/VideoPlayer.js +35 -4
- package/lib/commonjs/core/VideoPlayer.js.map +1 -1
- package/lib/module/core/VideoPlayer.js +35 -4
- package/lib/module/core/VideoPlayer.js.map +1 -1
- package/lib/typescript/commonjs/src/core/VideoPlayer.d.ts +5 -1
- package/lib/typescript/commonjs/src/core/VideoPlayer.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/core/types/VideoPlayerBase.d.ts +10 -1
- package/lib/typescript/commonjs/src/core/types/VideoPlayerBase.d.ts.map +1 -1
- package/lib/typescript/module/src/core/VideoPlayer.d.ts +5 -1
- package/lib/typescript/module/src/core/VideoPlayer.d.ts.map +1 -1
- package/lib/typescript/module/src/core/types/VideoPlayerBase.d.ts +10 -1
- package/lib/typescript/module/src/core/types/VideoPlayerBase.d.ts.map +1 -1
- package/nitrogen/generated/android/c++/JHybridVideoPlayerSpec.cpp +13 -0
- package/nitrogen/generated/android/c++/JHybridVideoPlayerSpec.hpp +3 -0
- package/nitrogen/generated/android/c++/JonProgressData.hpp +7 -3
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/video/HybridVideoPlayerSpec.kt +10 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/video/onProgressData.kt +6 -3
- package/nitrogen/generated/ios/c++/HybridVideoPlayerSpecSwift.hpp +12 -0
- package/nitrogen/generated/ios/swift/HybridVideoPlayerSpec.swift +2 -0
- package/nitrogen/generated/ios/swift/HybridVideoPlayerSpec_cxx.swift +22 -0
- package/nitrogen/generated/ios/swift/onProgressData.swift +13 -2
- package/nitrogen/generated/shared/c++/HybridVideoPlayerSpec.cpp +3 -0
- package/nitrogen/generated/shared/c++/HybridVideoPlayerSpec.hpp +3 -0
- package/nitrogen/generated/shared/c++/onProgressData.hpp +6 -2
- package/package.json +1 -1
- package/src/core/VideoPlayer.ts +47 -5
- package/src/core/types/VideoPlayerBase.ts +12 -1
package/README.md
CHANGED
|
@@ -1,19 +1,24 @@
|
|
|
1
|
-
Last commit sync :
|
|
2
|
-
Date:
|
|
1
|
+
Last commit sync : 605feed68a4be9ff8fcfa2f288d4f0570f044699
|
|
2
|
+
Date: 19/12/2025
|
|
3
3
|
|
|
4
4
|
(Only android)
|
|
5
5
|
Install :
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
|
|
7
|
+
1. npm install @pigeonmal/react-native-video@beta react-native-nitro-fetch
|
|
8
|
+
2. Add this to android/app/settings.gradle
|
|
9
|
+
|
|
8
10
|
```
|
|
9
11
|
include ':media3-ffmpeg-decoder'
|
|
10
12
|
|
|
11
13
|
project(':media3-ffmpeg-decoder').projectDir = file('../../node_modules/react-native-video/android/media3-ffmpeg-decoder')
|
|
12
14
|
```
|
|
13
|
-
|
|
15
|
+
|
|
16
|
+
3. create a patch for react-native-nitro-fetch like in the patches/react-native-nitro-fetch@x.patch
|
|
14
17
|
|
|
15
18
|
---
|
|
19
|
+
|
|
16
20
|
Features:
|
|
21
|
+
|
|
17
22
|
- ffmpeg fallback
|
|
18
23
|
- videoconfig: externalAudios (array of AudioTrack)
|
|
19
24
|
- videoconfig: forceType 'm3u8' or 'mpd' if url not have explicit extension
|
|
@@ -25,9 +30,10 @@ Features:
|
|
|
25
30
|
- player.selectTrackById and selectTrackByIndex for select video or audio or text
|
|
26
31
|
- player.selectTextTrack removed use selectTrackById(TrackType.TEXT, trackId)
|
|
27
32
|
- player.resetForReuse() stop playback and clear tracks
|
|
33
|
+
- player.progressEventInterval change the progress event interval
|
|
28
34
|
- bugfix: external subtitles in hls/dash
|
|
29
35
|
- nullable video player source : new VideoPlayer(undefined);
|
|
30
36
|
- TextTrack type replaced to PlayerTrack
|
|
31
37
|
- removed onTrackChange event
|
|
32
38
|
- allPlayerTracks in onLoadData event directly
|
|
33
|
-
- seekableDuration in onProgressData event (video duration)
|
|
39
|
+
- seekableDuration in onProgressData event (video duration)
|
|
@@ -170,9 +170,17 @@ object VideoManager : LifecycleEventListener {
|
|
|
170
170
|
}
|
|
171
171
|
|
|
172
172
|
fun unregisterPlayer(player: HybridVideoPlayer) {
|
|
173
|
-
players.remove(player)
|
|
174
173
|
audioFocusManager.unregisterPlayer(player)
|
|
175
174
|
PluginsRegistry.shared.notifyPlayerDestroyed(WeakReference(player))
|
|
175
|
+
|
|
176
|
+
// Remove player from any views that were using it
|
|
177
|
+
players[player]?.forEach { nitroId ->
|
|
178
|
+
views[nitroId]?.get()?.let { view ->
|
|
179
|
+
view.hybridPlayer = null
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
players.remove(player)
|
|
176
184
|
}
|
|
177
185
|
|
|
178
186
|
fun getPlayerByNitroId(nitroId: Int): HybridVideoPlayer? {
|
|
@@ -43,7 +43,7 @@ import kotlin.math.max
|
|
|
43
43
|
|
|
44
44
|
@UnstableApi
|
|
45
45
|
@DoNotStrip
|
|
46
|
-
class HybridVideoPlayer() : HybridVideoPlayerSpec() {
|
|
46
|
+
class HybridVideoPlayer() : HybridVideoPlayerSpec(), AutoCloseable {
|
|
47
47
|
override lateinit var source: HybridVideoPlayerSourceSpec
|
|
48
48
|
override var eventEmitter = HybridVideoPlayerEventEmitter()
|
|
49
49
|
set(value) {
|
|
@@ -88,7 +88,6 @@ class HybridVideoPlayer() : HybridVideoPlayerSpec() {
|
|
|
88
88
|
private val videoPlaybackServiceConnection = VideoPlaybackServiceConnection(WeakReference(this))
|
|
89
89
|
|
|
90
90
|
private companion object {
|
|
91
|
-
const val PROGRESS_UPDATE_INTERVAL_MS = 250L
|
|
92
91
|
private const val TAG = "HybridVideoPlayer"
|
|
93
92
|
private const val DEFAULT_MIN_BUFFER_DURATION_MS = 5000
|
|
94
93
|
private const val DEFAULT_MAX_BUFFER_DURATION_MS = 10000
|
|
@@ -105,6 +104,8 @@ class HybridVideoPlayer() : HybridVideoPlayerSpec() {
|
|
|
105
104
|
field = value
|
|
106
105
|
}
|
|
107
106
|
|
|
107
|
+
override var progressEventInterval = 250L
|
|
108
|
+
|
|
108
109
|
override var showNotificationControls: Boolean = false
|
|
109
110
|
set(value) {
|
|
110
111
|
val wasRunning = (field || playInBackground)
|
|
@@ -373,7 +374,7 @@ class HybridVideoPlayer() : HybridVideoPlayerSpec() {
|
|
|
373
374
|
}
|
|
374
375
|
}
|
|
375
376
|
|
|
376
|
-
|
|
377
|
+
override fun release() {
|
|
377
378
|
if (playInBackground || showNotificationControls) {
|
|
378
379
|
VideoPlaybackService.stopService(this, videoPlaybackServiceConnection)
|
|
379
380
|
}
|
|
@@ -383,6 +384,8 @@ class HybridVideoPlayer() : HybridVideoPlayerSpec() {
|
|
|
383
384
|
stopProgressUpdates()
|
|
384
385
|
loadedWithSource = false
|
|
385
386
|
|
|
387
|
+
eventEmitter.clearAllListeners()
|
|
388
|
+
|
|
386
389
|
player.removeListener(playerListener)
|
|
387
390
|
player.removeAnalyticsListener(analyticsListener)
|
|
388
391
|
player.release() // Release player
|
|
@@ -408,8 +411,14 @@ class HybridVideoPlayer() : HybridVideoPlayerSpec() {
|
|
|
408
411
|
release()
|
|
409
412
|
}
|
|
410
413
|
|
|
411
|
-
override
|
|
412
|
-
|
|
414
|
+
override fun close() {
|
|
415
|
+
release()
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
override val memorySize: Long
|
|
419
|
+
// 1 MiB by default
|
|
420
|
+
get() = allocator?.totalBytesAllocated?.toLong() ?: (1024L * 1024L)
|
|
421
|
+
|
|
413
422
|
|
|
414
423
|
private fun startProgressUpdates() {
|
|
415
424
|
stopProgressUpdates() // Ensure no multiple runnables
|
|
@@ -428,7 +437,7 @@ class HybridVideoPlayer() : HybridVideoPlayerSpec() {
|
|
|
428
437
|
seekableDuration = player.duration.toSecondsOrNaN()
|
|
429
438
|
)
|
|
430
439
|
)
|
|
431
|
-
progressHandler.postDelayed(this,
|
|
440
|
+
progressHandler.postDelayed(this, progressEventInterval)
|
|
432
441
|
}
|
|
433
442
|
}
|
|
434
443
|
}
|
|
@@ -7,31 +7,43 @@ import java.util.UUID
|
|
|
7
7
|
data class ListenerPair(val id: UUID, val eventName: String, val callback: Any)
|
|
8
8
|
|
|
9
9
|
class HybridVideoPlayerEventEmitter : HybridVideoPlayerEventEmitterSpec() {
|
|
10
|
+
private val lock = Any()
|
|
11
|
+
|
|
10
12
|
var listeners: MutableList<ListenerPair> = mutableListOf()
|
|
11
13
|
|
|
12
14
|
// MARK: - Private helpers
|
|
13
15
|
private fun <T : Any> addListener(eventName: String, listener: T): ListenerSubscription {
|
|
14
16
|
val id = UUID.randomUUID()
|
|
17
|
+
synchronized(lock) {
|
|
15
18
|
listeners.add(ListenerPair(id, eventName, listener))
|
|
16
|
-
|
|
19
|
+
}
|
|
20
|
+
return ListenerSubscription {
|
|
21
|
+
synchronized(lock) {
|
|
22
|
+
listeners.removeAll { it.id == id }
|
|
23
|
+
}
|
|
24
|
+
}
|
|
17
25
|
}
|
|
18
26
|
|
|
19
27
|
private inline fun <reified T> emitEvent(eventName: String, invokeCallback: (T) -> Unit) {
|
|
20
|
-
|
|
28
|
+
val snapshot: List<ListenerPair> = synchronized(lock) {
|
|
29
|
+
listeners.filter { it.eventName == eventName }.toList()
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
snapshot.forEach { pair ->
|
|
21
33
|
try {
|
|
22
34
|
@Suppress("UNCHECKED_CAST")
|
|
23
|
-
val callback = pair.callback as? T
|
|
24
|
-
if (callback == null) {
|
|
35
|
+
val callback = pair.callback as? T ?: run {
|
|
25
36
|
Log.d(TAG, "Invalid callback type for $eventName")
|
|
26
37
|
return@forEach
|
|
27
38
|
}
|
|
28
39
|
invokeCallback(callback)
|
|
29
|
-
} catch (
|
|
30
|
-
Log.d(TAG, "Error calling $eventName listener
|
|
40
|
+
} catch (t: Throwable) {
|
|
41
|
+
Log.d(TAG, "Error calling $eventName listener", t)
|
|
31
42
|
}
|
|
32
43
|
}
|
|
33
44
|
}
|
|
34
45
|
|
|
46
|
+
|
|
35
47
|
// MARK: - Listener registration methods
|
|
36
48
|
|
|
37
49
|
override fun addOnAudioBecomingNoisyListener(listener: () -> Unit) =
|
|
@@ -89,7 +101,9 @@ class HybridVideoPlayerEventEmitter : HybridVideoPlayerEventEmitterSpec() {
|
|
|
89
101
|
addListener("onVolumeChange", listener)
|
|
90
102
|
|
|
91
103
|
override fun clearAllListeners() {
|
|
104
|
+
synchronized(lock) {
|
|
92
105
|
listeners.clear()
|
|
106
|
+
}
|
|
93
107
|
}
|
|
94
108
|
|
|
95
109
|
// MARK: - Event emission methods
|
|
@@ -151,4 +165,4 @@ class HybridVideoPlayerEventEmitter : HybridVideoPlayerEventEmitterSpec() {
|
|
|
151
165
|
companion object {
|
|
152
166
|
const val TAG = "HybridVideoPlayerEventEmitter"
|
|
153
167
|
}
|
|
154
|
-
}
|
|
168
|
+
}
|
|
@@ -11,22 +11,47 @@ var _playerFactory = require("./utils/playerFactory.js");
|
|
|
11
11
|
var _sourceFactory = require("./utils/sourceFactory.js");
|
|
12
12
|
var _VideoPlayerEvents = require("./VideoPlayerEvents.js");
|
|
13
13
|
class VideoPlayer extends _VideoPlayerEvents.VideoPlayerEvents {
|
|
14
|
+
get player() {
|
|
15
|
+
if (this._player === undefined) {
|
|
16
|
+
throw new _VideoError.VideoRuntimeError('player/released', "You can't access player after it's released");
|
|
17
|
+
}
|
|
18
|
+
return this._player;
|
|
19
|
+
}
|
|
14
20
|
constructor(source) {
|
|
15
21
|
const player = (0, _playerFactory.createPlayer)(source != null ? (0, _sourceFactory.createSource)(source) : undefined);
|
|
16
22
|
|
|
17
23
|
// Initialize events
|
|
18
24
|
super(player.eventEmitter);
|
|
19
|
-
this.
|
|
25
|
+
this._player = player;
|
|
20
26
|
}
|
|
21
27
|
|
|
22
28
|
/**
|
|
23
|
-
*
|
|
24
|
-
* After calling this method, the player is no longer usable.
|
|
29
|
+
* Releases the player's native resources and releases native state.
|
|
25
30
|
* @internal
|
|
26
31
|
*/
|
|
27
32
|
__destroy() {
|
|
33
|
+
if (this._player === undefined) return;
|
|
28
34
|
this.clearAllEvents();
|
|
29
|
-
|
|
35
|
+
try {
|
|
36
|
+
this.player.release();
|
|
37
|
+
} catch (error) {
|
|
38
|
+
// Best effort cleanup: teardown must never crash app unmount.
|
|
39
|
+
console.error('Failed to cleanup native player resources', error);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// We leave hybrid object to be cleaned up by garbage collector
|
|
43
|
+
// So we update memory size to ensure that memory is released
|
|
44
|
+
// when needed
|
|
45
|
+
this.updateMemorySize();
|
|
46
|
+
|
|
47
|
+
// We wait for 5s to let late events that were triggered before release to be processed
|
|
48
|
+
if (this._releaseTimeout !== undefined) {
|
|
49
|
+
clearTimeout(this._releaseTimeout);
|
|
50
|
+
}
|
|
51
|
+
this._releaseTimeout = setTimeout(() => {
|
|
52
|
+
this._player = undefined;
|
|
53
|
+
this._releaseTimeout = undefined;
|
|
54
|
+
}, 5000);
|
|
30
55
|
}
|
|
31
56
|
|
|
32
57
|
/**
|
|
@@ -102,6 +127,12 @@ class VideoPlayer extends _VideoPlayerEvents.VideoPlayerEvents {
|
|
|
102
127
|
set currentTime(value) {
|
|
103
128
|
this.player.currentTime = value;
|
|
104
129
|
}
|
|
130
|
+
get progressEventInterval() {
|
|
131
|
+
return this.player.progressEventInterval;
|
|
132
|
+
}
|
|
133
|
+
set progressEventInterval(value) {
|
|
134
|
+
this.player.progressEventInterval = value;
|
|
135
|
+
}
|
|
105
136
|
get subtitleDelay() {
|
|
106
137
|
return this.player.subtitleDelay;
|
|
107
138
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","_reactNativeNitroModules","_VideoError","_playerFactory","_sourceFactory","_VideoPlayerEvents","VideoPlayer","VideoPlayerEvents","
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_reactNativeNitroModules","_VideoError","_playerFactory","_sourceFactory","_VideoPlayerEvents","VideoPlayer","VideoPlayerEvents","player","_player","undefined","VideoRuntimeError","constructor","source","createPlayer","createSource","eventEmitter","__destroy","clearAllEvents","release","error","console","updateMemorySize","_releaseTimeout","clearTimeout","setTimeout","__getNativePlayer","throwError","parsedError","tryParseNativeVideoError","triggerJSEvent","NitroModules","wrapPromise","promise","Promise","resolve","reject","then","catch","status","duration","volume","value","currentTime","progressEventInterval","subtitleDelay","muted","loop","rate","mixAudioMode","ignoreSilentSwitchMode","__DEV__","includes","Platform","OS","warn","playInBackground","playWhenInactive","isPlaying","showNotificationControls","initialize","preload","play","pause","seekBy","time","seekTo","replaceSourceAsync","getAvailableTextTracks","getAllPlayerTracks","audios","videos","texts","selectTrackById","type","id","selectTrackByIndex","index","resetForReuse","selectedTrack","exports"],"sourceRoot":"../../../src","sources":["core/VideoPlayer.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -7,22 +7,47 @@ import { createPlayer } from "./utils/playerFactory.js";
|
|
|
7
7
|
import { createSource } from "./utils/sourceFactory.js";
|
|
8
8
|
import { VideoPlayerEvents } from "./VideoPlayerEvents.js";
|
|
9
9
|
class VideoPlayer extends VideoPlayerEvents {
|
|
10
|
+
get player() {
|
|
11
|
+
if (this._player === undefined) {
|
|
12
|
+
throw new VideoRuntimeError('player/released', "You can't access player after it's released");
|
|
13
|
+
}
|
|
14
|
+
return this._player;
|
|
15
|
+
}
|
|
10
16
|
constructor(source) {
|
|
11
17
|
const player = createPlayer(source != null ? createSource(source) : undefined);
|
|
12
18
|
|
|
13
19
|
// Initialize events
|
|
14
20
|
super(player.eventEmitter);
|
|
15
|
-
this.
|
|
21
|
+
this._player = player;
|
|
16
22
|
}
|
|
17
23
|
|
|
18
24
|
/**
|
|
19
|
-
*
|
|
20
|
-
* After calling this method, the player is no longer usable.
|
|
25
|
+
* Releases the player's native resources and releases native state.
|
|
21
26
|
* @internal
|
|
22
27
|
*/
|
|
23
28
|
__destroy() {
|
|
29
|
+
if (this._player === undefined) return;
|
|
24
30
|
this.clearAllEvents();
|
|
25
|
-
|
|
31
|
+
try {
|
|
32
|
+
this.player.release();
|
|
33
|
+
} catch (error) {
|
|
34
|
+
// Best effort cleanup: teardown must never crash app unmount.
|
|
35
|
+
console.error('Failed to cleanup native player resources', error);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// We leave hybrid object to be cleaned up by garbage collector
|
|
39
|
+
// So we update memory size to ensure that memory is released
|
|
40
|
+
// when needed
|
|
41
|
+
this.updateMemorySize();
|
|
42
|
+
|
|
43
|
+
// We wait for 5s to let late events that were triggered before release to be processed
|
|
44
|
+
if (this._releaseTimeout !== undefined) {
|
|
45
|
+
clearTimeout(this._releaseTimeout);
|
|
46
|
+
}
|
|
47
|
+
this._releaseTimeout = setTimeout(() => {
|
|
48
|
+
this._player = undefined;
|
|
49
|
+
this._releaseTimeout = undefined;
|
|
50
|
+
}, 5000);
|
|
26
51
|
}
|
|
27
52
|
|
|
28
53
|
/**
|
|
@@ -98,6 +123,12 @@ class VideoPlayer extends VideoPlayerEvents {
|
|
|
98
123
|
set currentTime(value) {
|
|
99
124
|
this.player.currentTime = value;
|
|
100
125
|
}
|
|
126
|
+
get progressEventInterval() {
|
|
127
|
+
return this.player.progressEventInterval;
|
|
128
|
+
}
|
|
129
|
+
set progressEventInterval(value) {
|
|
130
|
+
this.player.progressEventInterval = value;
|
|
131
|
+
}
|
|
101
132
|
get subtitleDelay() {
|
|
102
133
|
return this.player.subtitleDelay;
|
|
103
134
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Platform","NitroModules","tryParseNativeVideoError","VideoRuntimeError","createPlayer","createSource","VideoPlayerEvents","VideoPlayer","
|
|
1
|
+
{"version":3,"names":["Platform","NitroModules","tryParseNativeVideoError","VideoRuntimeError","createPlayer","createSource","VideoPlayerEvents","VideoPlayer","player","_player","undefined","constructor","source","eventEmitter","__destroy","clearAllEvents","release","error","console","updateMemorySize","_releaseTimeout","clearTimeout","setTimeout","__getNativePlayer","throwError","parsedError","triggerJSEvent","wrapPromise","promise","Promise","resolve","reject","then","catch","status","duration","volume","value","currentTime","progressEventInterval","subtitleDelay","muted","loop","rate","mixAudioMode","ignoreSilentSwitchMode","__DEV__","includes","OS","warn","playInBackground","playWhenInactive","isPlaying","showNotificationControls","initialize","preload","play","pause","seekBy","time","seekTo","replaceSourceAsync","getAvailableTextTracks","getAllPlayerTracks","audios","videos","texts","selectTrackById","type","id","selectTrackByIndex","index","resetForReuse","selectedTrack"],"sourceRoot":"../../../src","sources":["core/VideoPlayer.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -9,7 +9,9 @@ import type { VideoPlayerStatus } from './types/VideoPlayerStatus';
|
|
|
9
9
|
import { VideoPlayerEvents } from './VideoPlayerEvents';
|
|
10
10
|
import type { AllPlayerTracks, PlayerTrack, TrackType } from './types/PlayerTrack';
|
|
11
11
|
declare class VideoPlayer extends VideoPlayerEvents implements VideoPlayerBase {
|
|
12
|
-
|
|
12
|
+
private _player;
|
|
13
|
+
private _releaseTimeout;
|
|
14
|
+
protected get player(): VideoPlayerImpl;
|
|
13
15
|
constructor(source?: VideoSource | VideoConfig | VideoPlayerSource);
|
|
14
16
|
get source(): VideoPlayerSource;
|
|
15
17
|
get status(): VideoPlayerStatus;
|
|
@@ -18,6 +20,8 @@ declare class VideoPlayer extends VideoPlayerEvents implements VideoPlayerBase {
|
|
|
18
20
|
set volume(value: number);
|
|
19
21
|
get currentTime(): number;
|
|
20
22
|
set currentTime(value: number);
|
|
23
|
+
get progressEventInterval(): number;
|
|
24
|
+
set progressEventInterval(value: number);
|
|
21
25
|
get subtitleDelay(): bigint;
|
|
22
26
|
set subtitleDelay(value: bigint);
|
|
23
27
|
get muted(): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VideoPlayer.d.ts","sourceRoot":"","sources":["../../../../../src/core/VideoPlayer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,WAAW,IAAI,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACtF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC/E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAC7E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAKpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAGnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EACV,eAAe,EACf,WAAW,EACX,SAAS,EACV,MAAM,qBAAqB,CAAC;AAE7B,cAAM,WAAY,SAAQ,iBAAkB,YAAW,eAAe;IACpE,
|
|
1
|
+
{"version":3,"file":"VideoPlayer.d.ts","sourceRoot":"","sources":["../../../../../src/core/VideoPlayer.ts"],"names":[],"mappings":"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"}
|
|
@@ -33,6 +33,11 @@ export interface VideoPlayerBase {
|
|
|
33
33
|
* Returns NaN if the duration is not available.
|
|
34
34
|
*/
|
|
35
35
|
currentTime: number;
|
|
36
|
+
/**
|
|
37
|
+
* Modify the progress event interval (ms)
|
|
38
|
+
* By default it's 250ms
|
|
39
|
+
*/
|
|
40
|
+
progressEventInterval: number;
|
|
36
41
|
/**
|
|
37
42
|
* Subtitle delay (milliseconds) negative or positive number
|
|
38
43
|
*/
|
|
@@ -130,7 +135,7 @@ export interface VideoPlayerBase {
|
|
|
130
135
|
/**
|
|
131
136
|
* Replace the current source of the player.
|
|
132
137
|
* @param source - The new source of the video.
|
|
133
|
-
* @note If you want to clear the source, you can pass null.
|
|
138
|
+
* @note If you want to clear the source, you can pass null. It has the same effect as {@link release}.
|
|
134
139
|
* see {@link VideoPlayerSourceBase}
|
|
135
140
|
*/
|
|
136
141
|
replaceSourceAsync(source: VideoPlayerSourceBase | null): Promise<void>;
|
|
@@ -181,5 +186,9 @@ export interface VideoPlayerBase {
|
|
|
181
186
|
* @returns The currently selected text track, or undefined if none is selected
|
|
182
187
|
*/
|
|
183
188
|
readonly selectedTrack?: PlayerTrack;
|
|
189
|
+
/**
|
|
190
|
+
* Releases the player's native resources and releases native state.
|
|
191
|
+
*/
|
|
192
|
+
release(): void;
|
|
184
193
|
}
|
|
185
194
|
//# sourceMappingURL=VideoPlayerBase.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VideoPlayerBase.d.ts","sourceRoot":"","sources":["../../../../../../src/core/types/VideoPlayerBase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAI7D,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE7E,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;IAEvC;;;;;;OAMG;IACH,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IAEnC;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,KAAK,EAAE,OAAO,CAAC;IAEf;;OAEG;IACH,IAAI,EAAE,OAAO,CAAC;IAEd;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;;;;;;;;OASG;IACH,YAAY,EAAE,YAAY,CAAC;IAE3B;;;;;;;OAOG;IACH,sBAAsB,EAAE,sBAAsB,CAAC;IAE/C;;;;;;;OAOG;IACH,gBAAgB,EAAE,OAAO,CAAC;IAE1B;;;;;;;;OAQG;IACH,gBAAgB,EAAE,OAAO,CAAC;IAE1B;;;;OAIG;IACH,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAE5B;;OAEG;IACH,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5B;;;;OAIG;IACH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzB;;OAEG;IACH,IAAI,IAAI,IAAI,CAAC;IAEb;;OAEG;IACH,KAAK,IAAI,IAAI,CAAC;IAEd;;;;;OAKG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAE3B;;;;;OAKG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAE3B;;;;;OAKG;IACH,kBAAkB,CAAC,MAAM,EAAE,qBAAqB,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExE;;;OAGG;IACH,sBAAsB,IAAI,WAAW,EAAE,CAAC;IAExC;;;OAGG;IACH,kBAAkB,IAAI,eAAe,CAAC;IAEtC;;;;OAIG;IACH,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAEpD;;;;OAIG;IACH,kBAAkB,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAE1D;;;;;;;;;;;;;;;;;;OAkBG;IACH,aAAa,IAAI,IAAI,CAAC;IACtB;;;OAGG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"VideoPlayerBase.d.ts","sourceRoot":"","sources":["../../../../../../src/core/types/VideoPlayerBase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAI7D,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE7E,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;IAEvC;;;;;;OAMG;IACH,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IAEnC;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,qBAAqB,EAAE,MAAM,CAAC;IAE9B;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,KAAK,EAAE,OAAO,CAAC;IAEf;;OAEG;IACH,IAAI,EAAE,OAAO,CAAC;IAEd;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;;;;;;;;OASG;IACH,YAAY,EAAE,YAAY,CAAC;IAE3B;;;;;;;OAOG;IACH,sBAAsB,EAAE,sBAAsB,CAAC;IAE/C;;;;;;;OAOG;IACH,gBAAgB,EAAE,OAAO,CAAC;IAE1B;;;;;;;;OAQG;IACH,gBAAgB,EAAE,OAAO,CAAC;IAE1B;;;;OAIG;IACH,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAE5B;;OAEG;IACH,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5B;;;;OAIG;IACH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzB;;OAEG;IACH,IAAI,IAAI,IAAI,CAAC;IAEb;;OAEG;IACH,KAAK,IAAI,IAAI,CAAC;IAEd;;;;;OAKG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAE3B;;;;;OAKG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAE3B;;;;;OAKG;IACH,kBAAkB,CAAC,MAAM,EAAE,qBAAqB,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExE;;;OAGG;IACH,sBAAsB,IAAI,WAAW,EAAE,CAAC;IAExC;;;OAGG;IACH,kBAAkB,IAAI,eAAe,CAAC;IAEtC;;;;OAIG;IACH,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAEpD;;;;OAIG;IACH,kBAAkB,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAE1D;;;;;;;;;;;;;;;;;;OAkBG;IACH,aAAa,IAAI,IAAI,CAAC;IACtB;;;OAGG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,WAAW,CAAC;IAErC;;OAEG;IACH,OAAO,IAAI,IAAI,CAAC;CACjB"}
|
|
@@ -9,7 +9,9 @@ import type { VideoPlayerStatus } from './types/VideoPlayerStatus';
|
|
|
9
9
|
import { VideoPlayerEvents } from './VideoPlayerEvents';
|
|
10
10
|
import type { AllPlayerTracks, PlayerTrack, TrackType } from './types/PlayerTrack';
|
|
11
11
|
declare class VideoPlayer extends VideoPlayerEvents implements VideoPlayerBase {
|
|
12
|
-
|
|
12
|
+
private _player;
|
|
13
|
+
private _releaseTimeout;
|
|
14
|
+
protected get player(): VideoPlayerImpl;
|
|
13
15
|
constructor(source?: VideoSource | VideoConfig | VideoPlayerSource);
|
|
14
16
|
get source(): VideoPlayerSource;
|
|
15
17
|
get status(): VideoPlayerStatus;
|
|
@@ -18,6 +20,8 @@ declare class VideoPlayer extends VideoPlayerEvents implements VideoPlayerBase {
|
|
|
18
20
|
set volume(value: number);
|
|
19
21
|
get currentTime(): number;
|
|
20
22
|
set currentTime(value: number);
|
|
23
|
+
get progressEventInterval(): number;
|
|
24
|
+
set progressEventInterval(value: number);
|
|
21
25
|
get subtitleDelay(): bigint;
|
|
22
26
|
set subtitleDelay(value: bigint);
|
|
23
27
|
get muted(): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VideoPlayer.d.ts","sourceRoot":"","sources":["../../../../../src/core/VideoPlayer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,WAAW,IAAI,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACtF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC/E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAC7E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAKpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAGnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EACV,eAAe,EACf,WAAW,EACX,SAAS,EACV,MAAM,qBAAqB,CAAC;AAE7B,cAAM,WAAY,SAAQ,iBAAkB,YAAW,eAAe;IACpE,
|
|
1
|
+
{"version":3,"file":"VideoPlayer.d.ts","sourceRoot":"","sources":["../../../../../src/core/VideoPlayer.ts"],"names":[],"mappings":"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"}
|
|
@@ -33,6 +33,11 @@ export interface VideoPlayerBase {
|
|
|
33
33
|
* Returns NaN if the duration is not available.
|
|
34
34
|
*/
|
|
35
35
|
currentTime: number;
|
|
36
|
+
/**
|
|
37
|
+
* Modify the progress event interval (ms)
|
|
38
|
+
* By default it's 250ms
|
|
39
|
+
*/
|
|
40
|
+
progressEventInterval: number;
|
|
36
41
|
/**
|
|
37
42
|
* Subtitle delay (milliseconds) negative or positive number
|
|
38
43
|
*/
|
|
@@ -130,7 +135,7 @@ export interface VideoPlayerBase {
|
|
|
130
135
|
/**
|
|
131
136
|
* Replace the current source of the player.
|
|
132
137
|
* @param source - The new source of the video.
|
|
133
|
-
* @note If you want to clear the source, you can pass null.
|
|
138
|
+
* @note If you want to clear the source, you can pass null. It has the same effect as {@link release}.
|
|
134
139
|
* see {@link VideoPlayerSourceBase}
|
|
135
140
|
*/
|
|
136
141
|
replaceSourceAsync(source: VideoPlayerSourceBase | null): Promise<void>;
|
|
@@ -181,5 +186,9 @@ export interface VideoPlayerBase {
|
|
|
181
186
|
* @returns The currently selected text track, or undefined if none is selected
|
|
182
187
|
*/
|
|
183
188
|
readonly selectedTrack?: PlayerTrack;
|
|
189
|
+
/**
|
|
190
|
+
* Releases the player's native resources and releases native state.
|
|
191
|
+
*/
|
|
192
|
+
release(): void;
|
|
184
193
|
}
|
|
185
194
|
//# sourceMappingURL=VideoPlayerBase.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VideoPlayerBase.d.ts","sourceRoot":"","sources":["../../../../../../src/core/types/VideoPlayerBase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAI7D,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE7E,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;IAEvC;;;;;;OAMG;IACH,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IAEnC;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,KAAK,EAAE,OAAO,CAAC;IAEf;;OAEG;IACH,IAAI,EAAE,OAAO,CAAC;IAEd;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;;;;;;;;OASG;IACH,YAAY,EAAE,YAAY,CAAC;IAE3B;;;;;;;OAOG;IACH,sBAAsB,EAAE,sBAAsB,CAAC;IAE/C;;;;;;;OAOG;IACH,gBAAgB,EAAE,OAAO,CAAC;IAE1B;;;;;;;;OAQG;IACH,gBAAgB,EAAE,OAAO,CAAC;IAE1B;;;;OAIG;IACH,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAE5B;;OAEG;IACH,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5B;;;;OAIG;IACH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzB;;OAEG;IACH,IAAI,IAAI,IAAI,CAAC;IAEb;;OAEG;IACH,KAAK,IAAI,IAAI,CAAC;IAEd;;;;;OAKG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAE3B;;;;;OAKG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAE3B;;;;;OAKG;IACH,kBAAkB,CAAC,MAAM,EAAE,qBAAqB,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExE;;;OAGG;IACH,sBAAsB,IAAI,WAAW,EAAE,CAAC;IAExC;;;OAGG;IACH,kBAAkB,IAAI,eAAe,CAAC;IAEtC;;;;OAIG;IACH,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAEpD;;;;OAIG;IACH,kBAAkB,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAE1D;;;;;;;;;;;;;;;;;;OAkBG;IACH,aAAa,IAAI,IAAI,CAAC;IACtB;;;OAGG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"VideoPlayerBase.d.ts","sourceRoot":"","sources":["../../../../../../src/core/types/VideoPlayerBase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAI7D,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE7E,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;IAEvC;;;;;;OAMG;IACH,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IAEnC;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,qBAAqB,EAAE,MAAM,CAAC;IAE9B;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,KAAK,EAAE,OAAO,CAAC;IAEf;;OAEG;IACH,IAAI,EAAE,OAAO,CAAC;IAEd;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;;;;;;;;OASG;IACH,YAAY,EAAE,YAAY,CAAC;IAE3B;;;;;;;OAOG;IACH,sBAAsB,EAAE,sBAAsB,CAAC;IAE/C;;;;;;;OAOG;IACH,gBAAgB,EAAE,OAAO,CAAC;IAE1B;;;;;;;;OAQG;IACH,gBAAgB,EAAE,OAAO,CAAC;IAE1B;;;;OAIG;IACH,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAE5B;;OAEG;IACH,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5B;;;;OAIG;IACH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzB;;OAEG;IACH,IAAI,IAAI,IAAI,CAAC;IAEb;;OAEG;IACH,KAAK,IAAI,IAAI,CAAC;IAEd;;;;;OAKG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAE3B;;;;;OAKG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAE3B;;;;;OAKG;IACH,kBAAkB,CAAC,MAAM,EAAE,qBAAqB,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExE;;;OAGG;IACH,sBAAsB,IAAI,WAAW,EAAE,CAAC;IAExC;;;OAGG;IACH,kBAAkB,IAAI,eAAe,CAAC;IAEtC;;;;OAIG;IACH,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAEpD;;;;OAIG;IACH,kBAAkB,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAE1D;;;;;;;;;;;;;;;;;;OAkBG;IACH,aAAa,IAAI,IAAI,CAAC;IACtB;;;OAGG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,WAAW,CAAC;IAErC;;OAEG;IACH,OAAO,IAAI,IAAI,CAAC;CACjB"}
|
|
@@ -131,6 +131,15 @@ namespace margelo::nitro::video {
|
|
|
131
131
|
static const auto method = javaClassStatic()->getMethod<void(double /* currentTime */)>("setCurrentTime");
|
|
132
132
|
method(_javaPart, currentTime);
|
|
133
133
|
}
|
|
134
|
+
double JHybridVideoPlayerSpec::getProgressEventInterval() {
|
|
135
|
+
static const auto method = javaClassStatic()->getMethod<double()>("getProgressEventInterval");
|
|
136
|
+
auto __result = method(_javaPart);
|
|
137
|
+
return __result;
|
|
138
|
+
}
|
|
139
|
+
void JHybridVideoPlayerSpec::setProgressEventInterval(double progressEventInterval) {
|
|
140
|
+
static const auto method = javaClassStatic()->getMethod<void(double /* progressEventInterval */)>("setProgressEventInterval");
|
|
141
|
+
method(_javaPart, progressEventInterval);
|
|
142
|
+
}
|
|
134
143
|
int64_t JHybridVideoPlayerSpec::getSubtitleDelay() {
|
|
135
144
|
static const auto method = javaClassStatic()->getMethod<int64_t()>("getSubtitleDelay");
|
|
136
145
|
auto __result = method(_javaPart);
|
|
@@ -307,5 +316,9 @@ namespace margelo::nitro::video {
|
|
|
307
316
|
static const auto method = javaClassStatic()->getMethod<void()>("resetForReuse");
|
|
308
317
|
method(_javaPart);
|
|
309
318
|
}
|
|
319
|
+
void JHybridVideoPlayerSpec::release() {
|
|
320
|
+
static const auto method = javaClassStatic()->getMethod<void()>("release");
|
|
321
|
+
method(_javaPart);
|
|
322
|
+
}
|
|
310
323
|
|
|
311
324
|
} // namespace margelo::nitro::video
|
|
@@ -60,6 +60,8 @@ namespace margelo::nitro::video {
|
|
|
60
60
|
void setVolume(double volume) override;
|
|
61
61
|
double getCurrentTime() override;
|
|
62
62
|
void setCurrentTime(double currentTime) override;
|
|
63
|
+
double getProgressEventInterval() override;
|
|
64
|
+
void setProgressEventInterval(double progressEventInterval) override;
|
|
63
65
|
int64_t getSubtitleDelay() override;
|
|
64
66
|
void setSubtitleDelay(int64_t subtitleDelay) override;
|
|
65
67
|
bool getMuted() override;
|
|
@@ -93,6 +95,7 @@ namespace margelo::nitro::video {
|
|
|
93
95
|
void selectTrackById(TrackType type, const std::optional<std::string>& id) override;
|
|
94
96
|
void selectTrackByIndex(TrackType type, std::optional<double> index) override;
|
|
95
97
|
void resetForReuse() override;
|
|
98
|
+
void release() override;
|
|
96
99
|
|
|
97
100
|
private:
|
|
98
101
|
friend HybridBase;
|
|
@@ -35,9 +35,12 @@ namespace margelo::nitro::video {
|
|
|
35
35
|
double currentTime = this->getFieldValue(fieldCurrentTime);
|
|
36
36
|
static const auto fieldBufferDuration = clazz->getField<double>("bufferDuration");
|
|
37
37
|
double bufferDuration = this->getFieldValue(fieldBufferDuration);
|
|
38
|
+
static const auto fieldSeekableDuration = clazz->getField<double>("seekableDuration");
|
|
39
|
+
double seekableDuration = this->getFieldValue(fieldSeekableDuration);
|
|
38
40
|
return onProgressData(
|
|
39
41
|
currentTime,
|
|
40
|
-
bufferDuration
|
|
42
|
+
bufferDuration,
|
|
43
|
+
seekableDuration
|
|
41
44
|
);
|
|
42
45
|
}
|
|
43
46
|
|
|
@@ -47,13 +50,14 @@ namespace margelo::nitro::video {
|
|
|
47
50
|
*/
|
|
48
51
|
[[maybe_unused]]
|
|
49
52
|
static jni::local_ref<JonProgressData::javaobject> fromCpp(const onProgressData& value) {
|
|
50
|
-
using JSignature = JonProgressData(double, double);
|
|
53
|
+
using JSignature = JonProgressData(double, double, double);
|
|
51
54
|
static const auto clazz = javaClassStatic();
|
|
52
55
|
static const auto create = clazz->getStaticMethod<JSignature>("fromCpp");
|
|
53
56
|
return create(
|
|
54
57
|
clazz,
|
|
55
58
|
value.currentTime,
|
|
56
|
-
value.bufferDuration
|
|
59
|
+
value.bufferDuration,
|
|
60
|
+
value.seekableDuration
|
|
57
61
|
);
|
|
58
62
|
}
|
|
59
63
|
};
|
|
@@ -78,6 +78,12 @@ abstract class HybridVideoPlayerSpec: HybridObject() {
|
|
|
78
78
|
@set:Keep
|
|
79
79
|
abstract var currentTime: Double
|
|
80
80
|
|
|
81
|
+
@get:DoNotStrip
|
|
82
|
+
@get:Keep
|
|
83
|
+
@set:DoNotStrip
|
|
84
|
+
@set:Keep
|
|
85
|
+
abstract var progressEventInterval: Double
|
|
86
|
+
|
|
81
87
|
@get:DoNotStrip
|
|
82
88
|
@get:Keep
|
|
83
89
|
@set:DoNotStrip
|
|
@@ -182,6 +188,10 @@ abstract class HybridVideoPlayerSpec: HybridObject() {
|
|
|
182
188
|
@DoNotStrip
|
|
183
189
|
@Keep
|
|
184
190
|
abstract fun resetForReuse(): Unit
|
|
191
|
+
|
|
192
|
+
@DoNotStrip
|
|
193
|
+
@Keep
|
|
194
|
+
abstract fun release(): Unit
|
|
185
195
|
|
|
186
196
|
private external fun initHybrid(): HybridData
|
|
187
197
|
|
|
@@ -22,7 +22,10 @@ data class onProgressData(
|
|
|
22
22
|
val currentTime: Double,
|
|
23
23
|
@DoNotStrip
|
|
24
24
|
@Keep
|
|
25
|
-
val bufferDuration: Double
|
|
25
|
+
val bufferDuration: Double,
|
|
26
|
+
@DoNotStrip
|
|
27
|
+
@Keep
|
|
28
|
+
val seekableDuration: Double
|
|
26
29
|
) {
|
|
27
30
|
/* primary constructor */
|
|
28
31
|
|
|
@@ -34,8 +37,8 @@ data class onProgressData(
|
|
|
34
37
|
@Keep
|
|
35
38
|
@Suppress("unused")
|
|
36
39
|
@JvmStatic
|
|
37
|
-
private fun fromCpp(currentTime: Double, bufferDuration: Double): onProgressData {
|
|
38
|
-
return onProgressData(currentTime, bufferDuration)
|
|
40
|
+
private fun fromCpp(currentTime: Double, bufferDuration: Double, seekableDuration: Double): onProgressData {
|
|
41
|
+
return onProgressData(currentTime, bufferDuration, seekableDuration)
|
|
39
42
|
}
|
|
40
43
|
}
|
|
41
44
|
}
|
|
@@ -121,6 +121,12 @@ namespace margelo::nitro::video {
|
|
|
121
121
|
inline void setCurrentTime(double currentTime) noexcept override {
|
|
122
122
|
_swiftPart.setCurrentTime(std::forward<decltype(currentTime)>(currentTime));
|
|
123
123
|
}
|
|
124
|
+
inline double getProgressEventInterval() noexcept override {
|
|
125
|
+
return _swiftPart.getProgressEventInterval();
|
|
126
|
+
}
|
|
127
|
+
inline void setProgressEventInterval(double progressEventInterval) noexcept override {
|
|
128
|
+
_swiftPart.setProgressEventInterval(std::forward<decltype(progressEventInterval)>(progressEventInterval));
|
|
129
|
+
}
|
|
124
130
|
inline int64_t getSubtitleDelay() noexcept override {
|
|
125
131
|
return _swiftPart.getSubtitleDelay();
|
|
126
132
|
}
|
|
@@ -263,6 +269,12 @@ namespace margelo::nitro::video {
|
|
|
263
269
|
std::rethrow_exception(__result.error());
|
|
264
270
|
}
|
|
265
271
|
}
|
|
272
|
+
inline void release() override {
|
|
273
|
+
auto __result = _swiftPart.release();
|
|
274
|
+
if (__result.hasError()) [[unlikely]] {
|
|
275
|
+
std::rethrow_exception(__result.error());
|
|
276
|
+
}
|
|
277
|
+
}
|
|
266
278
|
|
|
267
279
|
private:
|
|
268
280
|
ReactNativeVideo::HybridVideoPlayerSpec_cxx _swiftPart;
|
|
@@ -18,6 +18,7 @@ public protocol HybridVideoPlayerSpec_protocol: HybridObject {
|
|
|
18
18
|
var duration: Double { get }
|
|
19
19
|
var volume: Double { get set }
|
|
20
20
|
var currentTime: Double { get set }
|
|
21
|
+
var progressEventInterval: Double { get set }
|
|
21
22
|
var subtitleDelay: Int64 { get set }
|
|
22
23
|
var muted: Bool { get set }
|
|
23
24
|
var loop: Bool { get set }
|
|
@@ -42,6 +43,7 @@ public protocol HybridVideoPlayerSpec_protocol: HybridObject {
|
|
|
42
43
|
func selectTrackById(type: TrackType, id: String?) throws -> Void
|
|
43
44
|
func selectTrackByIndex(type: TrackType, index: Double?) throws -> Void
|
|
44
45
|
func resetForReuse() throws -> Void
|
|
46
|
+
func release() throws -> Void
|
|
45
47
|
}
|
|
46
48
|
|
|
47
49
|
public extension HybridVideoPlayerSpec_protocol {
|
|
@@ -181,6 +181,17 @@ open class HybridVideoPlayerSpec_cxx {
|
|
|
181
181
|
}
|
|
182
182
|
}
|
|
183
183
|
|
|
184
|
+
public final var progressEventInterval: Double {
|
|
185
|
+
@inline(__always)
|
|
186
|
+
get {
|
|
187
|
+
return self.__implementation.progressEventInterval
|
|
188
|
+
}
|
|
189
|
+
@inline(__always)
|
|
190
|
+
set {
|
|
191
|
+
self.__implementation.progressEventInterval = newValue
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
184
195
|
public final var subtitleDelay: Int64 {
|
|
185
196
|
@inline(__always)
|
|
186
197
|
get {
|
|
@@ -483,4 +494,15 @@ open class HybridVideoPlayerSpec_cxx {
|
|
|
483
494
|
return bridge.create_Result_void_(__exceptionPtr)
|
|
484
495
|
}
|
|
485
496
|
}
|
|
497
|
+
|
|
498
|
+
@inline(__always)
|
|
499
|
+
public final func release() -> bridge.Result_void_ {
|
|
500
|
+
do {
|
|
501
|
+
try self.__implementation.release()
|
|
502
|
+
return bridge.create_Result_void_()
|
|
503
|
+
} catch (let __error) {
|
|
504
|
+
let __exceptionPtr = __error.toCpp()
|
|
505
|
+
return bridge.create_Result_void_(__exceptionPtr)
|
|
506
|
+
}
|
|
507
|
+
}
|
|
486
508
|
}
|
|
@@ -19,8 +19,8 @@ public extension onProgressData {
|
|
|
19
19
|
/**
|
|
20
20
|
* Create a new instance of `onProgressData`.
|
|
21
21
|
*/
|
|
22
|
-
init(currentTime: Double, bufferDuration: Double) {
|
|
23
|
-
self.init(currentTime, bufferDuration)
|
|
22
|
+
init(currentTime: Double, bufferDuration: Double, seekableDuration: Double) {
|
|
23
|
+
self.init(currentTime, bufferDuration, seekableDuration)
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
var currentTime: Double {
|
|
@@ -44,4 +44,15 @@ public extension onProgressData {
|
|
|
44
44
|
self.__bufferDuration = newValue
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
|
+
|
|
48
|
+
var seekableDuration: Double {
|
|
49
|
+
@inline(__always)
|
|
50
|
+
get {
|
|
51
|
+
return self.__seekableDuration
|
|
52
|
+
}
|
|
53
|
+
@inline(__always)
|
|
54
|
+
set {
|
|
55
|
+
self.__seekableDuration = newValue
|
|
56
|
+
}
|
|
57
|
+
}
|
|
47
58
|
}
|
|
@@ -24,6 +24,8 @@ namespace margelo::nitro::video {
|
|
|
24
24
|
prototype.registerHybridSetter("volume", &HybridVideoPlayerSpec::setVolume);
|
|
25
25
|
prototype.registerHybridGetter("currentTime", &HybridVideoPlayerSpec::getCurrentTime);
|
|
26
26
|
prototype.registerHybridSetter("currentTime", &HybridVideoPlayerSpec::setCurrentTime);
|
|
27
|
+
prototype.registerHybridGetter("progressEventInterval", &HybridVideoPlayerSpec::getProgressEventInterval);
|
|
28
|
+
prototype.registerHybridSetter("progressEventInterval", &HybridVideoPlayerSpec::setProgressEventInterval);
|
|
27
29
|
prototype.registerHybridGetter("subtitleDelay", &HybridVideoPlayerSpec::getSubtitleDelay);
|
|
28
30
|
prototype.registerHybridSetter("subtitleDelay", &HybridVideoPlayerSpec::setSubtitleDelay);
|
|
29
31
|
prototype.registerHybridGetter("muted", &HybridVideoPlayerSpec::getMuted);
|
|
@@ -54,6 +56,7 @@ namespace margelo::nitro::video {
|
|
|
54
56
|
prototype.registerHybridMethod("selectTrackById", &HybridVideoPlayerSpec::selectTrackById);
|
|
55
57
|
prototype.registerHybridMethod("selectTrackByIndex", &HybridVideoPlayerSpec::selectTrackByIndex);
|
|
56
58
|
prototype.registerHybridMethod("resetForReuse", &HybridVideoPlayerSpec::resetForReuse);
|
|
59
|
+
prototype.registerHybridMethod("release", &HybridVideoPlayerSpec::release);
|
|
57
60
|
});
|
|
58
61
|
}
|
|
59
62
|
|
|
@@ -83,6 +83,8 @@ namespace margelo::nitro::video {
|
|
|
83
83
|
virtual void setVolume(double volume) = 0;
|
|
84
84
|
virtual double getCurrentTime() = 0;
|
|
85
85
|
virtual void setCurrentTime(double currentTime) = 0;
|
|
86
|
+
virtual double getProgressEventInterval() = 0;
|
|
87
|
+
virtual void setProgressEventInterval(double progressEventInterval) = 0;
|
|
86
88
|
virtual int64_t getSubtitleDelay() = 0;
|
|
87
89
|
virtual void setSubtitleDelay(int64_t subtitleDelay) = 0;
|
|
88
90
|
virtual bool getMuted() = 0;
|
|
@@ -116,6 +118,7 @@ namespace margelo::nitro::video {
|
|
|
116
118
|
virtual void selectTrackById(TrackType type, const std::optional<std::string>& id) = 0;
|
|
117
119
|
virtual void selectTrackByIndex(TrackType type, std::optional<double> index) = 0;
|
|
118
120
|
virtual void resetForReuse() = 0;
|
|
121
|
+
virtual void release() = 0;
|
|
119
122
|
|
|
120
123
|
protected:
|
|
121
124
|
// Hybrid Setup
|
|
@@ -36,10 +36,11 @@ namespace margelo::nitro::video {
|
|
|
36
36
|
public:
|
|
37
37
|
double currentTime SWIFT_PRIVATE;
|
|
38
38
|
double bufferDuration SWIFT_PRIVATE;
|
|
39
|
+
double seekableDuration SWIFT_PRIVATE;
|
|
39
40
|
|
|
40
41
|
public:
|
|
41
42
|
onProgressData() = default;
|
|
42
|
-
explicit onProgressData(double currentTime, double bufferDuration): currentTime(currentTime), bufferDuration(bufferDuration) {}
|
|
43
|
+
explicit onProgressData(double currentTime, double bufferDuration, double seekableDuration): currentTime(currentTime), bufferDuration(bufferDuration), seekableDuration(seekableDuration) {}
|
|
43
44
|
};
|
|
44
45
|
|
|
45
46
|
} // namespace margelo::nitro::video
|
|
@@ -53,13 +54,15 @@ namespace margelo::nitro {
|
|
|
53
54
|
jsi::Object obj = arg.asObject(runtime);
|
|
54
55
|
return margelo::nitro::video::onProgressData(
|
|
55
56
|
JSIConverter<double>::fromJSI(runtime, obj.getProperty(runtime, "currentTime")),
|
|
56
|
-
JSIConverter<double>::fromJSI(runtime, obj.getProperty(runtime, "bufferDuration"))
|
|
57
|
+
JSIConverter<double>::fromJSI(runtime, obj.getProperty(runtime, "bufferDuration")),
|
|
58
|
+
JSIConverter<double>::fromJSI(runtime, obj.getProperty(runtime, "seekableDuration"))
|
|
57
59
|
);
|
|
58
60
|
}
|
|
59
61
|
static inline jsi::Value toJSI(jsi::Runtime& runtime, const margelo::nitro::video::onProgressData& arg) {
|
|
60
62
|
jsi::Object obj(runtime);
|
|
61
63
|
obj.setProperty(runtime, "currentTime", JSIConverter<double>::toJSI(runtime, arg.currentTime));
|
|
62
64
|
obj.setProperty(runtime, "bufferDuration", JSIConverter<double>::toJSI(runtime, arg.bufferDuration));
|
|
65
|
+
obj.setProperty(runtime, "seekableDuration", JSIConverter<double>::toJSI(runtime, arg.seekableDuration));
|
|
63
66
|
return obj;
|
|
64
67
|
}
|
|
65
68
|
static inline bool canConvert(jsi::Runtime& runtime, const jsi::Value& value) {
|
|
@@ -72,6 +75,7 @@ namespace margelo::nitro {
|
|
|
72
75
|
}
|
|
73
76
|
if (!JSIConverter<double>::canConvert(runtime, obj.getProperty(runtime, "currentTime"))) return false;
|
|
74
77
|
if (!JSIConverter<double>::canConvert(runtime, obj.getProperty(runtime, "bufferDuration"))) return false;
|
|
78
|
+
if (!JSIConverter<double>::canConvert(runtime, obj.getProperty(runtime, "seekableDuration"))) return false;
|
|
75
79
|
return true;
|
|
76
80
|
}
|
|
77
81
|
};
|
package/package.json
CHANGED
package/src/core/VideoPlayer.ts
CHANGED
|
@@ -22,7 +22,19 @@ import type {
|
|
|
22
22
|
} from './types/PlayerTrack';
|
|
23
23
|
|
|
24
24
|
class VideoPlayer extends VideoPlayerEvents implements VideoPlayerBase {
|
|
25
|
-
|
|
25
|
+
private _player: VideoPlayerImpl | undefined;
|
|
26
|
+
private _releaseTimeout: ReturnType<typeof setTimeout> | undefined;
|
|
27
|
+
|
|
28
|
+
protected get player(): VideoPlayerImpl {
|
|
29
|
+
if (this._player === undefined) {
|
|
30
|
+
throw new VideoRuntimeError(
|
|
31
|
+
'player/released',
|
|
32
|
+
"You can't access player after it's released"
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return this._player;
|
|
37
|
+
}
|
|
26
38
|
|
|
27
39
|
constructor(source?: VideoSource | VideoConfig | VideoPlayerSource) {
|
|
28
40
|
const player = createPlayer(
|
|
@@ -31,17 +43,39 @@ class VideoPlayer extends VideoPlayerEvents implements VideoPlayerBase {
|
|
|
31
43
|
|
|
32
44
|
// Initialize events
|
|
33
45
|
super(player.eventEmitter);
|
|
34
|
-
this.
|
|
46
|
+
this._player = player;
|
|
35
47
|
}
|
|
36
48
|
|
|
37
49
|
/**
|
|
38
|
-
*
|
|
39
|
-
* After calling this method, the player is no longer usable.
|
|
50
|
+
* Releases the player's native resources and releases native state.
|
|
40
51
|
* @internal
|
|
41
52
|
*/
|
|
42
53
|
__destroy() {
|
|
54
|
+
if (this._player === undefined) return;
|
|
55
|
+
|
|
43
56
|
this.clearAllEvents();
|
|
44
|
-
|
|
57
|
+
|
|
58
|
+
try {
|
|
59
|
+
this.player.release();
|
|
60
|
+
} catch (error) {
|
|
61
|
+
// Best effort cleanup: teardown must never crash app unmount.
|
|
62
|
+
console.error('Failed to cleanup native player resources', error);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// We leave hybrid object to be cleaned up by garbage collector
|
|
66
|
+
// So we update memory size to ensure that memory is released
|
|
67
|
+
// when needed
|
|
68
|
+
this.updateMemorySize();
|
|
69
|
+
|
|
70
|
+
// We wait for 5s to let late events that were triggered before release to be processed
|
|
71
|
+
if (this._releaseTimeout !== undefined) {
|
|
72
|
+
clearTimeout(this._releaseTimeout);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
this._releaseTimeout = setTimeout(() => {
|
|
76
|
+
this._player = undefined;
|
|
77
|
+
this._releaseTimeout = undefined;
|
|
78
|
+
}, 5000);
|
|
45
79
|
}
|
|
46
80
|
|
|
47
81
|
/**
|
|
@@ -125,6 +159,14 @@ class VideoPlayer extends VideoPlayerEvents implements VideoPlayerBase {
|
|
|
125
159
|
this.player.currentTime = value;
|
|
126
160
|
}
|
|
127
161
|
|
|
162
|
+
get progressEventInterval(): number {
|
|
163
|
+
return this.player.progressEventInterval;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
set progressEventInterval(value: number) {
|
|
167
|
+
this.player.progressEventInterval = value;
|
|
168
|
+
}
|
|
169
|
+
|
|
128
170
|
get subtitleDelay(): bigint {
|
|
129
171
|
return this.player.subtitleDelay;
|
|
130
172
|
}
|
|
@@ -42,6 +42,12 @@ export interface VideoPlayerBase {
|
|
|
42
42
|
*/
|
|
43
43
|
currentTime: number;
|
|
44
44
|
|
|
45
|
+
/**
|
|
46
|
+
* Modify the progress event interval (ms)
|
|
47
|
+
* By default it's 250ms
|
|
48
|
+
*/
|
|
49
|
+
progressEventInterval: number;
|
|
50
|
+
|
|
45
51
|
/**
|
|
46
52
|
* Subtitle delay (milliseconds) negative or positive number
|
|
47
53
|
*/
|
|
@@ -154,7 +160,7 @@ export interface VideoPlayerBase {
|
|
|
154
160
|
/**
|
|
155
161
|
* Replace the current source of the player.
|
|
156
162
|
* @param source - The new source of the video.
|
|
157
|
-
* @note If you want to clear the source, you can pass null.
|
|
163
|
+
* @note If you want to clear the source, you can pass null. It has the same effect as {@link release}.
|
|
158
164
|
* see {@link VideoPlayerSourceBase}
|
|
159
165
|
*/
|
|
160
166
|
replaceSourceAsync(source: VideoPlayerSourceBase | null): Promise<void>;
|
|
@@ -210,4 +216,9 @@ export interface VideoPlayerBase {
|
|
|
210
216
|
* @returns The currently selected text track, or undefined if none is selected
|
|
211
217
|
*/
|
|
212
218
|
readonly selectedTrack?: PlayerTrack;
|
|
219
|
+
|
|
220
|
+
/**
|
|
221
|
+
* Releases the player's native resources and releases native state.
|
|
222
|
+
*/
|
|
223
|
+
release(): void;
|
|
213
224
|
}
|