appium-xcuitest-driver 12.18.3 → 12.19.0
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/CHANGELOG.md +11 -0
- package/build/lib/commands/recordscreen.d.ts +1 -0
- package/build/lib/commands/recordscreen.d.ts.map +1 -1
- package/build/lib/commands/recordscreen.js +65 -13
- package/build/lib/commands/recordscreen.js.map +1 -1
- package/build/lib/commands/screenshots.d.ts.map +1 -1
- package/build/lib/commands/screenshots.js +12 -11
- package/build/lib/commands/screenshots.js.map +1 -1
- package/lib/commands/recordscreen.ts +67 -13
- package/lib/commands/screenshots.ts +13 -11
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,14 @@
|
|
|
1
|
+
## [12.19.0](https://github.com/appium/appium-xcuitest-driver/compare/v12.18.3...v12.19.0) (2026-10-18)
|
|
2
|
+
|
|
3
|
+
### Features
|
|
4
|
+
|
|
5
|
+
* capture selected simulator displays through CoreSim fallback ([#3030](https://github.com/appium/appium-xcuitest-driver/issues/3030)) ([80b341c](https://github.com/appium/appium-xcuitest-driver/commit/80b341c929b26a3ac278089a5fd1c3af8ca9a943))
|
|
6
|
+
|
|
7
|
+
### Bug Fixes
|
|
8
|
+
|
|
9
|
+
* preserve recording padding when MJPEG frame geometry changes ([#3048](https://github.com/appium/appium-xcuitest-driver/issues/3048)) ([c860f30](https://github.com/appium/appium-xcuitest-driver/commit/c860f308b23c29e33d2bfa37773e691045c15c4c))
|
|
10
|
+
* retain and clean up screen recorder after stop failure ([#3049](https://github.com/appium/appium-xcuitest-driver/issues/3049)) ([a4b262a](https://github.com/appium/appium-xcuitest-driver/commit/a4b262a642da4e5f9a6a83a99959bdba9f7dce8c))
|
|
11
|
+
|
|
1
12
|
## [12.18.3](https://github.com/appium/appium-xcuitest-driver/compare/v12.18.2...v12.18.3) (2026-10-18)
|
|
2
13
|
|
|
3
14
|
### Bug Fixes
|
|
@@ -27,6 +27,7 @@ export declare class ScreenRecorder {
|
|
|
27
27
|
private readonly udid;
|
|
28
28
|
private mainProcess;
|
|
29
29
|
private timeoutHandler;
|
|
30
|
+
private stopFailed;
|
|
30
31
|
constructor(udid: string, log: any, videoPath: string, opts: ScreenRecorderOptions);
|
|
31
32
|
start(timeoutMs: number): Promise<void>;
|
|
32
33
|
interrupt(force?: boolean): Promise<boolean>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recordscreen.d.ts","sourceRoot":"","sources":["../../../lib/commands/recordscreen.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,cAAc,CAAC;AAEjD,OAAO,KAAK,EAAC,2BAA2B,EAAE,0BAA0B,EAAC,MAAM,YAAY,CAAC;AAExF;;;GAGG;AACH,eAAO,MAAM,wCAAwC,wOAiBgB,CAAC;AAEtE;;;GAGG;AACH,eAAO,MAAM,uCAAuC,6FAQgB,CAAC;AAuErE,UAAU,qBAAqB;IAC7B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAM;IAC1B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAwB;IAC7C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,WAAW,CAAoB;IACvC,OAAO,CAAC,cAAc,CAAwB;
|
|
1
|
+
{"version":3,"file":"recordscreen.d.ts","sourceRoot":"","sources":["../../../lib/commands/recordscreen.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,cAAc,CAAC;AAEjD,OAAO,KAAK,EAAC,2BAA2B,EAAE,0BAA0B,EAAC,MAAM,YAAY,CAAC;AAExF;;;GAGG;AACH,eAAO,MAAM,wCAAwC,wOAiBgB,CAAC;AAEtE;;;GAGG;AACH,eAAO,MAAM,uCAAuC,6FAQgB,CAAC;AAuErE,UAAU,qBAAqB;IAC7B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAM;IAC1B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAwB;IAC7C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,WAAW,CAAoB;IACvC,OAAO,CAAC,cAAc,CAAwB;IAC9C,OAAO,CAAC,UAAU,CAAS;gBAEf,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,qBAAqB;IAS5E,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA8IvC,SAAS,CAAC,KAAK,UAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAsC1C,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IAQzB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAK/B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,cAAc,EACpB,OAAO,GAAE,2BAAgC,GACxC,OAAO,CAAC,MAAM,CAAC,CAkGjB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,cAAc,EACpB,OAAO,GAAE,0BAA+B,GACvC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAmBxB;AAED;;;;GAIG;AACH,wBAAsB,0BAA0B,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAM1G;AAED;;;GAGG;AACH,wBAAsB,yBAAyB,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAMhH"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { WDA_BASE_URL } from 'appium-webdriveragent';
|
|
2
2
|
import { fs, tempDir, logger, util } from 'appium/support.js';
|
|
3
3
|
import { waitForCondition } from 'asyncbox';
|
|
4
|
-
import { SubProcess } from 'teen_process';
|
|
4
|
+
import { exec, SubProcess } from 'teen_process';
|
|
5
5
|
import { encodeBase64OrUpload } from './helpers/index.js';
|
|
6
6
|
/**
|
|
7
7
|
* Optional execute-script keys for `mobile: startScreenRecording`, in Appium flattened-arg order.
|
|
@@ -103,6 +103,7 @@ export class ScreenRecorder {
|
|
|
103
103
|
udid;
|
|
104
104
|
mainProcess;
|
|
105
105
|
timeoutHandler;
|
|
106
|
+
stopFailed = false;
|
|
106
107
|
constructor(udid, log, videoPath, opts) {
|
|
107
108
|
this.videoPath = videoPath;
|
|
108
109
|
this.log = log;
|
|
@@ -143,19 +144,51 @@ export class ScreenRecorder {
|
|
|
143
144
|
// Raw MJPEG has no timestamps; override ffmpeg's 25 fps default for every codec.
|
|
144
145
|
args.push('-r', String(videoFps || DEFAULT_FPS));
|
|
145
146
|
const useAutomaticCanvas = !videoFilters && !videoScale && !hardwareAcceleration;
|
|
147
|
+
const parsed = new URL(remoteUrl);
|
|
148
|
+
const streamUrl = `${parsed.protocol}//${parsed.hostname}:${remotePort}`;
|
|
149
|
+
let canvas;
|
|
146
150
|
if (useAutomaticCanvas) {
|
|
147
|
-
//
|
|
148
|
-
//
|
|
151
|
+
// pad must recalculate its offsets when frames change size, but its canvas
|
|
152
|
+
// must remain fixed. Probe with ffmpeg itself to support raw and multipart
|
|
153
|
+
// MJPEG without requiring ffprobe or an optional image library.
|
|
154
|
+
const { stdout } = await exec(FFMPEG_BINARY, [
|
|
155
|
+
'-v',
|
|
156
|
+
'error',
|
|
157
|
+
'-f',
|
|
158
|
+
'mjpeg',
|
|
159
|
+
'-probesize',
|
|
160
|
+
'32',
|
|
161
|
+
'-analyzeduration',
|
|
162
|
+
'0',
|
|
163
|
+
'-i',
|
|
164
|
+
streamUrl,
|
|
165
|
+
'-frames:v',
|
|
166
|
+
'1',
|
|
167
|
+
'-c:v',
|
|
168
|
+
'png',
|
|
169
|
+
'-f',
|
|
170
|
+
'image2pipe',
|
|
171
|
+
'pipe:1',
|
|
172
|
+
], { isBuffer: true, timeout: Math.min(timeoutMs, 10000), maxStdoutBufferSize: 32 * 1024 * 1024 });
|
|
173
|
+
if (stdout.length < 24 || !stdout.subarray(0, 8).equals(Buffer.from([137, 80, 78, 71, 13, 10, 26, 10]))) {
|
|
174
|
+
throw new Error('Cannot determine the recording canvas from the first MJPEG frame');
|
|
175
|
+
}
|
|
176
|
+
canvas = {
|
|
177
|
+
width: Math.ceil(stdout.readUInt32BE(16) / 2) * 2,
|
|
178
|
+
height: Math.ceil(stdout.readUInt32BE(20) / 2) * 2,
|
|
179
|
+
};
|
|
180
|
+
if (!canvas.width || !canvas.height) {
|
|
181
|
+
throw new Error('The first MJPEG frame has invalid dimensions');
|
|
182
|
+
}
|
|
149
183
|
args.push('-reinit_filter', '0');
|
|
150
184
|
}
|
|
151
|
-
|
|
152
|
-
args.push('-i', `${parsed.protocol}//${parsed.hostname}:${remotePort}`);
|
|
185
|
+
args.push('-i', streamUrl);
|
|
153
186
|
if (videoFilters || videoScale) {
|
|
154
187
|
args.push('-vf', videoFilters || `${scaleFilterHWAccel || 'scale'}=${videoScale}`);
|
|
155
188
|
}
|
|
156
|
-
else if (
|
|
157
|
-
args.push('-vf',
|
|
158
|
-
|
|
189
|
+
else if (canvas) {
|
|
190
|
+
args.push('-vf', `scale=${canvas.width}:${canvas.height}:force_original_aspect_ratio=decrease:force_divisible_by=2:eval=frame,` +
|
|
191
|
+
`pad=${canvas.width}:${canvas.height}:(ow-iw)/2:(oh-ih)/2:eval=frame,setsar=1`);
|
|
159
192
|
}
|
|
160
193
|
// Quicktime compatibility via pixelFormat: 'yuv420p'
|
|
161
194
|
if (pixelFormat) {
|
|
@@ -204,21 +237,40 @@ export class ScreenRecorder {
|
|
|
204
237
|
clearTimeout(this.timeoutHandler);
|
|
205
238
|
this.timeoutHandler = null;
|
|
206
239
|
}
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
this.mainProcess = null;
|
|
240
|
+
const process = this.mainProcess;
|
|
241
|
+
if (process?.isRunning) {
|
|
210
242
|
try {
|
|
211
|
-
await
|
|
243
|
+
await process.stop(force ? 'SIGTERM' : 'SIGINT');
|
|
212
244
|
}
|
|
213
245
|
catch (e) {
|
|
246
|
+
// A disconnected MJPEG source can leave ffmpeg waiting to reconnect. Keep
|
|
247
|
+
// its handle so cleanup can retry; its MP4 trailer may not be written.
|
|
248
|
+
this.stopFailed = true;
|
|
214
249
|
this.log.warn(`Cannot ${force ? 'terminate' : 'interrupt'} ${FFMPEG_BINARY}. ` + `Original error: ${e.message}`);
|
|
215
250
|
result = false;
|
|
251
|
+
if (force && process.isRunning) {
|
|
252
|
+
try {
|
|
253
|
+
await process.stop('SIGKILL');
|
|
254
|
+
result = true;
|
|
255
|
+
}
|
|
256
|
+
catch (killError) {
|
|
257
|
+
this.log.warn(`Cannot kill ${FFMPEG_BINARY}. Original error: ${killError.message}`);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
finally {
|
|
262
|
+
if (!process.isRunning && this.mainProcess === process) {
|
|
263
|
+
this.mainProcess = null;
|
|
264
|
+
}
|
|
216
265
|
}
|
|
217
266
|
}
|
|
218
267
|
return result;
|
|
219
268
|
}
|
|
220
269
|
async finish() {
|
|
221
|
-
await this.interrupt();
|
|
270
|
+
const stopped = await this.interrupt();
|
|
271
|
+
if (!stopped || this.stopFailed) {
|
|
272
|
+
throw new Error(`Cannot finalize the screen recording because ${FFMPEG_BINARY} failed to stop gracefully`);
|
|
273
|
+
}
|
|
222
274
|
return this.videoPath;
|
|
223
275
|
}
|
|
224
276
|
async cleanup() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recordscreen.js","sourceRoot":"","sources":["../../../lib/commands/recordscreen.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"recordscreen.js","sourceRoot":"","sources":["../../../lib/commands/recordscreen.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screenshots.d.ts","sourceRoot":"","sources":["../../../lib/commands/screenshots.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,eAAe,CAAC;AAM3C,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,cAAc,CAAC;AAGjD;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"screenshots.d.ts","sourceRoot":"","sources":["../../../lib/commands/screenshots.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,eAAe,CAAC;AAM3C,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,cAAc,CAAC;AAGjD;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAyEzE;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,cAAc,EAAE,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAa9G;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAiCjF"}
|
|
@@ -32,16 +32,11 @@ export async function getScreenshot() {
|
|
|
32
32
|
}
|
|
33
33
|
return data;
|
|
34
34
|
};
|
|
35
|
-
// The current MJPEG stream and simulator fallback do not select a display.
|
|
36
|
-
// CoreSim supports display selection, but requires a display port UUID rather
|
|
37
|
-
// than WDA's numeric display ID. Use WDA until that mapping is implemented.
|
|
38
35
|
const { currentDisplayId } = await this.settings.getSettings();
|
|
39
|
-
|
|
40
|
-
return await getScreenshotFromWDA();
|
|
41
|
-
}
|
|
36
|
+
const hasSelectedDisplay = currentDisplayId !== undefined && currentDisplayId !== null;
|
|
42
37
|
// Frames carry no display identity. Once selection changes, even resetting to
|
|
43
38
|
// the main display cannot safely reuse this stream (old frames may be queued).
|
|
44
|
-
if (this.mjpegStream && !this._hasUpdatedDisplaySelection) {
|
|
39
|
+
if (this.mjpegStream && !hasSelectedDisplay && !this._hasUpdatedDisplaySelection) {
|
|
45
40
|
this.log.info(`mjpeg video stream provided, returning latest frame as screenshot`);
|
|
46
41
|
// Preserve legacy conversion unless orientation correction was explicitly enabled.
|
|
47
42
|
const fixOrientation = this.settings.getSettings().mjpegFixOrientation === true;
|
|
@@ -52,22 +47,28 @@ export async function getScreenshot() {
|
|
|
52
47
|
this.log.warn('Tried to get screenshot from active MJPEG stream, but there ' +
|
|
53
48
|
'was no data yet. Falling back to regular screenshot methods.');
|
|
54
49
|
}
|
|
50
|
+
let wdaError;
|
|
55
51
|
try {
|
|
56
52
|
return await getScreenshotFromWDA();
|
|
57
53
|
}
|
|
58
54
|
catch (err) {
|
|
55
|
+
wdaError = err;
|
|
59
56
|
this.log.warn(`Error getting screenshot: ${err.message}`);
|
|
60
57
|
}
|
|
61
|
-
// simulator attempt
|
|
62
58
|
if (this.isSimulator()) {
|
|
63
|
-
this.log.info(
|
|
64
|
-
const payload = await this.device.getScreenshot(
|
|
59
|
+
this.log.info('Falling back to CoreSimulator screenshot capture');
|
|
60
|
+
const payload = await this.device.getScreenshot({
|
|
61
|
+
displayId: currentDisplayId ?? undefined,
|
|
62
|
+
});
|
|
65
63
|
if (!payload || payload.length === 0) {
|
|
66
64
|
throw new errors.UnableToCaptureScreen();
|
|
67
65
|
}
|
|
68
66
|
return payload.toString('base64');
|
|
69
67
|
}
|
|
70
|
-
|
|
68
|
+
if (hasSelectedDisplay) {
|
|
69
|
+
throw wdaError;
|
|
70
|
+
}
|
|
71
|
+
// Retry for real devices only.
|
|
71
72
|
return (await retryInterval(2, 1000, getScreenshotFromWDA));
|
|
72
73
|
}
|
|
73
74
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screenshots.js","sourceRoot":"","sources":["../../../lib/commands/screenshots.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,MAAM,EAAC,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAC,IAAI,EAAC,MAAM,mBAAmB,CAAC;AACvC,OAAO,EAAC,aAAa,EAAC,MAAM,UAAU,CAAC;AAGvC,OAAO,EAAC,UAAU,EAAE,eAAe,EAAE,YAAY,EAAC,MAAM,mBAAmB,CAAC;AAE5E;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;QACxB,MAAM,iBAAiB,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,iBAAiB,CAAC;QAChF,QAAQ,MAAM,CAAC,iBAAiB,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;YAChD,KAAK,MAAM,CAAC;YACZ,KAAK,UAAU;gBACb,OAAO,MAAM,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAwB,CAAC,CAAC;YAClH,KAAK,QAAQ,CAAC;YACd,KAAK,SAAS,CAAC;YACf,KAAK,IAAI;gBACP,MAAM;YACR;gBACE,IAAI,CAAC,GAAG,CAAC,IAAI,CACX,wCAAwC,iBAAiB,kBAAkB;oBACzE,mFAAmF,CACtF,CAAC;gBACF,MAAM;QACV,CAAC;IACH,CAAC;IAED,MAAM,oBAAoB,GAAG,KAAK,IAAqB,EAAE;QACvD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAC7C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;QAC3D,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,4CAA4C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvF,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,
|
|
1
|
+
{"version":3,"file":"screenshots.js","sourceRoot":"","sources":["../../../lib/commands/screenshots.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import {WDA_BASE_URL} from 'appium-webdriveragent';
|
|
|
2
2
|
import type {WDASettings} from 'appium-webdriveragent';
|
|
3
3
|
import {fs, tempDir, logger, util} from 'appium/support.js';
|
|
4
4
|
import {waitForCondition} from 'asyncbox';
|
|
5
|
-
import {SubProcess} from 'teen_process';
|
|
5
|
+
import {exec, SubProcess} from 'teen_process';
|
|
6
6
|
|
|
7
7
|
import type {XCUITestDriver} from '../driver.js';
|
|
8
8
|
import {encodeBase64OrUpload} from './helpers/index.js';
|
|
@@ -132,6 +132,7 @@ export class ScreenRecorder {
|
|
|
132
132
|
private readonly udid: string;
|
|
133
133
|
private mainProcess: SubProcess | null;
|
|
134
134
|
private timeoutHandler: NodeJS.Timeout | null;
|
|
135
|
+
private stopFailed = false;
|
|
135
136
|
|
|
136
137
|
constructor(udid: string, log: any, videoPath: string, opts: ScreenRecorderOptions) {
|
|
137
138
|
this.videoPath = videoPath;
|
|
@@ -182,21 +183,57 @@ export class ScreenRecorder {
|
|
|
182
183
|
// Raw MJPEG has no timestamps; override ffmpeg's 25 fps default for every codec.
|
|
183
184
|
args.push('-r', String(videoFps || DEFAULT_FPS));
|
|
184
185
|
const useAutomaticCanvas = !videoFilters && !videoScale && !hardwareAcceleration;
|
|
186
|
+
const parsed = new URL(remoteUrl);
|
|
187
|
+
const streamUrl = `${parsed.protocol}//${parsed.hostname}:${remotePort}`;
|
|
188
|
+
let canvas: {width: number; height: number} | undefined;
|
|
185
189
|
if (useAutomaticCanvas) {
|
|
186
|
-
//
|
|
187
|
-
//
|
|
190
|
+
// pad must recalculate its offsets when frames change size, but its canvas
|
|
191
|
+
// must remain fixed. Probe with ffmpeg itself to support raw and multipart
|
|
192
|
+
// MJPEG without requiring ffprobe or an optional image library.
|
|
193
|
+
const {stdout} = await exec(
|
|
194
|
+
FFMPEG_BINARY,
|
|
195
|
+
[
|
|
196
|
+
'-v',
|
|
197
|
+
'error',
|
|
198
|
+
'-f',
|
|
199
|
+
'mjpeg',
|
|
200
|
+
'-probesize',
|
|
201
|
+
'32',
|
|
202
|
+
'-analyzeduration',
|
|
203
|
+
'0',
|
|
204
|
+
'-i',
|
|
205
|
+
streamUrl,
|
|
206
|
+
'-frames:v',
|
|
207
|
+
'1',
|
|
208
|
+
'-c:v',
|
|
209
|
+
'png',
|
|
210
|
+
'-f',
|
|
211
|
+
'image2pipe',
|
|
212
|
+
'pipe:1',
|
|
213
|
+
],
|
|
214
|
+
{isBuffer: true, timeout: Math.min(timeoutMs, 10000), maxStdoutBufferSize: 32 * 1024 * 1024},
|
|
215
|
+
);
|
|
216
|
+
if (stdout.length < 24 || !stdout.subarray(0, 8).equals(Buffer.from([137, 80, 78, 71, 13, 10, 26, 10]))) {
|
|
217
|
+
throw new Error('Cannot determine the recording canvas from the first MJPEG frame');
|
|
218
|
+
}
|
|
219
|
+
canvas = {
|
|
220
|
+
width: Math.ceil(stdout.readUInt32BE(16) / 2) * 2,
|
|
221
|
+
height: Math.ceil(stdout.readUInt32BE(20) / 2) * 2,
|
|
222
|
+
};
|
|
223
|
+
if (!canvas.width || !canvas.height) {
|
|
224
|
+
throw new Error('The first MJPEG frame has invalid dimensions');
|
|
225
|
+
}
|
|
188
226
|
args.push('-reinit_filter', '0');
|
|
189
227
|
}
|
|
190
|
-
|
|
191
|
-
args.push('-i', `${parsed.protocol}//${parsed.hostname}:${remotePort}`);
|
|
228
|
+
args.push('-i', streamUrl);
|
|
192
229
|
|
|
193
230
|
if (videoFilters || videoScale) {
|
|
194
231
|
args.push('-vf', videoFilters || `${scaleFilterHWAccel || 'scale'}=${videoScale}`);
|
|
195
|
-
} else if (
|
|
232
|
+
} else if (canvas) {
|
|
196
233
|
args.push(
|
|
197
234
|
'-vf',
|
|
198
|
-
|
|
199
|
-
|
|
235
|
+
`scale=${canvas.width}:${canvas.height}:force_original_aspect_ratio=decrease:force_divisible_by=2:eval=frame,` +
|
|
236
|
+
`pad=${canvas.width}:${canvas.height}:(ow-iw)/2:(oh-ih)/2:eval=frame,setsar=1`,
|
|
200
237
|
);
|
|
201
238
|
}
|
|
202
239
|
|
|
@@ -256,16 +293,30 @@ export class ScreenRecorder {
|
|
|
256
293
|
this.timeoutHandler = null;
|
|
257
294
|
}
|
|
258
295
|
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
this.mainProcess = null;
|
|
296
|
+
const process = this.mainProcess;
|
|
297
|
+
if (process?.isRunning) {
|
|
262
298
|
try {
|
|
263
|
-
await
|
|
299
|
+
await process.stop(force ? 'SIGTERM' : 'SIGINT');
|
|
264
300
|
} catch (e: any) {
|
|
301
|
+
// A disconnected MJPEG source can leave ffmpeg waiting to reconnect. Keep
|
|
302
|
+
// its handle so cleanup can retry; its MP4 trailer may not be written.
|
|
303
|
+
this.stopFailed = true;
|
|
265
304
|
this.log.warn(
|
|
266
305
|
`Cannot ${force ? 'terminate' : 'interrupt'} ${FFMPEG_BINARY}. ` + `Original error: ${e.message}`,
|
|
267
306
|
);
|
|
268
307
|
result = false;
|
|
308
|
+
if (force && process.isRunning) {
|
|
309
|
+
try {
|
|
310
|
+
await process.stop('SIGKILL');
|
|
311
|
+
result = true;
|
|
312
|
+
} catch (killError: any) {
|
|
313
|
+
this.log.warn(`Cannot kill ${FFMPEG_BINARY}. Original error: ${killError.message}`);
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
} finally {
|
|
317
|
+
if (!process.isRunning && this.mainProcess === process) {
|
|
318
|
+
this.mainProcess = null;
|
|
319
|
+
}
|
|
269
320
|
}
|
|
270
321
|
}
|
|
271
322
|
|
|
@@ -273,7 +324,10 @@ export class ScreenRecorder {
|
|
|
273
324
|
}
|
|
274
325
|
|
|
275
326
|
async finish(): Promise<string> {
|
|
276
|
-
await this.interrupt();
|
|
327
|
+
const stopped = await this.interrupt();
|
|
328
|
+
if (!stopped || this.stopFailed) {
|
|
329
|
+
throw new Error(`Cannot finalize the screen recording because ${FFMPEG_BINARY} failed to stop gracefully`);
|
|
330
|
+
}
|
|
277
331
|
return this.videoPath;
|
|
278
332
|
}
|
|
279
333
|
|
|
@@ -41,17 +41,12 @@ export async function getScreenshot(this: XCUITestDriver): Promise<string> {
|
|
|
41
41
|
return data;
|
|
42
42
|
};
|
|
43
43
|
|
|
44
|
-
// The current MJPEG stream and simulator fallback do not select a display.
|
|
45
|
-
// CoreSim supports display selection, but requires a display port UUID rather
|
|
46
|
-
// than WDA's numeric display ID. Use WDA until that mapping is implemented.
|
|
47
44
|
const {currentDisplayId} = await this.settings.getSettings();
|
|
48
|
-
|
|
49
|
-
return await getScreenshotFromWDA();
|
|
50
|
-
}
|
|
45
|
+
const hasSelectedDisplay = currentDisplayId !== undefined && currentDisplayId !== null;
|
|
51
46
|
|
|
52
47
|
// Frames carry no display identity. Once selection changes, even resetting to
|
|
53
48
|
// the main display cannot safely reuse this stream (old frames may be queued).
|
|
54
|
-
if (this.mjpegStream && !this._hasUpdatedDisplaySelection) {
|
|
49
|
+
if (this.mjpegStream && !hasSelectedDisplay && !this._hasUpdatedDisplaySelection) {
|
|
55
50
|
this.log.info(`mjpeg video stream provided, returning latest frame as screenshot`);
|
|
56
51
|
// Preserve legacy conversion unless orientation correction was explicitly enabled.
|
|
57
52
|
const fixOrientation = this.settings.getSettings().mjpegFixOrientation === true;
|
|
@@ -65,23 +60,30 @@ export async function getScreenshot(this: XCUITestDriver): Promise<string> {
|
|
|
65
60
|
);
|
|
66
61
|
}
|
|
67
62
|
|
|
63
|
+
let wdaError: unknown;
|
|
68
64
|
try {
|
|
69
65
|
return await getScreenshotFromWDA();
|
|
70
66
|
} catch (err: any) {
|
|
67
|
+
wdaError = err;
|
|
71
68
|
this.log.warn(`Error getting screenshot: ${err.message}`);
|
|
72
69
|
}
|
|
73
70
|
|
|
74
|
-
// simulator attempt
|
|
75
71
|
if (this.isSimulator()) {
|
|
76
|
-
this.log.info(
|
|
77
|
-
const payload = await (this.device as Simulator).getScreenshot(
|
|
72
|
+
this.log.info('Falling back to CoreSimulator screenshot capture');
|
|
73
|
+
const payload = await (this.device as Simulator).getScreenshot({
|
|
74
|
+
displayId: currentDisplayId ?? undefined,
|
|
75
|
+
});
|
|
78
76
|
if (!payload || payload.length === 0) {
|
|
79
77
|
throw new errors.UnableToCaptureScreen();
|
|
80
78
|
}
|
|
81
79
|
return payload.toString('base64');
|
|
82
80
|
}
|
|
83
81
|
|
|
84
|
-
|
|
82
|
+
if (hasSelectedDisplay) {
|
|
83
|
+
throw wdaError;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// Retry for real devices only.
|
|
85
87
|
return (await retryInterval(2, 1000, getScreenshotFromWDA)) as string;
|
|
86
88
|
}
|
|
87
89
|
|