@nativescript/canvas-media 2.0.23 → 2.0.25

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.
@@ -31,4 +31,6 @@ export declare class Audio extends AudioBase {
31
31
  set loop(value: boolean);
32
32
  _addChildFromBuilder(name: string, value: any): void;
33
33
  onLoaded(): void;
34
+ attachAudioContextTap(contextNative: any): any;
35
+ detachAudioContextTap(): void;
34
36
  }
@@ -98,6 +98,7 @@ export class Audio extends AudioBase {
98
98
  if (this._playPromise) {
99
99
  return this._playPromise;
100
100
  }
101
+ this._notifyListener(Audio.playEvent);
101
102
  this._playPromise = new Promise((resolve, reject) => {
102
103
  this._playResolve = resolve;
103
104
  this._playReject = reject;
@@ -118,6 +119,7 @@ export class Audio extends AudioBase {
118
119
  return;
119
120
  }
120
121
  this._instance.pause();
122
+ this._notifyListener(Audio.pauseEvent);
121
123
  }
122
124
  get muted() {
123
125
  return this._instance.getMuted();
@@ -126,46 +128,25 @@ export class Audio extends AudioBase {
126
128
  this._instance.setMuted(booleanConverter(value));
127
129
  }
128
130
  get duration() {
129
- try {
130
- const d = this._instance.getDuration();
131
- if (d == null || Number(d) <= 0)
132
- return NaN;
133
- return Number(d) / 1000.0;
134
- }
135
- catch (e) {
131
+ const d = this._instance.getDuration();
132
+ if (d == null || Number(d) <= 0)
136
133
  return NaN;
137
- }
134
+ return Number(d) / 1000.0;
138
135
  }
139
136
  get currentTime() {
140
- try {
141
- return this._instance.getCurrentTime();
142
- }
143
- catch (e) {
144
- return 0;
145
- }
137
+ return this._instance.getCurrentTime();
146
138
  }
147
139
  set currentTime(value) {
148
- try {
149
- this._instance.setCurrentTime(value);
150
- }
151
- catch (e) { }
140
+ this._instance.setCurrentTime(value);
152
141
  }
153
142
  get src() {
154
- try {
155
- return this._instance.getSrc();
156
- }
157
- catch (e) {
158
- return undefined;
159
- }
143
+ return this._instance.getSrc();
160
144
  }
161
145
  set src(value) {
162
- try {
163
- if (typeof value === 'string' && value.startsWith('~/')) {
164
- value = path.join(knownFolders.currentApp().path, value.replace('~', ''));
165
- }
166
- this._instance.setSrc(value);
146
+ if (typeof value === 'string' && value.startsWith('~/')) {
147
+ value = path.join(knownFolders.currentApp().path, value.replace('~', ''));
167
148
  }
168
- catch (e) { }
149
+ this._instance.setSrc(value);
169
150
  }
170
151
  load() {
171
152
  if (!this._instance) {
@@ -218,5 +199,27 @@ export class Audio extends AudioBase {
218
199
  this.src = this._sourceView[0].src;
219
200
  }
220
201
  }
202
+ attachAudioContextTap(contextNative) {
203
+ const inst = this._instance;
204
+ if (!inst)
205
+ return null;
206
+ if (contextNative && typeof contextNative.createSourceNodeFromMediaPlayer === 'function') {
207
+ const player = inst.player ?? inst._player ?? null;
208
+ if (player) {
209
+ const node = contextNative.createSourceNodeFromMediaPlayer(player);
210
+ if (node)
211
+ return node;
212
+ }
213
+ }
214
+ if (typeof inst.attachAudioContextTap === 'function') {
215
+ return inst.attachAudioContextTap(contextNative);
216
+ }
217
+ }
218
+ detachAudioContextTap() {
219
+ const inst = this._instance;
220
+ if (!inst || typeof inst.detachAudioContextTap !== 'function')
221
+ return;
222
+ inst.detachAudioContextTap();
223
+ }
221
224
  }
222
225
  //# sourceMappingURL=index.android.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.android.js","sourceRoot":"","sources":["../../../../packages/canvas-media/audio/index.android.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.android.js","sourceRoot":"","sources":["../../../../packages/canvas-media/audio/index.android.ts"],"names":[],"mappings":"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"}
@@ -31,4 +31,7 @@ export declare class Audio extends AudioBase {
31
31
  pause(): void;
32
32
  get loop(): boolean | string;
33
33
  set loop(value: boolean | string);
34
+ private _activeTapNode;
35
+ attachAudioContextTap(contextNative: any): any;
36
+ detachAudioContextTap(): void;
34
37
  }
@@ -84,6 +84,7 @@ export class Audio extends AudioBase {
84
84
  this._playResolve = null;
85
85
  this._playReject = null;
86
86
  this._isCustom = false;
87
+ this._activeTapNode = null;
87
88
  this.helper = NSCAudioHelper.new();
88
89
  try {
89
90
  AVAudioSession.sharedInstance().setCategoryError(AVAudioSessionCategoryPlayback);
@@ -177,6 +178,7 @@ export class Audio extends AudioBase {
177
178
  if (this._playPromise) {
178
179
  return this._playPromise;
179
180
  }
181
+ this._notifyListener(Audio.playEvent);
180
182
  this._playPromise = new Promise((resolve, reject) => {
181
183
  this._playResolve = resolve;
182
184
  this._playReject = reject;
@@ -186,6 +188,7 @@ export class Audio extends AudioBase {
186
188
  }
187
189
  pause() {
188
190
  this.helper.pause();
191
+ this._notifyListener(Audio.pauseEvent);
189
192
  }
190
193
  // @ts-ignore
191
194
  get loop() {
@@ -198,5 +201,26 @@ export class Audio extends AudioBase {
198
201
  }
199
202
  this.helper.loop = booleanConverter(value);
200
203
  }
204
+ attachAudioContextTap(contextNative) {
205
+ if (!contextNative || typeof contextNative.createSourceNodeFromMediaPlayer !== 'function') {
206
+ return null;
207
+ }
208
+ const player = this.helper?.player;
209
+ if (!player)
210
+ return null;
211
+ try {
212
+ const node = contextNative.createSourceNodeFromMediaPlayer(player);
213
+ if (node)
214
+ this._activeTapNode = node;
215
+ return node;
216
+ }
217
+ catch (e) {
218
+ console.warn('Audio.attachAudioContextTap: native call failed:', e);
219
+ return null;
220
+ }
221
+ }
222
+ detachAudioContextTap() {
223
+ this._activeTapNode = null;
224
+ }
201
225
  }
202
226
  //# sourceMappingURL=index.ios.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.ios.js","sourceRoot":"","sources":["../../../../packages/canvas-media/audio/index.ios.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.ios.js","sourceRoot":"","sources":["../../../../packages/canvas-media/audio/index.ios.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nativescript/canvas-media",
3
- "version": "2.0.23",
3
+ "version": "2.0.25",
4
4
  "description": "Canvas media",
5
5
  "main": "index",
6
6
  "typings": "index.d.ts",
Binary file
@@ -0,0 +1,140 @@
1
+ package org.nativescript.canvas.media;
2
+
3
+ import androidx.media3.common.audio.AudioProcessor;
4
+ import androidx.media3.common.audio.BaseAudioProcessor;
5
+ import androidx.media3.common.util.UnstableApi;
6
+
7
+ import java.nio.ByteBuffer;
8
+ import java.nio.ByteOrder;
9
+ import java.nio.FloatBuffer;
10
+
11
+
12
+ @UnstableApi
13
+ public class AudioContextTapProcessor extends BaseAudioProcessor {
14
+
15
+ public interface Sink {
16
+ void onPcmFrames(float[] interleaved, int sampleCount, int sampleRate, int channels);
17
+
18
+ boolean isActive();
19
+ }
20
+
21
+ private volatile Sink _sink;
22
+ private float[] _floatScratch = new float[2048];
23
+ private int _silenceFlag;
24
+ static final int ENCODING_PCM_16BIT_BIG_ENDIAN = 0x10000000;
25
+
26
+ public void setSink(Sink sink) {
27
+ this._sink = sink;
28
+ }
29
+
30
+ public Sink getSink() {
31
+ return _sink;
32
+ }
33
+
34
+ @Override
35
+ public AudioFormat onConfigure(AudioFormat inputFormat) throws UnhandledAudioFormatException {
36
+ return inputFormat;
37
+ }
38
+
39
+ @Override
40
+ public void queueInput(ByteBuffer inputBuffer) {
41
+ if (!inputBuffer.hasRemaining()) return;
42
+
43
+ Sink sink = _sink;
44
+ AudioFormat fmt = inputAudioFormat;
45
+
46
+ int remaining = inputBuffer.remaining();
47
+ int channels = fmt.channelCount;
48
+ int sampleRate = fmt.sampleRate;
49
+ int bytesPerSample = bytesPerSample(fmt.encoding);
50
+
51
+ ByteBuffer out = replaceOutputBuffer(remaining);
52
+ int srcStart = inputBuffer.position();
53
+ out.put(inputBuffer);
54
+ out.flip();
55
+
56
+ if (sink != null && sink.isActive() && bytesPerSample > 0 && channels > 0) {
57
+ int sampleCount = remaining / bytesPerSample;
58
+ if (sampleCount > 0) {
59
+ if (_floatScratch.length < sampleCount) {
60
+ _floatScratch = new float[Math.max(sampleCount, _floatScratch.length * 2)];
61
+ }
62
+ ByteBuffer src = inputBuffer.duplicate();
63
+ src.order(ByteOrder.nativeOrder());
64
+ src.position(srcStart);
65
+ src.limit(srcStart + remaining);
66
+ copyToFloat(src, _floatScratch, sampleCount, fmt.encoding);
67
+ try {
68
+ sink.onPcmFrames(_floatScratch, sampleCount, sampleRate, channels);
69
+ } catch (Throwable t) {
70
+ android.util.Log.w("AudioContextTapProc", "sink threw", t);
71
+ }
72
+ }
73
+ }
74
+
75
+ inputBuffer.position(srcStart + remaining);
76
+ }
77
+
78
+ private static int bytesPerSample(int encoding) {
79
+ switch (encoding) {
80
+ case android.media.AudioFormat.ENCODING_PCM_8BIT:
81
+ return 1;
82
+ case android.media.AudioFormat.ENCODING_PCM_16BIT:
83
+ case ENCODING_PCM_16BIT_BIG_ENDIAN:
84
+ return 2;
85
+ case android.media.AudioFormat.ENCODING_PCM_24BIT_PACKED:
86
+ return 3;
87
+ case android.media.AudioFormat.ENCODING_PCM_32BIT:
88
+ case android.media.AudioFormat.ENCODING_PCM_FLOAT:
89
+ return 4;
90
+ default:
91
+ return 0;
92
+ }
93
+ }
94
+
95
+ private static void copyToFloat(ByteBuffer src, float[] dst, int sampleCount, int encoding) {
96
+ switch (encoding) {
97
+ case android.media.AudioFormat.ENCODING_PCM_FLOAT: {
98
+ FloatBuffer fb = src.asFloatBuffer();
99
+ fb.get(dst, 0, sampleCount);
100
+ break;
101
+ }
102
+ case android.media.AudioFormat.ENCODING_PCM_16BIT: {
103
+ for (int i = 0; i < sampleCount; i++) {
104
+ short s = src.getShort();
105
+ dst[i] = s / 32768.0f;
106
+ }
107
+ break;
108
+ }
109
+ case android.media.AudioFormat.ENCODING_PCM_8BIT: {
110
+ for (int i = 0; i < sampleCount; i++) {
111
+ int u = src.get() & 0xff;
112
+ dst[i] = (u - 128) / 128.0f;
113
+ }
114
+ break;
115
+ }
116
+ case android.media.AudioFormat.ENCODING_PCM_32BIT: {
117
+ for (int i = 0; i < sampleCount; i++) {
118
+ int v = src.getInt();
119
+ dst[i] = v / 2147483648.0f;
120
+ }
121
+ break;
122
+ }
123
+ case android.media.AudioFormat.ENCODING_PCM_24BIT_PACKED: {
124
+ for (int i = 0; i < sampleCount; i++) {
125
+ int b0 = src.get() & 0xff;
126
+ int b1 = src.get() & 0xff;
127
+ int b2 = src.get();
128
+ int v = (b2 << 16) | (b1 << 8) | b0;
129
+ if ((v & 0x800000) != 0) v |= 0xff000000;
130
+ dst[i] = v / 8388608.0f;
131
+ }
132
+ break;
133
+ }
134
+ default: {
135
+ java.util.Arrays.fill(dst, 0, sampleCount, 0f);
136
+ break;
137
+ }
138
+ }
139
+ }
140
+ }
@@ -27,8 +27,14 @@ import androidx.media3.datasource.cache.LeastRecentlyUsedCacheEvictor;
27
27
  import androidx.media3.datasource.cache.SimpleCache;
28
28
  import androidx.media3.database.StandaloneDatabaseProvider;
29
29
  import androidx.media3.exoplayer.DefaultLoadControl;
30
+ import androidx.media3.exoplayer.DefaultRenderersFactory;
30
31
  import androidx.media3.exoplayer.ExoPlayer;
32
+ import androidx.media3.exoplayer.audio.AudioSink;
33
+ import androidx.media3.exoplayer.audio.DefaultAudioSink;
31
34
  import androidx.media3.exoplayer.source.DefaultMediaSourceFactory;
35
+ import androidx.media3.common.audio.AudioProcessor;
36
+
37
+ import java.lang.reflect.Method;
32
38
 
33
39
  @UnstableApi
34
40
  public class AudioHelper implements Player.Listener {
@@ -50,6 +56,61 @@ public class AudioHelper implements Player.Listener {
50
56
  private boolean _playing = false;
51
57
  private AudioView _audioView;
52
58
  private LinearLayout _container;
59
+ private final AudioContextTapProcessor _tapProcessor = new AudioContextTapProcessor();
60
+ private volatile Object _tapSourceNode;
61
+ private volatile Object _attachedContext;
62
+ private volatile int _tapNodeSampleRate;
63
+ private volatile int _tapNodeChannels;
64
+ private volatile Method _tapNodePushFrames;
65
+ private volatile Method _tapNodeEndStream;
66
+ private volatile Method _ctxCreateExternalPcm;
67
+
68
+ private final AudioContextTapProcessor.Sink _tapSink = new AudioContextTapProcessor.Sink() {
69
+ @Override
70
+ public void onPcmFrames(float[] interleaved, int sampleCount, int sampleRate, int channels) {
71
+ Object node = _tapSourceNode;
72
+ if (node == null || sampleCount == 0) return;
73
+
74
+ if (_tapNodeSampleRate != sampleRate || _tapNodeChannels != channels) {
75
+ Object ctx = _attachedContext;
76
+ Method create = _ctxCreateExternalPcm;
77
+ Method end = _tapNodeEndStream;
78
+ if (ctx == null || create == null) return;
79
+ Object replacement;
80
+ try {
81
+ replacement = create.invoke(ctx, sampleRate, channels);
82
+ } catch (Throwable t) {
83
+ android.util.Log.w("AudioHelper", "createExternalPcmSource reflection failed", t);
84
+ return;
85
+ }
86
+ if (replacement == null) return;
87
+ Object old = _tapSourceNode;
88
+ if (old != null && end != null) {
89
+ try { end.invoke(old); } catch (Throwable ignored) {}
90
+ }
91
+ _tapSourceNode = replacement;
92
+ _tapNodeSampleRate = sampleRate;
93
+ _tapNodeChannels = channels;
94
+ node = replacement;
95
+ }
96
+
97
+ float[] payload = interleaved;
98
+ if (interleaved.length != sampleCount) {
99
+ payload = new float[sampleCount];
100
+ System.arraycopy(interleaved, 0, payload, 0, sampleCount);
101
+ }
102
+ try {
103
+ _tapNodePushFrames.invoke(node, (Object) payload);
104
+ } catch (Throwable t) {
105
+ android.util.Log.w("AudioHelper", "pushFrames reflection failed", t);
106
+ }
107
+ }
108
+
109
+ @Override
110
+ public boolean isActive() {
111
+ return _tapSourceNode != null;
112
+ }
113
+ };
53
114
 
54
115
  public interface Callback {
55
116
  void onDurationChange(long duration);
@@ -69,9 +130,8 @@ public class AudioHelper implements Player.Listener {
69
130
 
70
131
  public AudioHelper(Context context, String cacheRoot) {
71
132
  File cacheDir = new File(cacheRoot, "MEDIA_PLAYER_CACHE");
72
- if (!cacheDir.exists()) {
73
- cacheDir.mkdirs();
74
- }
133
+ if (!cacheDir.exists()) { cacheDir.mkdirs(); }
134
+
75
135
 
76
136
  Looper looper1 = Looper.myLooper();
77
137
  if (looper1 == null) {
@@ -95,8 +155,23 @@ public class AudioHelper implements Player.Listener {
95
155
  _cdsf.setUpstreamDataSourceFactory(_dsf);
96
156
  _msf = new DefaultMediaSourceFactory(_cdsf);
97
157
 
158
+ _tapProcessor.setSink(_tapSink);
159
+ DefaultRenderersFactory rf = new DefaultRenderersFactory(context) {
160
+ @Override
161
+ protected AudioSink buildAudioSink(android.content.Context ctx,
162
+ boolean enableFloatOutput,
163
+ boolean enableAudioTrackPlaybackParams) {
164
+ return new DefaultAudioSink.Builder(ctx)
165
+ .setEnableFloatOutput(enableFloatOutput)
166
+ .setEnableAudioTrackPlaybackParams(enableAudioTrackPlaybackParams)
167
+ .setAudioProcessors(new AudioProcessor[]{ _tapProcessor })
168
+ .build();
169
+ }
170
+ };
171
+
98
172
  ExoPlayer.Builder builder = new ExoPlayer.Builder(context);
99
173
  builder.setMediaSourceFactory(_msf);
174
+ builder.setRenderersFactory(rf);
100
175
 
101
176
  DefaultLoadControl.Builder loadControl = new DefaultLoadControl.Builder();
102
177
  loadControl.setBufferDurationsMs(500, DefaultLoadControl.DEFAULT_MAX_BUFFER_MS, 500, 500);
@@ -221,6 +296,47 @@ public class AudioHelper implements Player.Listener {
221
296
  } catch (Exception e) { }
222
297
  }
223
298
 
299
+ public Object attachAudioContextTap(Object contextNative) {
300
+ if (contextNative == null) return null;
301
+ try {
302
+ Method create = contextNative.getClass()
303
+ .getMethod("createExternalPcmSource", int.class, int.class);
304
+ Object node = create.invoke(contextNative, 48000, 2);
305
+ if (node == null) return null;
306
+
307
+ Method push = node.getClass().getMethod("pushFrames", float[].class);
308
+ Method end = node.getClass().getMethod("endStream");
309
+
310
+ _attachedContext = contextNative;
311
+ _ctxCreateExternalPcm = create;
312
+ _tapSourceNode = node;
313
+ _tapNodePushFrames = push;
314
+ _tapNodeEndStream = end;
315
+ _tapNodeSampleRate = 48000;
316
+ _tapNodeChannels = 2;
317
+ return node;
318
+ } catch (NoSuchMethodException e) {
319
+ android.util.Log.w("AudioHelper", "attachAudioContextTap: contextNative missing expected surface", e);
320
+ return null;
321
+ } catch (Throwable t) {
322
+ android.util.Log.w("AudioHelper", "attachAudioContextTap failed", t);
323
+ return null;
324
+ }
325
+ }
326
+
327
+ public void detachAudioContextTap() {
328
+ Object node = _tapSourceNode;
329
+ Method end = _tapNodeEndStream;
330
+ _tapSourceNode = null;
331
+ _attachedContext = null;
332
+ _ctxCreateExternalPcm = null;
333
+ _tapNodePushFrames = null;
334
+ _tapNodeEndStream = null;
335
+ if (node != null && end != null) {
336
+ try { end.invoke(node); } catch (Throwable ignored) {}
337
+ }
338
+ }
339
+
224
340
  public void pause() {
225
341
  try {
226
342
  this._player.setPlayWhenReady(false);
@@ -228,6 +344,12 @@ public class AudioHelper implements Player.Listener {
228
344
  } catch (Exception e) { }
229
345
  }
230
346
 
347
+ public void release() {
348
+ try { detachAudioContextTap(); } catch (Throwable ignored) {}
349
+ try { if (_timer != null) { _timer.cancel(); _timer = null; } } catch (Throwable ignored) {}
350
+ try { if (_player != null) { _player.release(); } } catch (Throwable ignored) {}
351
+ }
352
+
231
353
  public boolean getMuted() {
232
354
  return this._player.getVolume() == 0f;
233
355
  }
@@ -637,7 +637,6 @@ public class VideoHelper implements Player.Listener, SurfaceTexture.OnFrameAvail
637
637
  }
638
638
 
639
639
  public android.graphics.Bitmap getCurrentBitmap() {
640
- // Lazily set up the ImageReader surface when dimensions are first known.
641
640
  if (_imageReader == null && _surfaceOwner == SurfaceOwner.NONE) {
642
641
  setupBitmapSurface();
643
642
  }
@@ -691,8 +690,6 @@ public class VideoHelper implements Player.Listener, SurfaceTexture.OnFrameAvail
691
690
  }
692
691
  }
693
692
 
694
- // Last-resort fallback: PlayerView's TextureView, only reachable when the
695
- // player IS in the window (createNativeView() was called and view is visible).
696
693
  View surfaceView = this._playerView.getVideoSurfaceView();
697
694
  if (surfaceView instanceof TextureView && ((TextureView) surfaceView).isAvailable()) {
698
695
  TextureView tv = (TextureView) surfaceView;