@pigeonmal/react-native-video 7.0.0-beta.13 → 7.0.0-beta.16
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 +3 -11
- package/android/build.gradle +3 -2
- package/android/gradle.properties +1 -1
- package/android/src/main/java/com/twg/video/core/custom/MyRenderersFactory.java +91 -2
- package/android/src/main/java/com/twg/video/core/player/DataSourceFactoryUtils.kt +1 -1
- package/android/src/main/java/com/twg/video/core/utils/TvDetector.kt +14 -0
- package/android/src/main/java/com/twg/video/hybrids/videoplayer/HybridVideoPlayer.kt +23 -19
- package/android/src/main/java/com/twg/video/hybrids/videoplayereventemitter/HybridVideoPlayerEventEmitter.kt +6 -0
- package/android/src/stubs/subs/androidx/media3/exoplayer/text/NonFinalTextRenderer.java +37 -11
- package/lib/commonjs/core/VideoPlayerEvents.js +7 -1
- package/lib/commonjs/core/VideoPlayerEvents.js.map +1 -1
- package/lib/commonjs/core/types/VideoError.js.map +1 -1
- package/lib/module/core/VideoPlayerEvents.js +7 -1
- package/lib/module/core/VideoPlayerEvents.js.map +1 -1
- package/lib/module/core/types/VideoError.js.map +1 -1
- package/lib/typescript/commonjs/src/core/VideoPlayerEvents.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/core/types/VideoError.d.ts +1 -1
- package/lib/typescript/commonjs/src/core/types/VideoError.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/spec/nitro/VideoPlayerEventEmitter.nitro.d.ts +6 -0
- package/lib/typescript/commonjs/src/spec/nitro/VideoPlayerEventEmitter.nitro.d.ts.map +1 -1
- package/lib/typescript/module/src/core/VideoPlayerEvents.d.ts.map +1 -1
- package/lib/typescript/module/src/core/types/VideoError.d.ts +1 -1
- package/lib/typescript/module/src/core/types/VideoError.d.ts.map +1 -1
- package/lib/typescript/module/src/spec/nitro/VideoPlayerEventEmitter.nitro.d.ts +6 -0
- package/lib/typescript/module/src/spec/nitro/VideoPlayerEventEmitter.nitro.d.ts.map +1 -1
- package/nitrogen/generated/android/ReactNativeVideoOnLoad.cpp +2 -0
- package/nitrogen/generated/android/c++/JFunc_void_std__string.hpp +76 -0
- package/nitrogen/generated/android/c++/JHybridVideoPlayerEventEmitterSpec.cpp +6 -0
- package/nitrogen/generated/android/c++/JHybridVideoPlayerEventEmitterSpec.hpp +1 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Func_void_std__string.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/video/HybridVideoPlayerEventEmitterSpec.kt +9 -0
- package/nitrogen/generated/ios/ReactNativeVideo-Swift-Cxx-Bridge.cpp +8 -8
- package/nitrogen/generated/ios/ReactNativeVideo-Swift-Cxx-Bridge.hpp +22 -22
- package/nitrogen/generated/ios/c++/HybridVideoPlayerEventEmitterSpecSwift.hpp +8 -0
- package/nitrogen/generated/ios/swift/HybridVideoPlayerEventEmitterSpec.swift +1 -0
- package/nitrogen/generated/ios/swift/HybridVideoPlayerEventEmitterSpec_cxx.swift +17 -0
- package/nitrogen/generated/shared/c++/HybridVideoPlayerEventEmitterSpec.cpp +1 -0
- package/nitrogen/generated/shared/c++/HybridVideoPlayerEventEmitterSpec.hpp +2 -1
- package/package.json +2 -2
- package/src/core/VideoPlayerEvents.ts +12 -2
- package/src/core/types/VideoError.ts +2 -1
- package/src/spec/nitro/VideoPlayerEventEmitter.nitro.ts +9 -0
- package/android/media3-ffmpeg-decoder/build.gradle +0 -2
- package/android/media3-ffmpeg-decoder/ffmpeg.aar +0 -0
package/README.md
CHANGED
|
@@ -3,21 +3,12 @@ Date: 19/12/2025
|
|
|
3
3
|
|
|
4
4
|
(Only android)
|
|
5
5
|
Install :
|
|
6
|
-
|
|
7
|
-
1. npm install @pigeonmal/react-native-video@beta react-native-nitro-fetch
|
|
8
|
-
2. Add this to android/app/settings.gradle
|
|
9
|
-
|
|
10
|
-
```
|
|
11
|
-
include ':media3-ffmpeg-decoder'
|
|
12
|
-
project(':media3-ffmpeg-decoder').projectDir = file('../node_modules/@pigeonmal/react-native-video/android/media3-ffmpeg-decoder')
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
3. create a patch for react-native-nitro-fetch like in the patches/react-native-nitro-fetch@x.patch
|
|
16
|
-
|
|
6
|
+
npm install @pigeonmal/react-native-video@beta @pigeonmal/react-native-nitro-fetch
|
|
17
7
|
---
|
|
18
8
|
|
|
19
9
|
Features:
|
|
20
10
|
|
|
11
|
+
- modern media3 1.8.0
|
|
21
12
|
- ffmpeg fallback
|
|
22
13
|
- videoconfig: externalAudios (array of AudioTrack)
|
|
23
14
|
- videoconfig: forceType 'm3u8' or 'mpd' if url not have explicit extension
|
|
@@ -33,6 +24,7 @@ Features:
|
|
|
33
24
|
- bugfix: external subtitles in hls/dash
|
|
34
25
|
- bugfix: add langs to external subs
|
|
35
26
|
- bugfix: onloadstart
|
|
27
|
+
- bugfix: onError also catch playback exception 'player/playback-exception'
|
|
36
28
|
- nullable video player source : new VideoPlayer(undefined);
|
|
37
29
|
- TextTrack type replaced to PlayerTrack
|
|
38
30
|
- removed onTrackChange event
|
package/android/build.gradle
CHANGED
|
@@ -233,8 +233,9 @@ dependencies {
|
|
|
233
233
|
// For Media Session
|
|
234
234
|
implementation "androidx.media3:media3-session:$media3_version"
|
|
235
235
|
|
|
236
|
-
|
|
237
|
-
implementation
|
|
236
|
+
implementation project(':pigeonmal_react-native-nitro-fetch')
|
|
237
|
+
implementation "io.github.anilbeesetti:nextlib-media3ext:1.8.0-0.9.0" // To add media3 software decoders and extensions
|
|
238
|
+
// implementation "io.github.anilbeesetti:nextlib-mediainfo:1.8.0-0.9.0" // To get media info through ffmpeg
|
|
238
239
|
|
|
239
240
|
if (ExoplayerDependencies.useExoplayerDash) {
|
|
240
241
|
implementation "androidx.media3:media3-exoplayer-dash:$media3_version"
|
|
@@ -3,9 +3,16 @@ package com.twg.video.core.custom;
|
|
|
3
3
|
import androidx.media3.exoplayer.DefaultRenderersFactory;
|
|
4
4
|
import androidx.media3.exoplayer.Renderer;
|
|
5
5
|
import androidx.media3.exoplayer.text.TextOutput;
|
|
6
|
-
|
|
6
|
+
import android.os.Handler;
|
|
7
|
+
import androidx.media3.common.util.Log;
|
|
8
|
+
import androidx.media3.exoplayer.audio.AudioRendererEventListener;
|
|
9
|
+
import androidx.media3.exoplayer.audio.AudioSink;
|
|
10
|
+
import androidx.media3.exoplayer.mediacodec.MediaCodecSelector;
|
|
11
|
+
import androidx.media3.exoplayer.video.VideoRendererEventListener;
|
|
7
12
|
import android.content.Context;
|
|
8
13
|
import android.os.Looper;
|
|
14
|
+
import io.github.anilbeesetti.nextlib.media3ext.ffdecoder.FfmpegAudioRenderer;
|
|
15
|
+
import io.github.anilbeesetti.nextlib.media3ext.ffdecoder.FfmpegVideoRenderer;
|
|
9
16
|
|
|
10
17
|
import java.util.ArrayList;
|
|
11
18
|
|
|
@@ -13,10 +20,12 @@ public class MyRenderersFactory extends DefaultRenderersFactory implements TextS
|
|
|
13
20
|
|
|
14
21
|
private MyTextRenderer textRenderer;
|
|
15
22
|
private long defaultOffsetUs;
|
|
23
|
+
private boolean isTv;
|
|
16
24
|
|
|
17
|
-
public MyRenderersFactory(Context context, long defaultDelaySub) {
|
|
25
|
+
public MyRenderersFactory(Context context, long defaultDelaySub, boolean isTv) {
|
|
18
26
|
super(context);
|
|
19
27
|
textRenderer = null;
|
|
28
|
+
isTv = isTv;
|
|
20
29
|
defaultOffsetUs = defaultDelaySub;
|
|
21
30
|
}
|
|
22
31
|
|
|
@@ -75,4 +84,84 @@ public class MyRenderersFactory extends DefaultRenderersFactory implements TextS
|
|
|
75
84
|
textRenderer.addTextFilters(textFilters);
|
|
76
85
|
}
|
|
77
86
|
|
|
87
|
+
@Override
|
|
88
|
+
protected void buildAudioRenderers(
|
|
89
|
+
Context context,
|
|
90
|
+
int extensionRendererMode,
|
|
91
|
+
MediaCodecSelector mediaCodecSelector,
|
|
92
|
+
boolean enableDecoderFallback,
|
|
93
|
+
AudioSink audioSink,
|
|
94
|
+
Handler eventHandler,
|
|
95
|
+
AudioRendererEventListener eventListener,
|
|
96
|
+
ArrayList<Renderer> out) {
|
|
97
|
+
|
|
98
|
+
super.buildAudioRenderers(
|
|
99
|
+
context,
|
|
100
|
+
extensionRendererMode,
|
|
101
|
+
mediaCodecSelector,
|
|
102
|
+
enableDecoderFallback,
|
|
103
|
+
audioSink,
|
|
104
|
+
eventHandler,
|
|
105
|
+
eventListener,
|
|
106
|
+
out
|
|
107
|
+
);
|
|
108
|
+
|
|
109
|
+
if (extensionRendererMode == EXTENSION_RENDERER_MODE_OFF) return;
|
|
110
|
+
|
|
111
|
+
int extensionRendererIndex = out.size();
|
|
112
|
+
if (extensionRendererMode == EXTENSION_RENDERER_MODE_PREFER) {
|
|
113
|
+
extensionRendererIndex--;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
try {
|
|
117
|
+
FfmpegAudioRenderer renderer = new FfmpegAudioRenderer(eventHandler, eventListener, audioSink);
|
|
118
|
+
out.add(extensionRendererIndex++, renderer);
|
|
119
|
+
Log.i(TAG, "Loaded FfmpegAudioRenderer.");
|
|
120
|
+
} catch (Exception e) {
|
|
121
|
+
throw new RuntimeException("Error instantiating Ffmpeg extension", e);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
@Override
|
|
126
|
+
protected void buildVideoRenderers(
|
|
127
|
+
Context context,
|
|
128
|
+
int extensionRendererMode,
|
|
129
|
+
MediaCodecSelector mediaCodecSelector,
|
|
130
|
+
boolean enableDecoderFallback,
|
|
131
|
+
Handler eventHandler,
|
|
132
|
+
VideoRendererEventListener eventListener,
|
|
133
|
+
long allowedVideoJoiningTimeMs,
|
|
134
|
+
ArrayList<Renderer> out) {
|
|
135
|
+
|
|
136
|
+
super.buildVideoRenderers(
|
|
137
|
+
context,
|
|
138
|
+
extensionRendererMode,
|
|
139
|
+
mediaCodecSelector,
|
|
140
|
+
enableDecoderFallback,
|
|
141
|
+
eventHandler,
|
|
142
|
+
eventListener,
|
|
143
|
+
allowedVideoJoiningTimeMs,
|
|
144
|
+
out
|
|
145
|
+
);
|
|
146
|
+
|
|
147
|
+
if (isTv || extensionRendererMode == EXTENSION_RENDERER_MODE_OFF) return;
|
|
148
|
+
|
|
149
|
+
int extensionRendererIndex = out.size();
|
|
150
|
+
if (extensionRendererMode == EXTENSION_RENDERER_MODE_PREFER) {
|
|
151
|
+
extensionRendererIndex--;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
try {
|
|
155
|
+
FfmpegVideoRenderer renderer = new FfmpegVideoRenderer(
|
|
156
|
+
allowedVideoJoiningTimeMs, eventHandler, eventListener, MAX_DROPPED_VIDEO_FRAME_COUNT_TO_NOTIFY
|
|
157
|
+
);
|
|
158
|
+
out.add(extensionRendererIndex++, renderer);
|
|
159
|
+
Log.i(TAG, "Loaded FfmpegVideoRenderer.");
|
|
160
|
+
} catch (Exception e) {
|
|
161
|
+
throw new RuntimeException("Error instantiating Ffmpeg extension", e);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
public static final String TAG = "MyRenderersFactory";
|
|
166
|
+
|
|
78
167
|
}
|
|
@@ -60,7 +60,7 @@ fun buildHttpDataSourceFactory(context: Context, source: HybridVideoPlayerSource
|
|
|
60
60
|
fun buildCronetHttpDataSourceFactory(source: HybridVideoPlayerSourceSpec): CronetDataSource.Factory {
|
|
61
61
|
// Get Cronet engine and executor from NitroFetch
|
|
62
62
|
// used before NitroFetch.ioExecutor , but cause blocking thread
|
|
63
|
-
val factory = CronetDataSource.Factory(NitroFetch.getEngine(),
|
|
63
|
+
val factory = CronetDataSource.Factory(NitroFetch.getEngine(), NitroFetch.ioExecutor)
|
|
64
64
|
.setConnectionTimeoutMs(10_000)
|
|
65
65
|
.setReadTimeoutMs(10_000)
|
|
66
66
|
.setResetTimeoutOnRedirects(true)
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
package com.twg.video.core.utils
|
|
2
|
+
|
|
3
|
+
import android.content.Context
|
|
4
|
+
import android.content.pm.PackageManager
|
|
5
|
+
|
|
6
|
+
object TvDetector {
|
|
7
|
+
@Volatile private var cached = false
|
|
8
|
+
|
|
9
|
+
fun isTv(context: Context): Boolean {
|
|
10
|
+
if (cached) return true
|
|
11
|
+
cached = context.packageManager.hasSystemFeature(PackageManager.FEATURE_LEANBACK)
|
|
12
|
+
return cached
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -32,6 +32,7 @@ import com.twg.video.core.recivers.AudioBecomingNoisyReceiver
|
|
|
32
32
|
import com.twg.video.core.services.playback.VideoPlaybackService
|
|
33
33
|
import com.twg.video.core.services.playback.VideoPlaybackServiceConnection
|
|
34
34
|
import com.twg.video.core.utils.TrackUtils
|
|
35
|
+
import com.twg.video.core.utils.TvDetector
|
|
35
36
|
import com.twg.video.core.utils.Threading.mainThreadProperty
|
|
36
37
|
import com.twg.video.core.utils.Threading.runOnMainThread
|
|
37
38
|
import com.twg.video.core.utils.Threading.runOnMainThreadSync
|
|
@@ -247,7 +248,8 @@ class HybridVideoPlayer() : HybridVideoPlayerSpec(), AutoCloseable {
|
|
|
247
248
|
|
|
248
249
|
renderersFactory = MyRenderersFactory(
|
|
249
250
|
context,
|
|
250
|
-
hybridSource.config.initialSubtitleDelay ?: 0L
|
|
251
|
+
hybridSource.config.initialSubtitleDelay ?: 0L,
|
|
252
|
+
TvDetector.isTv(context)
|
|
251
253
|
).apply {
|
|
252
254
|
setExtensionRendererMode(MyRenderersFactory.EXTENSION_RENDERER_MODE_ON)
|
|
253
255
|
forceEnableMediaCodecAsynchronousQueueing()
|
|
@@ -499,19 +501,12 @@ class HybridVideoPlayer() : HybridVideoPlayerSpec(), AutoCloseable {
|
|
|
499
501
|
eventEmitter.onBuffer(false)
|
|
500
502
|
|
|
501
503
|
val allTracks = TrackUtils.getAllPlayerTracksInternal(player)
|
|
502
|
-
val
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
label = "General",
|
|
509
|
-
selected = true,
|
|
510
|
-
language = null
|
|
511
|
-
)
|
|
512
|
-
} ?: allTracks.videos.firstOrNull { it.selected }
|
|
513
|
-
val width = selectedVideo?.width ?: 0.0
|
|
514
|
-
val height = selectedVideo?.height ?: 0.0
|
|
504
|
+
val (width, height) = player.videoFormat?.let { format ->
|
|
505
|
+
format.width.toDouble() to format.height.toDouble()
|
|
506
|
+
} ?: allTracks.videos.firstOrNull { it.selected }?.let {
|
|
507
|
+
it.width to it.height
|
|
508
|
+
} ?: (0.0 to 0.0)
|
|
509
|
+
|
|
515
510
|
// val rotationDegrees = selectedVideoTrackFormat?.rotationDegrees ?: generalVideoFormat?.rotationDegrees
|
|
516
511
|
|
|
517
512
|
eventEmitter.onLoad(
|
|
@@ -561,6 +556,13 @@ class HybridVideoPlayer() : HybridVideoPlayerSpec(), AutoCloseable {
|
|
|
561
556
|
override fun onPlayerError(error: PlaybackException) {
|
|
562
557
|
status = VideoPlayerStatus.ERROR
|
|
563
558
|
stopProgressUpdates()
|
|
559
|
+
val errorMessage = buildString {
|
|
560
|
+
append(error.errorCodeName)
|
|
561
|
+
error.message?.let { append(": $it") }
|
|
562
|
+
error.cause?.message?.let { append(" | Cause: $it") }
|
|
563
|
+
}
|
|
564
|
+
|
|
565
|
+
eventEmitter.onPlayerError(errorMessage)
|
|
564
566
|
}
|
|
565
567
|
|
|
566
568
|
override fun onPositionDiscontinuity(
|
|
@@ -658,12 +660,14 @@ class HybridVideoPlayer() : HybridVideoPlayerSpec(), AutoCloseable {
|
|
|
658
660
|
|
|
659
661
|
override fun resetForReuse() {
|
|
660
662
|
runOnMainThread {
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
player.
|
|
663
|
+
if (this.source != null) {
|
|
664
|
+
stopProgressUpdates()
|
|
665
|
+
this.source = null
|
|
666
|
+
if (player.playbackState != Player.STATE_IDLE) {
|
|
667
|
+
player.stop()
|
|
668
|
+
}
|
|
669
|
+
player.clearMediaItems()
|
|
665
670
|
}
|
|
666
|
-
player.clearMediaItems()
|
|
667
671
|
}
|
|
668
672
|
}
|
|
669
673
|
|
|
@@ -82,6 +82,9 @@ class HybridVideoPlayerEventEmitter : HybridVideoPlayerEventEmitterSpec() {
|
|
|
82
82
|
override fun addOnProgressListener(listener: (onProgressData) -> Unit) =
|
|
83
83
|
addListener("onProgress", listener)
|
|
84
84
|
|
|
85
|
+
override fun addOnPlayerErrorListener(listener: (String) -> Unit) =
|
|
86
|
+
addListener("onPlayerError", listener)
|
|
87
|
+
|
|
85
88
|
override fun addOnReadyToDisplayListener(listener: () -> Unit) =
|
|
86
89
|
addListener("onReadyToDisplay", listener)
|
|
87
90
|
|
|
@@ -144,6 +147,9 @@ class HybridVideoPlayerEventEmitter : HybridVideoPlayerEventEmitterSpec() {
|
|
|
144
147
|
fun onProgress(data: onProgressData) =
|
|
145
148
|
emitEvent<(onProgressData) -> Unit>("onProgress") { it(data) }
|
|
146
149
|
|
|
150
|
+
fun onPlayerError(message: String) =
|
|
151
|
+
emitEvent<(String) -> Unit>("onPlayerError") { it(message) }
|
|
152
|
+
|
|
147
153
|
fun onReadyToDisplay() =
|
|
148
154
|
emitEvent<() -> Unit>("onReadyToDisplay") { it() }
|
|
149
155
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
package androidx.media3.exoplayer.text;
|
|
2
|
-
// 1.
|
|
2
|
+
// 1.8.0 TextRenderer https://raw.githubusercontent.com/androidx/media/refs/tags/1.8.0/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/text/TextRenderer.java
|
|
3
3
|
|
|
4
4
|
import static androidx.media3.common.util.Assertions.checkNotNull;
|
|
5
5
|
import static androidx.media3.common.util.Assertions.checkState;
|
|
@@ -28,11 +28,13 @@ import androidx.media3.exoplayer.source.MediaSource;
|
|
|
28
28
|
import androidx.media3.exoplayer.source.SampleStream.ReadDataResult;
|
|
29
29
|
import androidx.media3.extractor.text.CueDecoder;
|
|
30
30
|
import androidx.media3.extractor.text.CuesWithTiming;
|
|
31
|
+
import androidx.media3.extractor.text.Subtitle;
|
|
31
32
|
import androidx.media3.extractor.text.SubtitleDecoder;
|
|
32
33
|
import androidx.media3.extractor.text.SubtitleDecoderException;
|
|
33
34
|
import androidx.media3.extractor.text.SubtitleInputBuffer;
|
|
34
35
|
import androidx.media3.extractor.text.SubtitleOutputBuffer;
|
|
35
36
|
import com.google.common.collect.ImmutableList;
|
|
37
|
+
import java.io.IOException;
|
|
36
38
|
import java.lang.annotation.Documented;
|
|
37
39
|
import java.lang.annotation.Retention;
|
|
38
40
|
import java.lang.annotation.RetentionPolicy;
|
|
@@ -40,7 +42,6 @@ import java.lang.annotation.Target;
|
|
|
40
42
|
import java.nio.ByteBuffer;
|
|
41
43
|
import java.util.Objects;
|
|
42
44
|
|
|
43
|
-
|
|
44
45
|
/**
|
|
45
46
|
* A {@link Renderer} for text.
|
|
46
47
|
*
|
|
@@ -103,7 +104,6 @@ public class NonFinalTextRenderer extends BaseRenderer implements Callback {
|
|
|
103
104
|
private boolean inputStreamEnded;
|
|
104
105
|
private boolean outputStreamEnded;
|
|
105
106
|
@Nullable private Format streamFormat;
|
|
106
|
-
private long outputStreamOffsetUs;
|
|
107
107
|
private long lastRendererPositionUs;
|
|
108
108
|
private long finalStreamEndPositionUs;
|
|
109
109
|
private boolean legacyDecodingEnabled;
|
|
@@ -143,7 +143,6 @@ public class NonFinalTextRenderer extends BaseRenderer implements Callback {
|
|
|
143
143
|
new DecoderInputBuffer(DecoderInputBuffer.BUFFER_REPLACEMENT_MODE_NORMAL);
|
|
144
144
|
formatHolder = new FormatHolder();
|
|
145
145
|
finalStreamEndPositionUs = C.TIME_UNSET;
|
|
146
|
-
outputStreamOffsetUs = C.TIME_UNSET;
|
|
147
146
|
lastRendererPositionUs = C.TIME_UNSET;
|
|
148
147
|
legacyDecodingEnabled = false;
|
|
149
148
|
}
|
|
@@ -190,7 +189,6 @@ public class NonFinalTextRenderer extends BaseRenderer implements Callback {
|
|
|
190
189
|
long startPositionUs,
|
|
191
190
|
long offsetUs,
|
|
192
191
|
MediaSource.MediaPeriodId mediaPeriodId) {
|
|
193
|
-
outputStreamOffsetUs = offsetUs;
|
|
194
192
|
streamFormat = formats[0];
|
|
195
193
|
if (!isCuesWithTiming(streamFormat)) {
|
|
196
194
|
assertLegacyDecodingEnabledIfRequired();
|
|
@@ -444,7 +442,6 @@ public class NonFinalTextRenderer extends BaseRenderer implements Callback {
|
|
|
444
442
|
streamFormat = null;
|
|
445
443
|
finalStreamEndPositionUs = C.TIME_UNSET;
|
|
446
444
|
clearOutput();
|
|
447
|
-
outputStreamOffsetUs = C.TIME_UNSET;
|
|
448
445
|
lastRendererPositionUs = C.TIME_UNSET;
|
|
449
446
|
if (subtitleDecoder != null) {
|
|
450
447
|
releaseSubtitleDecoder();
|
|
@@ -458,9 +455,40 @@ public class NonFinalTextRenderer extends BaseRenderer implements Callback {
|
|
|
458
455
|
|
|
459
456
|
@Override
|
|
460
457
|
public boolean isReady() {
|
|
461
|
-
|
|
458
|
+
if (streamFormat == null) {
|
|
459
|
+
return true;
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
// We don't block playback whilst subtitles are loading.
|
|
462
463
|
// Note: To change this behavior, it will be necessary to consider [Internal: b/12949941].
|
|
463
|
-
|
|
464
|
+
if (isCuesWithTiming(checkNotNull(streamFormat))) {
|
|
465
|
+
if (checkNotNull(cuesResolver).getNextCueChangeTimeUs(lastRendererPositionUs)
|
|
466
|
+
!= C.TIME_END_OF_SOURCE) {
|
|
467
|
+
// We have a cue change loaded in the future.
|
|
468
|
+
return true;
|
|
469
|
+
} else {
|
|
470
|
+
// We don't have any future cues, so let's see if there's a loading error, and return
|
|
471
|
+
// ready=false if so.
|
|
472
|
+
try {
|
|
473
|
+
maybeThrowStreamError();
|
|
474
|
+
return true;
|
|
475
|
+
} catch (IOException e) {
|
|
476
|
+
return false;
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
} else {
|
|
480
|
+
return !outputStreamEnded
|
|
481
|
+
&& (!inputStreamEnded
|
|
482
|
+
|| hasEventsAfter(subtitle, lastRendererPositionUs)
|
|
483
|
+
|| hasEventsAfter(nextSubtitle, lastRendererPositionUs)
|
|
484
|
+
|| nextSubtitleInputBuffer == null);
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
private static boolean hasEventsAfter(@Nullable Subtitle subtitle, long timeUs) {
|
|
489
|
+
return subtitle != null
|
|
490
|
+
&& subtitle.getEventTimeCount() > 0
|
|
491
|
+
&& subtitle.getEventTime(subtitle.getEventTimeCount() - 1) > timeUs;
|
|
464
492
|
}
|
|
465
493
|
|
|
466
494
|
private void releaseSubtitleBuffers() {
|
|
@@ -558,9 +586,7 @@ public class NonFinalTextRenderer extends BaseRenderer implements Callback {
|
|
|
558
586
|
|
|
559
587
|
private long getPresentationTimeUs(long positionUs) {
|
|
560
588
|
checkState(positionUs != C.TIME_UNSET);
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
return positionUs - outputStreamOffsetUs;
|
|
589
|
+
return positionUs - getStreamOffsetUs();
|
|
564
590
|
}
|
|
565
591
|
|
|
566
592
|
private void assertLegacyDecodingEnabledIfRequired() {
|
|
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.VideoPlayerEvents = void 0;
|
|
7
7
|
var _Events = require("./types/Events.js");
|
|
8
|
+
var _VideoError = require("./types/VideoError.js");
|
|
8
9
|
class VideoPlayerEvents {
|
|
9
10
|
jsEventListeners = {};
|
|
10
11
|
supportedEvents = _Events.ALL_PLAYER_EVENTS;
|
|
@@ -30,8 +31,13 @@ class VideoPlayerEvents {
|
|
|
30
31
|
case 'onError':
|
|
31
32
|
this.jsEventListeners.onError ??= new Set();
|
|
32
33
|
this.jsEventListeners.onError.add(callback);
|
|
34
|
+
const nativeCallback = message => callback(new _VideoError.VideoError('player/playback-exception', message));
|
|
35
|
+
const removeNative = this.eventEmitter.addOnPlayerErrorListener(nativeCallback);
|
|
33
36
|
return {
|
|
34
|
-
remove: () =>
|
|
37
|
+
remove: () => {
|
|
38
|
+
this.jsEventListeners.onError?.delete(callback);
|
|
39
|
+
removeNative.remove();
|
|
40
|
+
}
|
|
35
41
|
};
|
|
36
42
|
// ----------------- Native Events -----------------
|
|
37
43
|
case 'onAudioBecomingNoisy':
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_Events","require","VideoPlayerEvents","jsEventListeners","supportedEvents","ALL_PLAYER_EVENTS","constructor","eventEmitter","triggerJSEvent","event","params","forEach","fn","addEventListener","callback","onError","Set","add","remove","delete","addOnAudioBecomingNoisyListener","addOnAudioFocusChangeListener","addOnBandwidthUpdateListener","addOnBufferListener","addOnControlsVisibleChangeListener","addOnEndListener","addOnExternalPlaybackChangeListener","addOnLoadListener","addOnLoadStartListener","addOnPlaybackStateChangeListener","addOnPlaybackRateChangeListener","addOnProgressListener","addOnReadyToDisplayListener","addOnSeekListener","addOnTimedMetadataListener","addOnTextTrackDataChangedListener","addOnVolumeChangeListener","addOnStatusChangeListener","Error","clearAllEvents","clearAllListeners","exports"],"sourceRoot":"../../../src","sources":["core/VideoPlayerEvents.ts"],"mappings":";;;;;;AAIA,IAAAA,OAAA,GAAAC,OAAA;
|
|
1
|
+
{"version":3,"names":["_Events","require","_VideoError","VideoPlayerEvents","jsEventListeners","supportedEvents","ALL_PLAYER_EVENTS","constructor","eventEmitter","triggerJSEvent","event","params","forEach","fn","addEventListener","callback","onError","Set","add","nativeCallback","message","VideoError","removeNative","addOnPlayerErrorListener","remove","delete","addOnAudioBecomingNoisyListener","addOnAudioFocusChangeListener","addOnBandwidthUpdateListener","addOnBufferListener","addOnControlsVisibleChangeListener","addOnEndListener","addOnExternalPlaybackChangeListener","addOnLoadListener","addOnLoadStartListener","addOnPlaybackStateChangeListener","addOnPlaybackRateChangeListener","addOnProgressListener","addOnReadyToDisplayListener","addOnSeekListener","addOnTimedMetadataListener","addOnTextTrackDataChangedListener","addOnVolumeChangeListener","addOnStatusChangeListener","Error","clearAllEvents","clearAllListeners","exports"],"sourceRoot":"../../../src","sources":["core/VideoPlayerEvents.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["VideoError","Error","code","_code","message","_message","stack","_stack","constructor","name","toString","string","exports","VideoComponentError","VideoRuntimeError","getCodeAndMessage","regex","match","length","maybeFixErrorStack","error","replace","isVideoError","hasStack","tryParseNativeVideoError","nativeError","result","startsWith","undefined"],"sourceRoot":"../../../../src","sources":["core/types/VideoError.ts"],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"names":["VideoError","Error","code","_code","message","_message","stack","_stack","constructor","name","toString","string","exports","VideoComponentError","VideoRuntimeError","getCodeAndMessage","regex","match","length","maybeFixErrorStack","error","replace","isVideoError","hasStack","tryParseNativeVideoError","nativeError","result","startsWith","undefined"],"sourceRoot":"../../../../src","sources":["core/types/VideoError.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import { ALL_PLAYER_EVENTS } from "./types/Events.js";
|
|
4
|
+
import { VideoError } from "./types/VideoError.js";
|
|
4
5
|
export class VideoPlayerEvents {
|
|
5
6
|
jsEventListeners = {};
|
|
6
7
|
supportedEvents = ALL_PLAYER_EVENTS;
|
|
@@ -26,8 +27,13 @@ export class VideoPlayerEvents {
|
|
|
26
27
|
case 'onError':
|
|
27
28
|
this.jsEventListeners.onError ??= new Set();
|
|
28
29
|
this.jsEventListeners.onError.add(callback);
|
|
30
|
+
const nativeCallback = message => callback(new VideoError('player/playback-exception', message));
|
|
31
|
+
const removeNative = this.eventEmitter.addOnPlayerErrorListener(nativeCallback);
|
|
29
32
|
return {
|
|
30
|
-
remove: () =>
|
|
33
|
+
remove: () => {
|
|
34
|
+
this.jsEventListeners.onError?.delete(callback);
|
|
35
|
+
removeNative.remove();
|
|
36
|
+
}
|
|
31
37
|
};
|
|
32
38
|
// ----------------- Native Events -----------------
|
|
33
39
|
case 'onAudioBecomingNoisy':
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["ALL_PLAYER_EVENTS","VideoPlayerEvents","jsEventListeners","supportedEvents","constructor","eventEmitter","triggerJSEvent","event","params","forEach","fn","addEventListener","callback","onError","Set","add","remove","delete","addOnAudioBecomingNoisyListener","addOnAudioFocusChangeListener","addOnBandwidthUpdateListener","addOnBufferListener","addOnControlsVisibleChangeListener","addOnEndListener","addOnExternalPlaybackChangeListener","addOnLoadListener","addOnLoadStartListener","addOnPlaybackStateChangeListener","addOnPlaybackRateChangeListener","addOnProgressListener","addOnReadyToDisplayListener","addOnSeekListener","addOnTimedMetadataListener","addOnTextTrackDataChangedListener","addOnVolumeChangeListener","addOnStatusChangeListener","Error","clearAllEvents","clearAllListeners"],"sourceRoot":"../../../src","sources":["core/VideoPlayerEvents.ts"],"mappings":";;AAIA,SACEA,iBAAiB,QAGZ,mBAAgB;
|
|
1
|
+
{"version":3,"names":["ALL_PLAYER_EVENTS","VideoError","VideoPlayerEvents","jsEventListeners","supportedEvents","constructor","eventEmitter","triggerJSEvent","event","params","forEach","fn","addEventListener","callback","onError","Set","add","nativeCallback","message","removeNative","addOnPlayerErrorListener","remove","delete","addOnAudioBecomingNoisyListener","addOnAudioFocusChangeListener","addOnBandwidthUpdateListener","addOnBufferListener","addOnControlsVisibleChangeListener","addOnEndListener","addOnExternalPlaybackChangeListener","addOnLoadListener","addOnLoadStartListener","addOnPlaybackStateChangeListener","addOnPlaybackRateChangeListener","addOnProgressListener","addOnReadyToDisplayListener","addOnSeekListener","addOnTimedMetadataListener","addOnTextTrackDataChangedListener","addOnVolumeChangeListener","addOnStatusChangeListener","Error","clearAllEvents","clearAllListeners"],"sourceRoot":"../../../src","sources":["core/VideoPlayerEvents.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["VideoError","Error","code","_code","message","_message","stack","_stack","constructor","name","toString","string","VideoComponentError","VideoRuntimeError","getCodeAndMessage","regex","match","length","maybeFixErrorStack","error","replace","isVideoError","hasStack","tryParseNativeVideoError","nativeError","result","startsWith","undefined"],"sourceRoot":"../../../../src","sources":["core/types/VideoError.ts"],"mappings":";;
|
|
1
|
+
{"version":3,"names":["VideoError","Error","code","_code","message","_message","stack","_stack","constructor","name","toString","string","VideoComponentError","VideoRuntimeError","getCodeAndMessage","regex","match","length","maybeFixErrorStack","error","replace","isVideoError","hasStack","tryParseNativeVideoError","nativeError","result","startsWith","undefined"],"sourceRoot":"../../../../src","sources":["core/types/VideoError.ts"],"mappings":";;AAgCA,OAAO,MAAMA,UAAU,SAAuCC,KAAK,CAAC;EAKlE,IAAWC,IAAIA,CAAA,EAAU;IACvB,OAAO,IAAI,CAACC,KAAK;EACnB;EACA,IAAWC,OAAOA,CAAA,EAAW;IAC3B,OAAO,IAAI,CAACC,QAAQ;EACtB;EAEA,IAAWC,KAAKA,CAAA,EAAuB;IACrC,OAAO,IAAI,CAACC,MAAM;EACpB;;EAEA;AACF;AACA;EACEC,WAAWA,CAACN,IAAW,EAAEE,OAAe,EAAEE,KAAc,EAAE;IACxD,KAAK,CAAC,IAAIJ,IAAI,MAAME,OAAO,EAAE,CAAC;IAC9B,KAAK,CAACK,IAAI,GAAG,sBAAsBP,IAAI,EAAE;IACzC,KAAK,CAACE,OAAO,GAAGA,OAAO;IACvB,KAAK,CAACE,KAAK,GAAGA,KAAK;IACnB,IAAI,CAACH,KAAK,GAAGD,IAAI;IACjB,IAAI,CAACG,QAAQ,GAAGD,OAAO;IACvB,IAAI,CAACG,MAAM,GAAGD,KAAK;EACrB;EAEOI,QAAQA,CAAA,EAAW;IACxB,IAAIC,MAAM,GAAG,IAAI,IAAI,CAACT,IAAI,MAAM,IAAI,CAACE,OAAO,EAAE;IAC9C,OAAOO,MAAM;EACf;AACF;AAEA,OAAO,MAAMC,mBAAmB,SAASZ,UAAU,CAAiB;AAEpE,OAAO,MAAMa,iBAAiB,SAASb,UAAU,CAE/C;;AAEF;AACA;AACA;AACA,MAAMc,iBAAiB,GACrBV,OAAe,IAC8B;EAC7C;EACA,MAAMW,KAAK,GAAG,0BAA0B;EACxC,MAAMC,KAAK,GAAGZ,OAAO,CAACY,KAAK,CAACD,KAAK,CAAC;EAElC,IACEC,KAAK,IACLA,KAAK,CAACC,MAAM,KAAK,CAAC,IAClB,OAAOD,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,IAC5B,OAAOA,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,EAC5B;IACA,OAAO;MACLd,IAAI,EAAEc,KAAK,CAAC,CAAC,CAAC;MACdZ,OAAO,EAAEY,KAAK,CAAC,CAAC;IAClB,CAAC;EACH;EACA,OAAO,IAAI;AACb,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,MAAME,kBAAkB,GAAIC,KAAa,IAAK;EAC5C,IAAI,OAAO,IAAIA,KAAK,IAAI,OAAOA,KAAK,CAACb,KAAK,KAAK,QAAQ,EAAE;IACvD,MAAMA,KAAK,GAAGa,KAAK,CAACb,KAAK;;IAEzB;IACA,MAAMS,KAAK,GAAG,0BAA0B;IACxC,MAAMC,KAAK,GAAGV,KAAK,CAACU,KAAK,CAACD,KAAK,CAAC;IAEhC,IACEC,KAAK,IACLA,KAAK,CAACC,MAAM,KAAK,CAAC,IAClB,OAAOD,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,IAC5B,OAAOA,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,EAC5B;MACAG,KAAK,CAACb,KAAK,GAAGa,KAAK,CAACb,KAAK,CAACc,OAAO,CAACL,KAAK,EAAE,IAAIC,KAAK,CAAC,CAAC,CAAC,MAAMA,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IACxE;EACF;AACF,CAAC;AAED,MAAMK,YAAY,GAChBF,KAAc,IAEd,OAAOA,KAAK,KAAK,QAAQ,IACzBA,KAAK,IAAI,IAAI;AACb;AACA,OAAOA,KAAK,CAACf,OAAO,KAAK,QAAQ;AACjC;AACAU,iBAAiB,CAACK,KAAK,CAACf,OAAO,CAAC,IAAI,IAAI;AAE1C,MAAMkB,QAAQ,GAAIH,KAAc,IAC9B,OAAOA,KAAK,KAAK,QAAQ,IACzBA,KAAK,IAAI,IAAI,IACb,OAAO,IAAIA,KAAK,IAChB,OAAOA,KAAK,CAACb,KAAK,KAAK,QAAQ;;AAEjC;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMiB,wBAAwB,GACnCC,WAAc,IACoC;EAClD,IAAIH,YAAY,CAACG,WAAW,CAAC,EAAE;IAC7B,MAAMC,MAAM,GAAGX,iBAAiB,CAACU,WAAW,CAACpB,OAAO,CAAC;IAErD,IAAIqB,MAAM,IAAI,IAAI,EAAE;MAClB,OAAOD,WAAW;IACpB;IAEA,MAAM;MAAEtB,IAAI;MAAEE;IAAQ,CAAC,GAAGqB,MAAM;IAEhCP,kBAAkB,CAACM,WAAW,CAAC;IAE/B,IAAItB,IAAI,CAACwB,UAAU,CAAC,MAAM,CAAC,EAAE;MAC3B,OAAO,IAAId,mBAAmB,CAC5BV,IAAI,EACJE,OAAO,EACPkB,QAAQ,CAACE,WAAW,CAAC,GAAGA,WAAW,CAAClB,KAAK,GAAGqB,SAC9C,CAAC;IACH;IAEA,OAAO,IAAId,iBAAiB;IAC1B;IACAX,IAAI,EACJE,OAAO,EACPkB,QAAQ,CAACE,WAAW,CAAC,GAAGA,WAAW,CAAClB,KAAK,GAAGqB,SAC9C,CAAC;EACH;EAEA,OAAOH,WAAW;AACpB,CAAC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VideoPlayerEvents.d.ts","sourceRoot":"","sources":["../../../../../src/core/VideoPlayerEvents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,uBAAuB,EACxB,MAAM,6CAA6C,CAAC;AACrD,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,eAAe,IAAI,YAAY,EACrC,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"VideoPlayerEvents.d.ts","sourceRoot":"","sources":["../../../../../src/core/VideoPlayerEvents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,uBAAuB,EACxB,MAAM,6CAA6C,CAAC;AACrD,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,eAAe,IAAI,YAAY,EACrC,MAAM,gBAAgB,CAAC;AAGxB,qBAAa,iBAAiB;IAC5B,SAAS,CAAC,YAAY,EAAE,uBAAuB,CAAC;IAChD,SAAS,CAAC,gBAAgB,EAAE,OAAO,CACjC,MAAM,CAAC,MAAM,mBAAmB,EAAE,GAAG,CAAC,CAAC,GAAG,MAAM,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC,CAAC,CACnE,CAAM;IAEP,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC,MAAM,YAAY,CAAC,EAAE,CACtC;gBAER,YAAY,EAAE,uBAAuB;IAIjD,SAAS,CAAC,cAAc,CAAC,KAAK,SAAS,MAAM,mBAAmB,EAC9D,KAAK,EAAE,KAAK,EACZ,GAAG,MAAM,EAAE,UAAU,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,GAChD,OAAO;IAMV;;;;;;OAMG;IACH,gBAAgB,CAAC,KAAK,SAAS,MAAM,YAAY,EAC/C,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,YAAY,CAAC,KAAK,CAAC,GAC5B,oBAAoB;IAqGvB;;OAEG;IACH,cAAc;CAIf"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export type LibraryError = 'library/deallocated' | 'library/application-context-not-found';
|
|
2
|
-
export type PlayerError = 'player/released' | 'player/not-initialized' | 'player/asset-not-initialized' | 'player/invalid-source';
|
|
2
|
+
export type PlayerError = 'player/released' | 'player/not-initialized' | 'player/asset-not-initialized' | 'player/invalid-source' | 'player/playback-exception';
|
|
3
3
|
export type SourceError = 'source/invalid-uri' | 'source/missing-read-file-permission' | 'source/file-does-not-exist' | 'source/failed-to-initialize-asset' | 'source/unsupported-content-type';
|
|
4
4
|
export type VideoViewError = 'view/not-found' | 'view/deallocated' | 'view/picture-in-picture-not-supported';
|
|
5
5
|
export type UnknownError = 'unknown/unknown';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VideoError.d.ts","sourceRoot":"","sources":["../../../../../../src/core/types/VideoError.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GACpB,qBAAqB,GACrB,uCAAuC,CAAC;AAE5C,MAAM,MAAM,WAAW,GACnB,iBAAiB,GACjB,wBAAwB,GACxB,8BAA8B,GAC9B,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"VideoError.d.ts","sourceRoot":"","sources":["../../../../../../src/core/types/VideoError.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GACpB,qBAAqB,GACrB,uCAAuC,CAAC;AAE5C,MAAM,MAAM,WAAW,GACnB,iBAAiB,GACjB,wBAAwB,GACxB,8BAA8B,GAC9B,uBAAuB,GACvB,2BAA2B,CAAC;AAEhC,MAAM,MAAM,WAAW,GACnB,oBAAoB,GACpB,qCAAqC,GACrC,4BAA4B,GAC5B,mCAAmC,GACnC,iCAAiC,CAAC;AAEtC,MAAM,MAAM,cAAc,GACtB,gBAAgB,GAChB,kBAAkB,GAClB,uCAAuC,CAAC;AAE5C,MAAM,MAAM,YAAY,GAAG,iBAAiB,CAAC;AAE7C,MAAM,MAAM,cAAc,GACtB,YAAY,GACZ,WAAW,GACX,WAAW,GACX,cAAc,GACd,YAAY,CAAC;AAEjB,qBAAa,UAAU,CAAC,KAAK,SAAS,cAAc,CAAE,SAAQ,KAAK;IACjE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAS;IAEjC,IAAW,IAAI,IAAI,KAAK,CAEvB;IACD,IAAW,OAAO,IAAI,MAAM,CAE3B;IAED,IAAW,KAAK,IAAI,MAAM,GAAG,SAAS,CAErC;IAeM,QAAQ,IAAI,MAAM;CAI1B;AAED,qBAAa,mBAAoB,SAAQ,UAAU,CAAC,cAAc,CAAC;CAAG;AAEtE,qBAAa,iBAAkB,SAAQ,UAAU,CAC/C,YAAY,GAAG,WAAW,GAAG,WAAW,GAAG,YAAY,CACxD;CAAG;AAkEJ;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,GAAI,CAAC,EACxC,aAAa,CAAC,KACb,CAAC,iBAAiB,GAAG,mBAAmB,CAAC,GAAG,CA6B9C,CAAC"}
|
|
@@ -92,6 +92,12 @@ export interface VideoPlayerEventEmitter extends HybridObject<{
|
|
|
92
92
|
* @returns A subscription object that can be used to remove the listener.
|
|
93
93
|
*/
|
|
94
94
|
addOnProgressListener(listener: (data: onProgressData) => void): ListenerSubscription;
|
|
95
|
+
/**
|
|
96
|
+
* Adds a listener for the `onPlayerError` event.
|
|
97
|
+
* @param listener - The listener to add.
|
|
98
|
+
* @returns A subscription object that can be used to remove the listener.
|
|
99
|
+
*/
|
|
100
|
+
addOnPlayerErrorListener(listener: (message: string) => void): ListenerSubscription;
|
|
95
101
|
/**
|
|
96
102
|
* Adds a listener for the `onReadyToDisplay` event.
|
|
97
103
|
* @see {@link VideoPlayerEvents.onReadyToDisplay}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VideoPlayerEventEmitter.nitro.d.ts","sourceRoot":"","sources":["../../../../../../src/spec/nitro/VideoPlayerEventEmitter.nitro.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,KAAK,EACV,aAAa,EACb,UAAU,EACV,eAAe,EACf,yBAAyB,EACzB,cAAc,EACd,kBAAkB,EAClB,aAAa,EACd,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAK5E,MAAM,WAAW,oBAAoB;IACnC,MAAM,IAAI,IAAI,CAAC;CAChB;AAED,MAAM,WAAW,uBACf,SAAQ,YAAY,CAAC;IAAE,GAAG,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,QAAQ,CAAA;CAAE,CAAC;IACzD;;;;;OAKG;IACH,+BAA+B,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,oBAAoB,CAAC;IAE5E;;;;;OAKG;IACH,6BAA6B,CAC3B,QAAQ,EAAE,CAAC,aAAa,EAAE,OAAO,KAAK,IAAI,GACzC,oBAAoB,CAAC;IAExB;;;;;OAKG;IACH,4BAA4B,CAC1B,QAAQ,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,IAAI,GACtC,oBAAoB,CAAC;IAExB;;;;;OAKG;IACH,mBAAmB,CACjB,QAAQ,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,GACrC,oBAAoB,CAAC;IAExB;;;;;OAKG;IACH,kCAAkC,CAChC,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GACnC,oBAAoB,CAAC;IAExB;;;;;OAKG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,oBAAoB,CAAC;IAE7D;;;;;OAKG;IACH,mCAAmC,CACjC,QAAQ,EAAE,CAAC,sBAAsB,EAAE,OAAO,KAAK,IAAI,GAClD,oBAAoB,CAAC;IAExB;;;;;OAKG;IACH,iBAAiB,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,GAAG,oBAAoB,CAAC;IAE9E;;;;;OAKG;IACH,sBAAsB,CACpB,QAAQ,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,GACxC,oBAAoB,CAAC;IAExB;;;;;OAKG;IACH,gCAAgC,CAC9B,QAAQ,EAAE,CAAC,IAAI,EAAE,yBAAyB,KAAK,IAAI,GAClD,oBAAoB,CAAC;IAExB;;;;;OAKG;IACH,+BAA+B,CAC7B,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAC/B,oBAAoB,CAAC;IAExB;;;;;OAKG;IACH,qBAAqB,CACnB,QAAQ,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,GACvC,oBAAoB,CAAC;IAExB;;;;;OAKG;IACH,2BAA2B,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,oBAAoB,CAAC;IAExE;;;;;OAKG;IACH,iBAAiB,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,GAAG,oBAAoB,CAAC;IAE9E;;;;;OAKG;IACH,yBAAyB,CACvB,QAAQ,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,GAC5C,oBAAoB,CAAC;IAExB;;;;;OAKG;IACH,0BAA0B,CACxB,QAAQ,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,IAAI,GACtC,oBAAoB,CAAC;IAExB;;;;;OAKG;IACH,iCAAiC,CAC/B,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,GACjC,oBAAoB,CAAC;IAExB;;;;;OAKG;IACH,yBAAyB,CACvB,QAAQ,EAAE,CAAC,IAAI,EAAE,kBAAkB,KAAK,IAAI,GAC3C,oBAAoB,CAAC;IAExB;;OAEG;IACH,iBAAiB,IAAI,IAAI,CAAC;CAC3B"}
|
|
1
|
+
{"version":3,"file":"VideoPlayerEventEmitter.nitro.d.ts","sourceRoot":"","sources":["../../../../../../src/spec/nitro/VideoPlayerEventEmitter.nitro.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VideoPlayerEvents.d.ts","sourceRoot":"","sources":["../../../../../src/core/VideoPlayerEvents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,uBAAuB,EACxB,MAAM,6CAA6C,CAAC;AACrD,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,eAAe,IAAI,YAAY,EACrC,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"VideoPlayerEvents.d.ts","sourceRoot":"","sources":["../../../../../src/core/VideoPlayerEvents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,uBAAuB,EACxB,MAAM,6CAA6C,CAAC;AACrD,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,eAAe,IAAI,YAAY,EACrC,MAAM,gBAAgB,CAAC;AAGxB,qBAAa,iBAAiB;IAC5B,SAAS,CAAC,YAAY,EAAE,uBAAuB,CAAC;IAChD,SAAS,CAAC,gBAAgB,EAAE,OAAO,CACjC,MAAM,CAAC,MAAM,mBAAmB,EAAE,GAAG,CAAC,CAAC,GAAG,MAAM,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC,CAAC,CACnE,CAAM;IAEP,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC,MAAM,YAAY,CAAC,EAAE,CACtC;gBAER,YAAY,EAAE,uBAAuB;IAIjD,SAAS,CAAC,cAAc,CAAC,KAAK,SAAS,MAAM,mBAAmB,EAC9D,KAAK,EAAE,KAAK,EACZ,GAAG,MAAM,EAAE,UAAU,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,GAChD,OAAO;IAMV;;;;;;OAMG;IACH,gBAAgB,CAAC,KAAK,SAAS,MAAM,YAAY,EAC/C,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,YAAY,CAAC,KAAK,CAAC,GAC5B,oBAAoB;IAqGvB;;OAEG;IACH,cAAc;CAIf"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export type LibraryError = 'library/deallocated' | 'library/application-context-not-found';
|
|
2
|
-
export type PlayerError = 'player/released' | 'player/not-initialized' | 'player/asset-not-initialized' | 'player/invalid-source';
|
|
2
|
+
export type PlayerError = 'player/released' | 'player/not-initialized' | 'player/asset-not-initialized' | 'player/invalid-source' | 'player/playback-exception';
|
|
3
3
|
export type SourceError = 'source/invalid-uri' | 'source/missing-read-file-permission' | 'source/file-does-not-exist' | 'source/failed-to-initialize-asset' | 'source/unsupported-content-type';
|
|
4
4
|
export type VideoViewError = 'view/not-found' | 'view/deallocated' | 'view/picture-in-picture-not-supported';
|
|
5
5
|
export type UnknownError = 'unknown/unknown';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VideoError.d.ts","sourceRoot":"","sources":["../../../../../../src/core/types/VideoError.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GACpB,qBAAqB,GACrB,uCAAuC,CAAC;AAE5C,MAAM,MAAM,WAAW,GACnB,iBAAiB,GACjB,wBAAwB,GACxB,8BAA8B,GAC9B,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"VideoError.d.ts","sourceRoot":"","sources":["../../../../../../src/core/types/VideoError.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GACpB,qBAAqB,GACrB,uCAAuC,CAAC;AAE5C,MAAM,MAAM,WAAW,GACnB,iBAAiB,GACjB,wBAAwB,GACxB,8BAA8B,GAC9B,uBAAuB,GACvB,2BAA2B,CAAC;AAEhC,MAAM,MAAM,WAAW,GACnB,oBAAoB,GACpB,qCAAqC,GACrC,4BAA4B,GAC5B,mCAAmC,GACnC,iCAAiC,CAAC;AAEtC,MAAM,MAAM,cAAc,GACtB,gBAAgB,GAChB,kBAAkB,GAClB,uCAAuC,CAAC;AAE5C,MAAM,MAAM,YAAY,GAAG,iBAAiB,CAAC;AAE7C,MAAM,MAAM,cAAc,GACtB,YAAY,GACZ,WAAW,GACX,WAAW,GACX,cAAc,GACd,YAAY,CAAC;AAEjB,qBAAa,UAAU,CAAC,KAAK,SAAS,cAAc,CAAE,SAAQ,KAAK;IACjE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAS;IAEjC,IAAW,IAAI,IAAI,KAAK,CAEvB;IACD,IAAW,OAAO,IAAI,MAAM,CAE3B;IAED,IAAW,KAAK,IAAI,MAAM,GAAG,SAAS,CAErC;IAeM,QAAQ,IAAI,MAAM;CAI1B;AAED,qBAAa,mBAAoB,SAAQ,UAAU,CAAC,cAAc,CAAC;CAAG;AAEtE,qBAAa,iBAAkB,SAAQ,UAAU,CAC/C,YAAY,GAAG,WAAW,GAAG,WAAW,GAAG,YAAY,CACxD;CAAG;AAkEJ;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,GAAI,CAAC,EACxC,aAAa,CAAC,KACb,CAAC,iBAAiB,GAAG,mBAAmB,CAAC,GAAG,CA6B9C,CAAC"}
|
|
@@ -92,6 +92,12 @@ export interface VideoPlayerEventEmitter extends HybridObject<{
|
|
|
92
92
|
* @returns A subscription object that can be used to remove the listener.
|
|
93
93
|
*/
|
|
94
94
|
addOnProgressListener(listener: (data: onProgressData) => void): ListenerSubscription;
|
|
95
|
+
/**
|
|
96
|
+
* Adds a listener for the `onPlayerError` event.
|
|
97
|
+
* @param listener - The listener to add.
|
|
98
|
+
* @returns A subscription object that can be used to remove the listener.
|
|
99
|
+
*/
|
|
100
|
+
addOnPlayerErrorListener(listener: (message: string) => void): ListenerSubscription;
|
|
95
101
|
/**
|
|
96
102
|
* Adds a listener for the `onReadyToDisplay` event.
|
|
97
103
|
* @see {@link VideoPlayerEvents.onReadyToDisplay}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VideoPlayerEventEmitter.nitro.d.ts","sourceRoot":"","sources":["../../../../../../src/spec/nitro/VideoPlayerEventEmitter.nitro.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,KAAK,EACV,aAAa,EACb,UAAU,EACV,eAAe,EACf,yBAAyB,EACzB,cAAc,EACd,kBAAkB,EAClB,aAAa,EACd,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAK5E,MAAM,WAAW,oBAAoB;IACnC,MAAM,IAAI,IAAI,CAAC;CAChB;AAED,MAAM,WAAW,uBACf,SAAQ,YAAY,CAAC;IAAE,GAAG,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,QAAQ,CAAA;CAAE,CAAC;IACzD;;;;;OAKG;IACH,+BAA+B,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,oBAAoB,CAAC;IAE5E;;;;;OAKG;IACH,6BAA6B,CAC3B,QAAQ,EAAE,CAAC,aAAa,EAAE,OAAO,KAAK,IAAI,GACzC,oBAAoB,CAAC;IAExB;;;;;OAKG;IACH,4BAA4B,CAC1B,QAAQ,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,IAAI,GACtC,oBAAoB,CAAC;IAExB;;;;;OAKG;IACH,mBAAmB,CACjB,QAAQ,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,GACrC,oBAAoB,CAAC;IAExB;;;;;OAKG;IACH,kCAAkC,CAChC,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GACnC,oBAAoB,CAAC;IAExB;;;;;OAKG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,oBAAoB,CAAC;IAE7D;;;;;OAKG;IACH,mCAAmC,CACjC,QAAQ,EAAE,CAAC,sBAAsB,EAAE,OAAO,KAAK,IAAI,GAClD,oBAAoB,CAAC;IAExB;;;;;OAKG;IACH,iBAAiB,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,GAAG,oBAAoB,CAAC;IAE9E;;;;;OAKG;IACH,sBAAsB,CACpB,QAAQ,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,GACxC,oBAAoB,CAAC;IAExB;;;;;OAKG;IACH,gCAAgC,CAC9B,QAAQ,EAAE,CAAC,IAAI,EAAE,yBAAyB,KAAK,IAAI,GAClD,oBAAoB,CAAC;IAExB;;;;;OAKG;IACH,+BAA+B,CAC7B,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAC/B,oBAAoB,CAAC;IAExB;;;;;OAKG;IACH,qBAAqB,CACnB,QAAQ,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,GACvC,oBAAoB,CAAC;IAExB;;;;;OAKG;IACH,2BAA2B,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,oBAAoB,CAAC;IAExE;;;;;OAKG;IACH,iBAAiB,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,GAAG,oBAAoB,CAAC;IAE9E;;;;;OAKG;IACH,yBAAyB,CACvB,QAAQ,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,GAC5C,oBAAoB,CAAC;IAExB;;;;;OAKG;IACH,0BAA0B,CACxB,QAAQ,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,IAAI,GACtC,oBAAoB,CAAC;IAExB;;;;;OAKG;IACH,iCAAiC,CAC/B,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,GACjC,oBAAoB,CAAC;IAExB;;;;;OAKG;IACH,yBAAyB,CACvB,QAAQ,EAAE,CAAC,IAAI,EAAE,kBAAkB,KAAK,IAAI,GAC3C,oBAAoB,CAAC;IAExB;;OAEG;IACH,iBAAiB,IAAI,IAAI,CAAC;CAC3B"}
|
|
1
|
+
{"version":3,"file":"VideoPlayerEventEmitter.nitro.d.ts","sourceRoot":"","sources":["../../../../../../src/spec/nitro/VideoPlayerEventEmitter.nitro.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,6 +26,7 @@
|
|
|
26
26
|
#include "JFunc_void_onPlaybackStateChangeData.hpp"
|
|
27
27
|
#include "JFunc_void_double.hpp"
|
|
28
28
|
#include "JFunc_void_onProgressData.hpp"
|
|
29
|
+
#include "JFunc_void_std__string.hpp"
|
|
29
30
|
#include "JFunc_void_VideoPlayerStatus.hpp"
|
|
30
31
|
#include "JFunc_void_TimedMetadata.hpp"
|
|
31
32
|
#include "JFunc_void_std__vector_std__string_.hpp"
|
|
@@ -57,6 +58,7 @@ int initialize(JavaVM* vm) {
|
|
|
57
58
|
margelo::nitro::video::JFunc_void_onPlaybackStateChangeData_cxx::registerNatives();
|
|
58
59
|
margelo::nitro::video::JFunc_void_double_cxx::registerNatives();
|
|
59
60
|
margelo::nitro::video::JFunc_void_onProgressData_cxx::registerNatives();
|
|
61
|
+
margelo::nitro::video::JFunc_void_std__string_cxx::registerNatives();
|
|
60
62
|
margelo::nitro::video::JFunc_void_VideoPlayerStatus_cxx::registerNatives();
|
|
61
63
|
margelo::nitro::video::JFunc_void_TimedMetadata_cxx::registerNatives();
|
|
62
64
|
margelo::nitro::video::JFunc_void_std__vector_std__string__cxx::registerNatives();
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
///
|
|
2
|
+
/// JFunc_void_std__string.hpp
|
|
3
|
+
/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
|
|
4
|
+
/// https://github.com/mrousavy/nitro
|
|
5
|
+
/// Copyright © 2025 Marc Rousavy @ Margelo
|
|
6
|
+
///
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include <fbjni/fbjni.h>
|
|
11
|
+
#include <functional>
|
|
12
|
+
|
|
13
|
+
#include <string>
|
|
14
|
+
#include <functional>
|
|
15
|
+
#include <NitroModules/JNICallable.hpp>
|
|
16
|
+
|
|
17
|
+
namespace margelo::nitro::video {
|
|
18
|
+
|
|
19
|
+
using namespace facebook;
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Represents the Java/Kotlin callback `(message: String) -> Unit`.
|
|
23
|
+
* This can be passed around between C++ and Java/Kotlin.
|
|
24
|
+
*/
|
|
25
|
+
struct JFunc_void_std__string: public jni::JavaClass<JFunc_void_std__string> {
|
|
26
|
+
public:
|
|
27
|
+
static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/video/Func_void_std__string;";
|
|
28
|
+
|
|
29
|
+
public:
|
|
30
|
+
/**
|
|
31
|
+
* Invokes the function this `JFunc_void_std__string` instance holds through JNI.
|
|
32
|
+
*/
|
|
33
|
+
void invoke(const std::string& message) const {
|
|
34
|
+
static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* message */)>("invoke");
|
|
35
|
+
method(self(), jni::make_jstring(message));
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* An implementation of Func_void_std__string that is backed by a C++ implementation (using `std::function<...>`)
|
|
41
|
+
*/
|
|
42
|
+
class JFunc_void_std__string_cxx final: public jni::HybridClass<JFunc_void_std__string_cxx, JFunc_void_std__string> {
|
|
43
|
+
public:
|
|
44
|
+
static jni::local_ref<JFunc_void_std__string::javaobject> fromCpp(const std::function<void(const std::string& /* message */)>& func) {
|
|
45
|
+
return JFunc_void_std__string_cxx::newObjectCxxArgs(func);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
public:
|
|
49
|
+
/**
|
|
50
|
+
* Invokes the C++ `std::function<...>` this `JFunc_void_std__string_cxx` instance holds.
|
|
51
|
+
*/
|
|
52
|
+
void invoke_cxx(jni::alias_ref<jni::JString> message) {
|
|
53
|
+
_func(message->toStdString());
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
public:
|
|
57
|
+
[[nodiscard]]
|
|
58
|
+
inline const std::function<void(const std::string& /* message */)>& getFunction() const {
|
|
59
|
+
return _func;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
public:
|
|
63
|
+
static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/video/Func_void_std__string_cxx;";
|
|
64
|
+
static void registerNatives() {
|
|
65
|
+
registerHybrid({makeNativeMethod("invoke_cxx", JFunc_void_std__string_cxx::invoke_cxx)});
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
private:
|
|
69
|
+
explicit JFunc_void_std__string_cxx(const std::function<void(const std::string& /* message */)>& func): _func(func) { }
|
|
70
|
+
|
|
71
|
+
private:
|
|
72
|
+
friend HybridBase;
|
|
73
|
+
std::function<void(const std::string& /* message */)> _func;
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
} // namespace margelo::nitro::video
|
|
@@ -78,6 +78,7 @@ namespace margelo::nitro::video { struct onVolumeChangeData; }
|
|
|
78
78
|
#include "onProgressData.hpp"
|
|
79
79
|
#include "JFunc_void_onProgressData.hpp"
|
|
80
80
|
#include "JonProgressData.hpp"
|
|
81
|
+
#include "JFunc_void_std__string.hpp"
|
|
81
82
|
#include "VideoPlayerStatus.hpp"
|
|
82
83
|
#include "JFunc_void_VideoPlayerStatus.hpp"
|
|
83
84
|
#include "JVideoPlayerStatus.hpp"
|
|
@@ -183,6 +184,11 @@ namespace margelo::nitro::video {
|
|
|
183
184
|
auto __result = method(_javaPart, JFunc_void_onProgressData_cxx::fromCpp(listener));
|
|
184
185
|
return __result->toCpp();
|
|
185
186
|
}
|
|
187
|
+
ListenerSubscription JHybridVideoPlayerEventEmitterSpec::addOnPlayerErrorListener(const std::function<void(const std::string& /* message */)>& listener) {
|
|
188
|
+
static const auto method = javaClassStatic()->getMethod<jni::local_ref<JListenerSubscription>(jni::alias_ref<JFunc_void_std__string::javaobject> /* listener */)>("addOnPlayerErrorListener_cxx");
|
|
189
|
+
auto __result = method(_javaPart, JFunc_void_std__string_cxx::fromCpp(listener));
|
|
190
|
+
return __result->toCpp();
|
|
191
|
+
}
|
|
186
192
|
ListenerSubscription JHybridVideoPlayerEventEmitterSpec::addOnReadyToDisplayListener(const std::function<void()>& listener) {
|
|
187
193
|
static const auto method = javaClassStatic()->getMethod<jni::local_ref<JListenerSubscription>(jni::alias_ref<JFunc_void::javaobject> /* listener */)>("addOnReadyToDisplayListener_cxx");
|
|
188
194
|
auto __result = method(_javaPart, JFunc_void_cxx::fromCpp(listener));
|
|
@@ -66,6 +66,7 @@ namespace margelo::nitro::video {
|
|
|
66
66
|
ListenerSubscription addOnPlaybackStateChangeListener(const std::function<void(const onPlaybackStateChangeData& /* data */)>& listener) override;
|
|
67
67
|
ListenerSubscription addOnPlaybackRateChangeListener(const std::function<void(double /* rate */)>& listener) override;
|
|
68
68
|
ListenerSubscription addOnProgressListener(const std::function<void(const onProgressData& /* data */)>& listener) override;
|
|
69
|
+
ListenerSubscription addOnPlayerErrorListener(const std::function<void(const std::string& /* message */)>& listener) override;
|
|
69
70
|
ListenerSubscription addOnReadyToDisplayListener(const std::function<void()>& listener) override;
|
|
70
71
|
ListenerSubscription addOnSeekListener(const std::function<void(double /* position */)>& listener) override;
|
|
71
72
|
ListenerSubscription addOnStatusChangeListener(const std::function<void(VideoPlayerStatus /* status */)>& listener) override;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
///
|
|
2
|
+
/// Func_void_std__string.kt
|
|
3
|
+
/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
|
|
4
|
+
/// https://github.com/mrousavy/nitro
|
|
5
|
+
/// Copyright © 2025 Marc Rousavy @ Margelo
|
|
6
|
+
///
|
|
7
|
+
|
|
8
|
+
package com.margelo.nitro.video
|
|
9
|
+
|
|
10
|
+
import androidx.annotation.Keep
|
|
11
|
+
import com.facebook.jni.HybridData
|
|
12
|
+
import com.facebook.proguard.annotations.DoNotStrip
|
|
13
|
+
import dalvik.annotation.optimization.FastNative
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Represents the JavaScript callback `(message: string) => void`.
|
|
18
|
+
* This can be either implemented in C++ (in which case it might be a callback coming from JS),
|
|
19
|
+
* or in Kotlin/Java (in which case it is a native callback).
|
|
20
|
+
*/
|
|
21
|
+
@DoNotStrip
|
|
22
|
+
@Keep
|
|
23
|
+
@Suppress("ClassName", "RedundantUnitReturnType")
|
|
24
|
+
fun interface Func_void_std__string: (String) -> Unit {
|
|
25
|
+
/**
|
|
26
|
+
* Call the given JS callback.
|
|
27
|
+
* @throws Throwable if the JS function itself throws an error, or if the JS function/runtime has already been deleted.
|
|
28
|
+
*/
|
|
29
|
+
@DoNotStrip
|
|
30
|
+
@Keep
|
|
31
|
+
override fun invoke(message: String): Unit
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Represents the JavaScript callback `(message: string) => void`.
|
|
36
|
+
* This is implemented in C++, via a `std::function<...>`.
|
|
37
|
+
* The callback might be coming from JS.
|
|
38
|
+
*/
|
|
39
|
+
@DoNotStrip
|
|
40
|
+
@Keep
|
|
41
|
+
@Suppress(
|
|
42
|
+
"KotlinJniMissingFunction", "unused",
|
|
43
|
+
"RedundantSuppression", "RedundantUnitReturnType", "FunctionName",
|
|
44
|
+
"ConvertSecondaryConstructorToPrimary", "ClassName", "LocalVariableName",
|
|
45
|
+
)
|
|
46
|
+
class Func_void_std__string_cxx: Func_void_std__string {
|
|
47
|
+
@DoNotStrip
|
|
48
|
+
@Keep
|
|
49
|
+
private val mHybridData: HybridData
|
|
50
|
+
|
|
51
|
+
@DoNotStrip
|
|
52
|
+
@Keep
|
|
53
|
+
private constructor(hybridData: HybridData) {
|
|
54
|
+
mHybridData = hybridData
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
@DoNotStrip
|
|
58
|
+
@Keep
|
|
59
|
+
override fun invoke(message: String): Unit
|
|
60
|
+
= invoke_cxx(message)
|
|
61
|
+
|
|
62
|
+
@FastNative
|
|
63
|
+
private external fun invoke_cxx(message: String): Unit
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Represents the JavaScript callback `(message: string) => void`.
|
|
68
|
+
* This is implemented in Java/Kotlin, via a `(String) -> Unit`.
|
|
69
|
+
* The callback is always coming from native.
|
|
70
|
+
*/
|
|
71
|
+
@DoNotStrip
|
|
72
|
+
@Keep
|
|
73
|
+
@Suppress("ClassName", "RedundantUnitReturnType", "unused")
|
|
74
|
+
class Func_void_std__string_java(private val function: (String) -> Unit): Func_void_std__string {
|
|
75
|
+
@DoNotStrip
|
|
76
|
+
@Keep
|
|
77
|
+
override fun invoke(message: String): Unit {
|
|
78
|
+
return this.function(message)
|
|
79
|
+
}
|
|
80
|
+
}
|
|
@@ -153,6 +153,15 @@ abstract class HybridVideoPlayerEventEmitterSpec: HybridObject() {
|
|
|
153
153
|
return __result
|
|
154
154
|
}
|
|
155
155
|
|
|
156
|
+
abstract fun addOnPlayerErrorListener(listener: (message: String) -> Unit): ListenerSubscription
|
|
157
|
+
|
|
158
|
+
@DoNotStrip
|
|
159
|
+
@Keep
|
|
160
|
+
private fun addOnPlayerErrorListener_cxx(listener: Func_void_std__string): ListenerSubscription {
|
|
161
|
+
val __result = addOnPlayerErrorListener(listener)
|
|
162
|
+
return __result
|
|
163
|
+
}
|
|
164
|
+
|
|
156
165
|
abstract fun addOnReadyToDisplayListener(listener: () -> Unit): ListenerSubscription
|
|
157
166
|
|
|
158
167
|
@DoNotStrip
|
|
@@ -156,6 +156,14 @@ namespace margelo::nitro::video::bridge::swift {
|
|
|
156
156
|
};
|
|
157
157
|
}
|
|
158
158
|
|
|
159
|
+
// pragma MARK: std::function<void(const std::string& /* message */)>
|
|
160
|
+
Func_void_std__string create_Func_void_std__string(void* NON_NULL swiftClosureWrapper) noexcept {
|
|
161
|
+
auto swiftClosure = ReactNativeVideo::Func_void_std__string::fromUnsafe(swiftClosureWrapper);
|
|
162
|
+
return [swiftClosure = std::move(swiftClosure)](const std::string& message) mutable -> void {
|
|
163
|
+
swiftClosure.call(message);
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
|
|
159
167
|
// pragma MARK: std::function<void(VideoPlayerStatus /* status */)>
|
|
160
168
|
Func_void_VideoPlayerStatus create_Func_void_VideoPlayerStatus(void* NON_NULL swiftClosureWrapper) noexcept {
|
|
161
169
|
auto swiftClosure = ReactNativeVideo::Func_void_VideoPlayerStatus::fromUnsafe(swiftClosureWrapper);
|
|
@@ -188,14 +196,6 @@ namespace margelo::nitro::video::bridge::swift {
|
|
|
188
196
|
};
|
|
189
197
|
}
|
|
190
198
|
|
|
191
|
-
// pragma MARK: std::function<void(const std::string& /* result */)>
|
|
192
|
-
Func_void_std__string create_Func_void_std__string(void* NON_NULL swiftClosureWrapper) noexcept {
|
|
193
|
-
auto swiftClosure = ReactNativeVideo::Func_void_std__string::fromUnsafe(swiftClosureWrapper);
|
|
194
|
-
return [swiftClosure = std::move(swiftClosure)](const std::string& result) mutable -> void {
|
|
195
|
-
swiftClosure.call(result);
|
|
196
|
-
};
|
|
197
|
-
}
|
|
198
|
-
|
|
199
199
|
// pragma MARK: std::function<std::shared_ptr<Promise<std::shared_ptr<Promise<std::string>>>>(const OnGetLicensePayload& /* payload */)>
|
|
200
200
|
Func_std__shared_ptr_Promise_std__shared_ptr_Promise_std__string_____OnGetLicensePayload create_Func_std__shared_ptr_Promise_std__shared_ptr_Promise_std__string_____OnGetLicensePayload(void* NON_NULL swiftClosureWrapper) noexcept {
|
|
201
201
|
auto swiftClosure = ReactNativeVideo::Func_std__shared_ptr_Promise_std__shared_ptr_Promise_std__string_____OnGetLicensePayload::fromUnsafe(swiftClosureWrapper);
|
|
@@ -573,6 +573,28 @@ namespace margelo::nitro::video::bridge::swift {
|
|
|
573
573
|
return Func_void_onProgressData_Wrapper(std::move(value));
|
|
574
574
|
}
|
|
575
575
|
|
|
576
|
+
// pragma MARK: std::function<void(const std::string& /* message */)>
|
|
577
|
+
/**
|
|
578
|
+
* Specialized version of `std::function<void(const std::string&)>`.
|
|
579
|
+
*/
|
|
580
|
+
using Func_void_std__string = std::function<void(const std::string& /* message */)>;
|
|
581
|
+
/**
|
|
582
|
+
* Wrapper class for a `std::function<void(const std::string& / * message * /)>`, this can be used from Swift.
|
|
583
|
+
*/
|
|
584
|
+
class Func_void_std__string_Wrapper final {
|
|
585
|
+
public:
|
|
586
|
+
explicit Func_void_std__string_Wrapper(std::function<void(const std::string& /* message */)>&& func): _function(std::make_unique<std::function<void(const std::string& /* message */)>>(std::move(func))) {}
|
|
587
|
+
inline void call(std::string message) const noexcept {
|
|
588
|
+
_function->operator()(message);
|
|
589
|
+
}
|
|
590
|
+
private:
|
|
591
|
+
std::unique_ptr<std::function<void(const std::string& /* message */)>> _function;
|
|
592
|
+
} SWIFT_NONCOPYABLE;
|
|
593
|
+
Func_void_std__string create_Func_void_std__string(void* NON_NULL swiftClosureWrapper) noexcept;
|
|
594
|
+
inline Func_void_std__string_Wrapper wrap_Func_void_std__string(Func_void_std__string value) noexcept {
|
|
595
|
+
return Func_void_std__string_Wrapper(std::move(value));
|
|
596
|
+
}
|
|
597
|
+
|
|
576
598
|
// pragma MARK: std::function<void(VideoPlayerStatus /* status */)>
|
|
577
599
|
/**
|
|
578
600
|
* Specialized version of `std::function<void(VideoPlayerStatus)>`.
|
|
@@ -785,28 +807,6 @@ namespace margelo::nitro::video::bridge::swift {
|
|
|
785
807
|
return PromiseHolder<std::string>(std::move(promise));
|
|
786
808
|
}
|
|
787
809
|
|
|
788
|
-
// pragma MARK: std::function<void(const std::string& /* result */)>
|
|
789
|
-
/**
|
|
790
|
-
* Specialized version of `std::function<void(const std::string&)>`.
|
|
791
|
-
*/
|
|
792
|
-
using Func_void_std__string = std::function<void(const std::string& /* result */)>;
|
|
793
|
-
/**
|
|
794
|
-
* Wrapper class for a `std::function<void(const std::string& / * result * /)>`, this can be used from Swift.
|
|
795
|
-
*/
|
|
796
|
-
class Func_void_std__string_Wrapper final {
|
|
797
|
-
public:
|
|
798
|
-
explicit Func_void_std__string_Wrapper(std::function<void(const std::string& /* result */)>&& func): _function(std::make_unique<std::function<void(const std::string& /* result */)>>(std::move(func))) {}
|
|
799
|
-
inline void call(std::string result) const noexcept {
|
|
800
|
-
_function->operator()(result);
|
|
801
|
-
}
|
|
802
|
-
private:
|
|
803
|
-
std::unique_ptr<std::function<void(const std::string& /* result */)>> _function;
|
|
804
|
-
} SWIFT_NONCOPYABLE;
|
|
805
|
-
Func_void_std__string create_Func_void_std__string(void* NON_NULL swiftClosureWrapper) noexcept;
|
|
806
|
-
inline Func_void_std__string_Wrapper wrap_Func_void_std__string(Func_void_std__string value) noexcept {
|
|
807
|
-
return Func_void_std__string_Wrapper(std::move(value));
|
|
808
|
-
}
|
|
809
|
-
|
|
810
810
|
// pragma MARK: std::function<std::shared_ptr<Promise<std::shared_ptr<Promise<std::string>>>>(const OnGetLicensePayload& /* payload */)>
|
|
811
811
|
/**
|
|
812
812
|
* Specialized version of `std::function<std::shared_ptr<Promise<std::shared_ptr<Promise<std::string>>>>(const OnGetLicensePayload&)>`.
|
|
@@ -207,6 +207,14 @@ namespace margelo::nitro::video {
|
|
|
207
207
|
auto __value = std::move(__result.value());
|
|
208
208
|
return __value;
|
|
209
209
|
}
|
|
210
|
+
inline ListenerSubscription addOnPlayerErrorListener(const std::function<void(const std::string& /* message */)>& listener) override {
|
|
211
|
+
auto __result = _swiftPart.addOnPlayerErrorListener(listener);
|
|
212
|
+
if (__result.hasError()) [[unlikely]] {
|
|
213
|
+
std::rethrow_exception(__result.error());
|
|
214
|
+
}
|
|
215
|
+
auto __value = std::move(__result.value());
|
|
216
|
+
return __value;
|
|
217
|
+
}
|
|
210
218
|
inline ListenerSubscription addOnReadyToDisplayListener(const std::function<void()>& listener) override {
|
|
211
219
|
auto __result = _swiftPart.addOnReadyToDisplayListener(listener);
|
|
212
220
|
if (__result.hasError()) [[unlikely]] {
|
|
@@ -26,6 +26,7 @@ public protocol HybridVideoPlayerEventEmitterSpec_protocol: HybridObject {
|
|
|
26
26
|
func addOnPlaybackStateChangeListener(listener: @escaping (_ data: onPlaybackStateChangeData) -> Void) throws -> ListenerSubscription
|
|
27
27
|
func addOnPlaybackRateChangeListener(listener: @escaping (_ rate: Double) -> Void) throws -> ListenerSubscription
|
|
28
28
|
func addOnProgressListener(listener: @escaping (_ data: onProgressData) -> Void) throws -> ListenerSubscription
|
|
29
|
+
func addOnPlayerErrorListener(listener: @escaping (_ message: String) -> Void) throws -> ListenerSubscription
|
|
29
30
|
func addOnReadyToDisplayListener(listener: @escaping () -> Void) throws -> ListenerSubscription
|
|
30
31
|
func addOnSeekListener(listener: @escaping (_ position: Double) -> Void) throws -> ListenerSubscription
|
|
31
32
|
func addOnStatusChangeListener(listener: @escaping (_ status: VideoPlayerStatus) -> Void) throws -> ListenerSubscription
|
|
@@ -321,6 +321,23 @@ open class HybridVideoPlayerEventEmitterSpec_cxx {
|
|
|
321
321
|
}
|
|
322
322
|
}
|
|
323
323
|
|
|
324
|
+
@inline(__always)
|
|
325
|
+
public final func addOnPlayerErrorListener(listener: bridge.Func_void_std__string) -> bridge.Result_ListenerSubscription_ {
|
|
326
|
+
do {
|
|
327
|
+
let __result = try self.__implementation.addOnPlayerErrorListener(listener: { () -> (String) -> Void in
|
|
328
|
+
let __wrappedFunction = bridge.wrap_Func_void_std__string(listener)
|
|
329
|
+
return { (__message: String) -> Void in
|
|
330
|
+
__wrappedFunction.call(std.string(__message))
|
|
331
|
+
}
|
|
332
|
+
}())
|
|
333
|
+
let __resultCpp = __result
|
|
334
|
+
return bridge.create_Result_ListenerSubscription_(__resultCpp)
|
|
335
|
+
} catch (let __error) {
|
|
336
|
+
let __exceptionPtr = __error.toCpp()
|
|
337
|
+
return bridge.create_Result_ListenerSubscription_(__exceptionPtr)
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
|
|
324
341
|
@inline(__always)
|
|
325
342
|
public final func addOnReadyToDisplayListener(listener: bridge.Func_void) -> bridge.Result_ListenerSubscription_ {
|
|
326
343
|
do {
|
|
@@ -26,6 +26,7 @@ namespace margelo::nitro::video {
|
|
|
26
26
|
prototype.registerHybridMethod("addOnPlaybackStateChangeListener", &HybridVideoPlayerEventEmitterSpec::addOnPlaybackStateChangeListener);
|
|
27
27
|
prototype.registerHybridMethod("addOnPlaybackRateChangeListener", &HybridVideoPlayerEventEmitterSpec::addOnPlaybackRateChangeListener);
|
|
28
28
|
prototype.registerHybridMethod("addOnProgressListener", &HybridVideoPlayerEventEmitterSpec::addOnProgressListener);
|
|
29
|
+
prototype.registerHybridMethod("addOnPlayerErrorListener", &HybridVideoPlayerEventEmitterSpec::addOnPlayerErrorListener);
|
|
29
30
|
prototype.registerHybridMethod("addOnReadyToDisplayListener", &HybridVideoPlayerEventEmitterSpec::addOnReadyToDisplayListener);
|
|
30
31
|
prototype.registerHybridMethod("addOnSeekListener", &HybridVideoPlayerEventEmitterSpec::addOnSeekListener);
|
|
31
32
|
prototype.registerHybridMethod("addOnStatusChangeListener", &HybridVideoPlayerEventEmitterSpec::addOnStatusChangeListener);
|
|
@@ -39,9 +39,9 @@ namespace margelo::nitro::video { struct onVolumeChangeData; }
|
|
|
39
39
|
#include "onLoadStartData.hpp"
|
|
40
40
|
#include "onPlaybackStateChangeData.hpp"
|
|
41
41
|
#include "onProgressData.hpp"
|
|
42
|
+
#include <string>
|
|
42
43
|
#include "VideoPlayerStatus.hpp"
|
|
43
44
|
#include "TimedMetadata.hpp"
|
|
44
|
-
#include <string>
|
|
45
45
|
#include <vector>
|
|
46
46
|
#include "onVolumeChangeData.hpp"
|
|
47
47
|
|
|
@@ -88,6 +88,7 @@ namespace margelo::nitro::video {
|
|
|
88
88
|
virtual ListenerSubscription addOnPlaybackStateChangeListener(const std::function<void(const onPlaybackStateChangeData& /* data */)>& listener) = 0;
|
|
89
89
|
virtual ListenerSubscription addOnPlaybackRateChangeListener(const std::function<void(double /* rate */)>& listener) = 0;
|
|
90
90
|
virtual ListenerSubscription addOnProgressListener(const std::function<void(const onProgressData& /* data */)>& listener) = 0;
|
|
91
|
+
virtual ListenerSubscription addOnPlayerErrorListener(const std::function<void(const std::string& /* message */)>& listener) = 0;
|
|
91
92
|
virtual ListenerSubscription addOnReadyToDisplayListener(const std::function<void()>& listener) = 0;
|
|
92
93
|
virtual ListenerSubscription addOnSeekListener(const std::function<void(double /* position */)>& listener) = 0;
|
|
93
94
|
virtual ListenerSubscription addOnStatusChangeListener(const std::function<void(VideoPlayerStatus /* status */)>& listener) = 0;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pigeonmal/react-native-video",
|
|
3
|
-
"version": "7.0.0-beta.
|
|
3
|
+
"version": "7.0.0-beta.16",
|
|
4
4
|
"description": "<Video /> Component for React Native",
|
|
5
5
|
"source": "./src/index.tsx",
|
|
6
6
|
"main": "./lib/commonjs/index.js",
|
|
@@ -94,7 +94,7 @@
|
|
|
94
94
|
"react": "*",
|
|
95
95
|
"react-native": "*",
|
|
96
96
|
"react-native-nitro-modules": ">=0.27.2",
|
|
97
|
-
"react-native-nitro-fetch": ">=0.1.
|
|
97
|
+
"@pigeonmal/react-native-nitro-fetch": ">=0.1.7"
|
|
98
98
|
},
|
|
99
99
|
"release-it": {
|
|
100
100
|
"npm": {
|
|
@@ -7,6 +7,7 @@ import {
|
|
|
7
7
|
type JSVideoPlayerEvents,
|
|
8
8
|
type AllPlayerEvents as PlayerEvents,
|
|
9
9
|
} from './types/Events';
|
|
10
|
+
import { VideoError } from './types/VideoError';
|
|
10
11
|
|
|
11
12
|
export class VideoPlayerEvents {
|
|
12
13
|
protected eventEmitter: VideoPlayerEventEmitter;
|
|
@@ -48,11 +49,20 @@ export class VideoPlayerEvents {
|
|
|
48
49
|
this.jsEventListeners.onError.add(
|
|
49
50
|
callback as JSVideoPlayerEvents['onError']
|
|
50
51
|
);
|
|
52
|
+
const nativeCallback = (message: string) =>
|
|
53
|
+
(callback as JSVideoPlayerEvents['onError'])(
|
|
54
|
+
new VideoError('player/playback-exception', message)
|
|
55
|
+
);
|
|
56
|
+
|
|
57
|
+
const removeNative =
|
|
58
|
+
this.eventEmitter.addOnPlayerErrorListener(nativeCallback);
|
|
51
59
|
return {
|
|
52
|
-
remove: () =>
|
|
60
|
+
remove: () => {
|
|
53
61
|
this.jsEventListeners.onError?.delete(
|
|
54
62
|
callback as JSVideoPlayerEvents['onError']
|
|
55
|
-
)
|
|
63
|
+
);
|
|
64
|
+
removeNative.remove();
|
|
65
|
+
},
|
|
56
66
|
};
|
|
57
67
|
// ----------------- Native Events -----------------
|
|
58
68
|
case 'onAudioBecomingNoisy':
|
|
@@ -133,6 +133,15 @@ export interface VideoPlayerEventEmitter
|
|
|
133
133
|
listener: (data: onProgressData) => void
|
|
134
134
|
): ListenerSubscription;
|
|
135
135
|
|
|
136
|
+
/**
|
|
137
|
+
* Adds a listener for the `onPlayerError` event.
|
|
138
|
+
* @param listener - The listener to add.
|
|
139
|
+
* @returns A subscription object that can be used to remove the listener.
|
|
140
|
+
*/
|
|
141
|
+
addOnPlayerErrorListener(
|
|
142
|
+
listener: (message: string) => void
|
|
143
|
+
): ListenerSubscription;
|
|
144
|
+
|
|
136
145
|
/**
|
|
137
146
|
* Adds a listener for the `onReadyToDisplay` event.
|
|
138
147
|
* @see {@link VideoPlayerEvents.onReadyToDisplay}
|
|
Binary file
|