@nativescript/canvas-media 2.0.23 → 2.0.24
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 +35 -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 +123 -0
- 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,29 @@ 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 || typeof inst.attachAudioContextTap !== 'function') {
|
|
205
|
+
return null;
|
|
206
|
+
}
|
|
207
|
+
try {
|
|
208
|
+
return inst.attachAudioContextTap(contextNative);
|
|
209
|
+
}
|
|
210
|
+
catch (e) {
|
|
211
|
+
console.warn('Audio.attachAudioContextTap: native call failed:', e);
|
|
212
|
+
return null;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
detachAudioContextTap() {
|
|
216
|
+
const inst = this._instance;
|
|
217
|
+
if (!inst || typeof inst.detachAudioContextTap !== 'function')
|
|
218
|
+
return;
|
|
219
|
+
try {
|
|
220
|
+
inst.detachAudioContextTap();
|
|
221
|
+
}
|
|
222
|
+
catch (e) {
|
|
223
|
+
console.warn('Audio.detachAudioContextTap: native call failed:', e);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
221
226
|
}
|
|
222
227
|
//# 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);
|
|
@@ -95,8 +156,23 @@ public class AudioHelper implements Player.Listener {
|
|
|
95
156
|
_cdsf.setUpstreamDataSourceFactory(_dsf);
|
|
96
157
|
_msf = new DefaultMediaSourceFactory(_cdsf);
|
|
97
158
|
|
|
159
|
+
_tapProcessor.setSink(_tapSink);
|
|
160
|
+
DefaultRenderersFactory rf = new DefaultRenderersFactory(context) {
|
|
161
|
+
@Override
|
|
162
|
+
protected AudioSink buildAudioSink(android.content.Context ctx,
|
|
163
|
+
boolean enableFloatOutput,
|
|
164
|
+
boolean enableAudioTrackPlaybackParams) {
|
|
165
|
+
return new DefaultAudioSink.Builder(ctx)
|
|
166
|
+
.setEnableFloatOutput(enableFloatOutput)
|
|
167
|
+
.setEnableAudioTrackPlaybackParams(enableAudioTrackPlaybackParams)
|
|
168
|
+
.setAudioProcessors(new AudioProcessor[]{ _tapProcessor })
|
|
169
|
+
.build();
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
|
|
98
173
|
ExoPlayer.Builder builder = new ExoPlayer.Builder(context);
|
|
99
174
|
builder.setMediaSourceFactory(_msf);
|
|
175
|
+
builder.setRenderersFactory(rf);
|
|
100
176
|
|
|
101
177
|
DefaultLoadControl.Builder loadControl = new DefaultLoadControl.Builder();
|
|
102
178
|
loadControl.setBufferDurationsMs(500, DefaultLoadControl.DEFAULT_MAX_BUFFER_MS, 500, 500);
|
|
@@ -221,6 +297,47 @@ public class AudioHelper implements Player.Listener {
|
|
|
221
297
|
} catch (Exception e) { }
|
|
222
298
|
}
|
|
223
299
|
|
|
300
|
+
public Object attachAudioContextTap(Object contextNative) {
|
|
301
|
+
if (contextNative == null) return null;
|
|
302
|
+
try {
|
|
303
|
+
Method create = contextNative.getClass()
|
|
304
|
+
.getMethod("createExternalPcmSource", int.class, int.class);
|
|
305
|
+
Object node = create.invoke(contextNative, 48000, 2);
|
|
306
|
+
if (node == null) return null;
|
|
307
|
+
|
|
308
|
+
Method push = node.getClass().getMethod("pushFrames", float[].class);
|
|
309
|
+
Method end = node.getClass().getMethod("endStream");
|
|
310
|
+
|
|
311
|
+
_attachedContext = contextNative;
|
|
312
|
+
_ctxCreateExternalPcm = create;
|
|
313
|
+
_tapSourceNode = node;
|
|
314
|
+
_tapNodePushFrames = push;
|
|
315
|
+
_tapNodeEndStream = end;
|
|
316
|
+
_tapNodeSampleRate = 48000;
|
|
317
|
+
_tapNodeChannels = 2;
|
|
318
|
+
return node;
|
|
319
|
+
} catch (NoSuchMethodException e) {
|
|
320
|
+
android.util.Log.w("AudioHelper", "attachAudioContextTap: contextNative missing expected surface", e);
|
|
321
|
+
return null;
|
|
322
|
+
} catch (Throwable t) {
|
|
323
|
+
android.util.Log.w("AudioHelper", "attachAudioContextTap failed", t);
|
|
324
|
+
return null;
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
public void detachAudioContextTap() {
|
|
329
|
+
Object node = _tapSourceNode;
|
|
330
|
+
Method end = _tapNodeEndStream;
|
|
331
|
+
_tapSourceNode = null;
|
|
332
|
+
_attachedContext = null;
|
|
333
|
+
_ctxCreateExternalPcm = null;
|
|
334
|
+
_tapNodePushFrames = null;
|
|
335
|
+
_tapNodeEndStream = null;
|
|
336
|
+
if (node != null && end != null) {
|
|
337
|
+
try { end.invoke(node); } catch (Throwable ignored) {}
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
|
|
224
341
|
public void pause() {
|
|
225
342
|
try {
|
|
226
343
|
this._player.setPlayWhenReady(false);
|
|
@@ -228,6 +345,12 @@ public class AudioHelper implements Player.Listener {
|
|
|
228
345
|
} catch (Exception e) { }
|
|
229
346
|
}
|
|
230
347
|
|
|
348
|
+
public void release() {
|
|
349
|
+
try { detachAudioContextTap(); } catch (Throwable ignored) {}
|
|
350
|
+
try { if (_timer != null) { _timer.cancel(); _timer = null; } } catch (Throwable ignored) {}
|
|
351
|
+
try { if (_player != null) { _player.release(); } } catch (Throwable ignored) {}
|
|
352
|
+
}
|
|
353
|
+
|
|
231
354
|
public boolean getMuted() {
|
|
232
355
|
return this._player.getVolume() == 0f;
|
|
233
356
|
}
|
|
@@ -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;
|