@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.
- package/audio/index.android.d.ts +2 -0
- package/audio/index.android.js +33 -30
- package/audio/index.android.js.map +1 -1
- package/audio/index.ios.d.ts +3 -0
- package/audio/index.ios.js +24 -0
- package/audio/index.ios.js.map +1 -1
- package/package.json +1 -1
- package/platforms/android/canvas_media.aar +0 -0
- package/platforms/android/java/org/nativescript/canvas/media/AudioContextTapProcessor.java +140 -0
- package/platforms/android/java/org/nativescript/canvas/media/AudioHelper.java +125 -3
- package/platforms/android/java/org/nativescript/canvas/media/VideoHelper.java +0 -3
package/audio/index.android.d.ts
CHANGED
package/audio/index.android.js
CHANGED
|
@@ -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
|
-
|
|
130
|
-
|
|
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
|
-
|
|
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
|
-
|
|
149
|
-
this._instance.setCurrentTime(value);
|
|
150
|
-
}
|
|
151
|
-
catch (e) { }
|
|
140
|
+
this._instance.setCurrentTime(value);
|
|
152
141
|
}
|
|
153
142
|
get src() {
|
|
154
|
-
|
|
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
|
-
|
|
163
|
-
|
|
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
|
-
|
|
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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"}
|
package/audio/index.ios.d.ts
CHANGED
package/audio/index.ios.js
CHANGED
|
@@ -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
|
package/audio/index.ios.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.ios.js","sourceRoot":"","sources":["../../../../packages/canvas-media/audio/index.ios.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAgB,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AACpH,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;;;;;IAArC,CAAC;;;;;;IASG,CAAC;;;;;;;;;;gBAc5C,CAAC;;YAEc,CAAC;QAChB,CAAC;IAAO,CAAC;;;;;;QAW8B,CAAC;IAE5C,CAAC;;;;;;;;QAeW,CAAC;IAAS,CAAC;;;;;QAYR,CAAC;IAAU,CAAC;;;;;QAOd,CAAC;IAAS,CAAC;;;;;;AAYW,CAAC;AAnBrC,MAAM,OAAO,KAAM,SAAQ,SAAS;IAWnC,MAAM,CAAC,gBAAgB;QACtB,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;QAC1B,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;QACvB,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC;QAClB,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC;QAClB,OAAO,KAAK,CAAC;IACd,CAAC;IAEM,SAAS,CAAC,gBAAwB,EAAE,iBAAyB;QACnE,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;QACpC,IAAI,UAAU,EAAE,CAAC;YAChB,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACnG,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAEnG,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC1C,CAAC;IACF,CAAC;IAED;QACC,KAAK,EAAE,CAAC;QA5BT,gBAAW,GAAa,EAAE,CAAC;QAG3B,iBAAY,GAAyB,IAAI,CAAC;QAC1C,iBAAY,GAAwB,IAAI,CAAC;QACzC,gBAAW,GAAiC,IAAI,CAAC;QAEjD,cAAS,GAAY,KAAK,CAAC;
|
|
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
|
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
|
-
|
|
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;
|