@aiscene/aiserver 1.6.1 → 1.6.2

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.
@@ -1,20 +1,49 @@
1
1
  /**
2
2
  * Scrcpy preview service for AIServer
3
3
  *
4
- * 仿照 midscene/packages/android-playground/src/scrcpy-server.ts 实现,
5
- * 通过 socket.io 提供稳定的 Android 投屏服务。
4
+ * 基于原生 ws (WebSocket) 协议实现 Android 投屏服务。
6
5
  *
7
- * 前端约定(与 nethp-docs-static 对齐):
8
- * - 连接后 emit 'connect-device' { deviceId?, maxSize? }
9
- * - 服务端推送:
10
- * 'devices-list' { devices, currentDeviceId }
11
- * 'preview-status' { phase, message }
12
- * 'video-metadata' { codec, width, height }
13
- * 'video-data' { data: Uint8Array, type: 'configuration'|'data', keyFrame, timestamp }
14
- * 'control-ready'
15
- * 'error' { message }
16
- * 'device-switched' { deviceId }
17
- * 'global-device-switched' { deviceId, timestamp }
6
+ * ============================================================
7
+ * 协议约定(前端必须按此对齐)
8
+ * ============================================================
9
+ * 1) 文本帧(JSON):
10
+ * {
11
+ * "event": "<eventName>",
12
+ * "data": <payload?>
13
+ * }
14
+ *
15
+ * 2) 二进制帧(视频流,避免 base64/JSON 体积膨胀):
16
+ * [1 byte header][8 bytes BE timestamp ms][N bytes H264/H265]
17
+ * header bits:
18
+ * bit0 (0x01) = isKeyFrame
19
+ * bit1 (0x02) = isConfiguration (SPS/PPS)
20
+ *
21
+ * 客户端 → 服务端(文本帧 event 名):
22
+ * - get-devices
23
+ * - switch-device data: deviceId (string)
24
+ * - connect-device data: { deviceId?, maxSize?, videoBitRate? }
25
+ * - control-touch data: { action, x, y, normalized?, pointerId?, pressure? }
26
+ * - control-key data: { keycode, action?: 'down'|'up'|'press', repeat?, metaState? }
27
+ * - control-text data: { text } | string
28
+ * - control-back data: -
29
+ * - control-home data: -
30
+ * - control-app-switch data: -
31
+ * - control-set-clipboard data: { text, paste? }
32
+ * - control-scroll data: { x?, y?, scrollX?, scrollY?, normalized? }
33
+ * - control-back-or-screen-on data: -
34
+ * - control-rotate data: -
35
+ * - control-reset-video data: -
36
+ * - control-screen-power data: { mode: 'normal'|'off' }
37
+ *
38
+ * 服务端 → 客户端(文本帧 event 名):
39
+ * - devices-list data: { devices, currentDeviceId }
40
+ * - preview-status data: { phase, message }
41
+ * - video-metadata data: { codec, width, height }
42
+ * - control-ready data: -
43
+ * - error data: { message }
44
+ * - device-switched data: { deviceId }
45
+ * - global-device-switched data: { deviceId, timestamp }
46
+ * (video-data 走二进制帧,不走 JSON)
18
47
  */
19
48
  import type { ScrcpyConfig } from '../config/schema.js';
20
49
  export interface ScrcpyConnectDeviceRequest {
@@ -28,9 +57,8 @@ export interface ScrcpyListedDevice {
28
57
  status: string;
29
58
  }
30
59
  export declare class ScrcpyServer {
31
- private app;
32
60
  private httpServer;
33
- private io;
61
+ private wss;
34
62
  private config;
35
63
  private adbClient;
36
64
  private currentDeviceId;
@@ -38,14 +66,19 @@ export declare class ScrcpyServer {
38
66
  private lastDeviceListJson;
39
67
  private serverBinPath;
40
68
  private started;
69
+ /** 所有活动 session(按 ws 索引),用于广播 */
70
+ private sessions;
41
71
  constructor(config: ScrcpyConfig);
42
- private setupApiRoutes;
72
+ private handleHttpRequest;
43
73
  private getAdbClient;
44
74
  private getDevicesList;
45
75
  private getAdb;
46
76
  private startScrcpy;
77
+ private broadcastJson;
47
78
  private broadcastDevicesList;
48
- private setupSocketHandlers;
79
+ private setupWebSocketHandlers;
80
+ private sendDevicesListTo;
81
+ private attachSocketHandlers;
49
82
  private startDeviceMonitoring;
50
83
  start(): Promise<void>;
51
84
  close(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/scrcpy/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAcH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAiCxD,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AA2CD,qBAAa,YAAY;IACvB,OAAO,CAAC,GAAG,CAAsB;IACjC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,EAAE,CAAiB;IAC3B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,kBAAkB,CAA+B;IACzD,OAAO,CAAC,kBAAkB,CAAM;IAChC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,EAAE,YAAY;IAiChC,OAAO,CAAC,cAAc;YAoBR,YAAY;YA2BZ,cAAc;YAuBd,MAAM;YAwCN,WAAW;IA2EzB,OAAO,CAAC,oBAAoB;IAyB5B,OAAO,CAAC,mBAAmB;IAuf3B,OAAO,CAAC,qBAAqB;IAYvB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAoBtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAkB7B"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/scrcpy/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AAaH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAWxD,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAuED,qBAAa,YAAY;IACvB,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,GAAG,CAAkB;IAC7B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,kBAAkB,CAA+B;IACzD,OAAO,CAAC,kBAAkB,CAAM;IAChC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,OAAO,CAAS;IACxB,iCAAiC;IACjC,OAAO,CAAC,QAAQ,CAAiD;gBAErD,MAAM,EAAE,YAAY;YAsBlB,iBAAiB;YA8CjB,YAAY;YA2BZ,cAAc;YAuBd,MAAM;YAwCN,WAAW;IAqEzB,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,oBAAoB;IA4B5B,OAAO,CAAC,sBAAsB;YAwBhB,iBAAiB;IAa/B,OAAO,CAAC,oBAAoB;IA0d5B,OAAO,CAAC,qBAAqB;IAYvB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAoBtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAqC7B"}
@@ -1,20 +1,49 @@
1
1
  /**
2
2
  * Scrcpy preview service for AIServer
3
3
  *
4
- * 仿照 midscene/packages/android-playground/src/scrcpy-server.ts 实现,
5
- * 通过 socket.io 提供稳定的 Android 投屏服务。
4
+ * 基于原生 ws (WebSocket) 协议实现 Android 投屏服务。
6
5
  *
7
- * 前端约定(与 nethp-docs-static 对齐):
8
- * - 连接后 emit 'connect-device' { deviceId?, maxSize? }
9
- * - 服务端推送:
10
- * 'devices-list' { devices, currentDeviceId }
11
- * 'preview-status' { phase, message }
12
- * 'video-metadata' { codec, width, height }
13
- * 'video-data' { data: Uint8Array, type: 'configuration'|'data', keyFrame, timestamp }
14
- * 'control-ready'
15
- * 'error' { message }
16
- * 'device-switched' { deviceId }
17
- * 'global-device-switched' { deviceId, timestamp }
6
+ * ============================================================
7
+ * 协议约定(前端必须按此对齐)
8
+ * ============================================================
9
+ * 1) 文本帧(JSON):
10
+ * {
11
+ * "event": "<eventName>",
12
+ * "data": <payload?>
13
+ * }
14
+ *
15
+ * 2) 二进制帧(视频流,避免 base64/JSON 体积膨胀):
16
+ * [1 byte header][8 bytes BE timestamp ms][N bytes H264/H265]
17
+ * header bits:
18
+ * bit0 (0x01) = isKeyFrame
19
+ * bit1 (0x02) = isConfiguration (SPS/PPS)
20
+ *
21
+ * 客户端 → 服务端(文本帧 event 名):
22
+ * - get-devices
23
+ * - switch-device data: deviceId (string)
24
+ * - connect-device data: { deviceId?, maxSize?, videoBitRate? }
25
+ * - control-touch data: { action, x, y, normalized?, pointerId?, pressure? }
26
+ * - control-key data: { keycode, action?: 'down'|'up'|'press', repeat?, metaState? }
27
+ * - control-text data: { text } | string
28
+ * - control-back data: -
29
+ * - control-home data: -
30
+ * - control-app-switch data: -
31
+ * - control-set-clipboard data: { text, paste? }
32
+ * - control-scroll data: { x?, y?, scrollX?, scrollY?, normalized? }
33
+ * - control-back-or-screen-on data: -
34
+ * - control-rotate data: -
35
+ * - control-reset-video data: -
36
+ * - control-screen-power data: { mode: 'normal'|'off' }
37
+ *
38
+ * 服务端 → 客户端(文本帧 event 名):
39
+ * - devices-list data: { devices, currentDeviceId }
40
+ * - preview-status data: { phase, message }
41
+ * - video-metadata data: { codec, width, height }
42
+ * - control-ready data: -
43
+ * - error data: { message }
44
+ * - device-switched data: { deviceId }
45
+ * - global-device-switched data: { deviceId, timestamp }
46
+ * (video-data 走二进制帧,不走 JSON)
18
47
  */
19
48
  import { exec } from 'node:child_process';
20
49
  import { createReadStream, existsSync } from 'node:fs';
@@ -22,34 +51,14 @@ import { createServer } from 'node:http';
22
51
  import path from 'node:path';
23
52
  import { promisify } from 'node:util';
24
53
  import { createRequire } from 'node:module';
25
- import cors from 'cors';
26
- import express from 'express';
27
- import { Server as SocketIoServer } from 'socket.io';
54
+ import { randomUUID } from 'node:crypto';
55
+ import { WebSocketServer, WebSocket } from 'ws';
28
56
  import { createLogger } from '../core/logger.js';
29
57
  import { buildScrcpyPreviewStatusEvent, } from './preview-status.js';
30
58
  import { withTimeout } from './timeout.js';
31
59
  const logger = createLogger('ScrcpyServer');
32
60
  const promiseExec = promisify(exec);
33
61
  const requireCjs = createRequire(import.meta.url);
34
- const LOOPBACK_HOSTS = new Set(['localhost', '127.0.0.1', '::1', '[::1]']);
35
- function isPrivateIP(hostname) {
36
- return (LOOPBACK_HOSTS.has(hostname) ||
37
- /^10\./.test(hostname) ||
38
- /^172\.(1[6-9]|2\d|3[01])\./.test(hostname) ||
39
- /^192\.168\./.test(hostname) ||
40
- /^100\.(6[4-9]|[7-9]\d|1[0-2]\d)\./.test(hostname));
41
- }
42
- function isAllowedOrigin(origin) {
43
- if (!origin)
44
- return true;
45
- try {
46
- const url = new URL(origin);
47
- return isPrivateIP(url.hostname);
48
- }
49
- catch {
50
- return false;
51
- }
52
- }
53
62
  function resolveRequestedDeviceId(options, currentDeviceId) {
54
63
  const requestedDeviceId = typeof options?.deviceId === 'string' ? options.deviceId.trim() : '';
55
64
  return requestedDeviceId || currentDeviceId || undefined;
@@ -63,7 +72,6 @@ function resolveServerBinPath(configured) {
63
72
  return configured;
64
73
  }
65
74
  try {
66
- // require.resolve 找到 package.json,从而得到包根
67
75
  const pkgPath = requireCjs.resolve('@aiscene/android/package.json');
68
76
  const candidate = path.resolve(path.dirname(pkgPath), 'bin/scrcpy-server');
69
77
  if (existsSync(candidate))
@@ -72,14 +80,35 @@ function resolveServerBinPath(configured) {
72
80
  catch {
73
81
  // ignore
74
82
  }
75
- // 最后退路:相对 cwd 的默认 node_modules 路径
76
83
  const fallback = path.resolve(process.cwd(), 'node_modules/@aiscene/android/bin/scrcpy-server');
77
84
  return fallback;
78
85
  }
86
+ /** 服务端 → 客户端的统一 JSON 发送 */
87
+ function wsSend(ws, event, data) {
88
+ if (ws.readyState !== WebSocket.OPEN)
89
+ return;
90
+ try {
91
+ ws.send(JSON.stringify(data === undefined ? { event } : { event, data }));
92
+ }
93
+ catch (e) {
94
+ logger.warn(`wsSend(${event}) failed: ${e.message}`);
95
+ }
96
+ }
97
+ /**
98
+ * 视频帧 → 二进制:[header(1)][ts(8 BE)][payload(N)]
99
+ * header bits: 0x01=keyFrame, 0x02=configuration
100
+ */
101
+ function buildVideoFrameBuffer(payload, isKeyFrame, isConfiguration, timestampMs) {
102
+ const header = (isKeyFrame ? 0x01 : 0) | (isConfiguration ? 0x02 : 0);
103
+ const buf = Buffer.alloc(1 + 8 + payload.byteLength);
104
+ buf.writeUInt8(header, 0);
105
+ buf.writeBigUInt64BE(BigInt(timestampMs), 1);
106
+ buf.set(payload, 9);
107
+ return buf;
108
+ }
79
109
  export class ScrcpyServer {
80
- app;
81
110
  httpServer;
82
- io;
111
+ wss;
83
112
  config;
84
113
  adbClient = null;
85
114
  currentDeviceId = null;
@@ -87,49 +116,58 @@ export class ScrcpyServer {
87
116
  lastDeviceListJson = '';
88
117
  serverBinPath;
89
118
  started = false;
119
+ /** 所有活动 session(按 ws 索引),用于广播 */
120
+ sessions = new Map();
90
121
  constructor(config) {
91
122
  this.config = config;
92
123
  this.serverBinPath = resolveServerBinPath(config.serverBinPath);
93
- this.app = express();
94
- this.httpServer = createServer(this.app);
95
- this.io = new SocketIoServer(this.httpServer, {
96
- cors: {
97
- origin(origin, callback) {
98
- callback(null, isAllowedOrigin(origin));
99
- },
100
- methods: ['GET', 'POST'],
101
- credentials: true,
102
- },
103
- // 视频帧二进制大小较大,提升允许的载荷上限
104
- maxHttpBufferSize: 1e8,
124
+ this.httpServer = createServer((req, res) => {
125
+ // 提供少量 REST 兼容入口(health/devices)
126
+ void this.handleHttpRequest(req, res);
105
127
  });
106
- this.app.use(cors({
107
- origin(origin, callback) {
108
- callback(null, isAllowedOrigin(origin));
109
- },
110
- credentials: true,
111
- }));
112
- this.setupApiRoutes();
113
- this.setupSocketHandlers();
128
+ this.wss = new WebSocketServer({
129
+ server: this.httpServer,
130
+ // 视频帧二进制大小较大,提升允许的载荷上限到 100MB
131
+ maxPayload: 100 * 1024 * 1024,
132
+ // 路径不限制,允许 /、/ws、/scrcpy 等任意路径
133
+ });
134
+ this.setupWebSocketHandlers();
114
135
  }
115
136
  // ============================================================
116
- // REST API
137
+ // REST API (minimal, 保留 health & devices 便于探活)
117
138
  // ============================================================
118
- setupApiRoutes() {
119
- this.app.get('/api/health', (_req, res) => {
120
- res.json({ ok: true, currentDeviceId: this.currentDeviceId });
121
- });
122
- this.app.get('/api/devices', async (_req, res) => {
139
+ async handleHttpRequest(req, res) {
140
+ // CORS:与原实现一致,全部放行
141
+ res.setHeader('Access-Control-Allow-Origin', '*');
142
+ res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
143
+ res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
144
+ if (req.method === 'OPTIONS') {
145
+ res.writeHead(204);
146
+ res.end();
147
+ return;
148
+ }
149
+ const url = req.url || '/';
150
+ if (url === '/api/health') {
151
+ res.writeHead(200, { 'Content-Type': 'application/json' });
152
+ res.end(JSON.stringify({ ok: true, currentDeviceId: this.currentDeviceId }));
153
+ return;
154
+ }
155
+ if (url === '/api/devices') {
123
156
  try {
124
157
  const devices = await this.getDevicesList();
125
- res.json({ devices, currentDeviceId: this.currentDeviceId });
158
+ res.writeHead(200, { 'Content-Type': 'application/json' });
159
+ res.end(JSON.stringify({ devices, currentDeviceId: this.currentDeviceId }));
126
160
  }
127
161
  catch (error) {
128
- res.status(500).json({
162
+ res.writeHead(500, { 'Content-Type': 'application/json' });
163
+ res.end(JSON.stringify({
129
164
  error: error.message || 'Failed to get devices list',
130
- });
165
+ }));
131
166
  }
132
- });
167
+ return;
168
+ }
169
+ res.writeHead(404, { 'Content-Type': 'application/json' });
170
+ res.end(JSON.stringify({ error: 'Not Found' }));
133
171
  }
134
172
  // ============================================================
135
173
  // ADB helpers
@@ -197,15 +235,9 @@ export class ScrcpyServer {
197
235
  audio: false,
198
236
  control: true,
199
237
  maxSize: options.maxSize ?? this.config.maxSize,
200
- // 让 web decoder 能区分 configuration 帧
201
238
  sendFrameMeta: true,
202
239
  videoBitRate: options.videoBitRate ?? this.config.videoBitRate,
203
- // 降低端到端延迟与提升首帧速度
204
240
  maxFps: 60,
205
- // 让设备更频繁地发关键帧,掉帧/花屏可更快恢复(单位:秒)
206
- // 注意:scrcpy 3.x 接受字符串 "1" 也可以是 number;保险用字符串
207
- // 由 scrcpy server 用 ffmpeg/ MediaCodec 解释
208
- // 如果你的 scrcpy 版本不支持此选项,会被忽略,无副作用
209
241
  });
210
242
  onProgress?.('starting-service');
211
243
  const startPromise = AdbScrcpyClient.start(adb, DefaultServerPath, scrcpyOptions);
@@ -221,8 +253,13 @@ export class ScrcpyServer {
221
253
  });
222
254
  }
223
255
  // ============================================================
224
- // Socket handlers
256
+ // Broadcasting
225
257
  // ============================================================
258
+ broadcastJson(event, data) {
259
+ for (const sess of this.sessions.values()) {
260
+ wsSend(sess.ws, event, data);
261
+ }
262
+ }
226
263
  broadcastDevicesList(devices) {
227
264
  const currentJson = JSON.stringify(devices);
228
265
  if (this.lastDeviceListJson === currentJson)
@@ -239,76 +276,126 @@ export class ScrcpyServer {
239
276
  logger.info(`Auto-selected online device: ${this.currentDeviceId}`);
240
277
  }
241
278
  }
242
- this.io.emit('devices-list', {
279
+ this.broadcastJson('devices-list', {
243
280
  devices,
244
281
  currentDeviceId: this.currentDeviceId,
245
282
  });
246
283
  }
247
- setupSocketHandlers() {
248
- this.io.on('connection', (socket) => {
249
- logger.info(`Client connected: id=${socket.id}, address=${socket.handshake.address}`);
284
+ // ============================================================
285
+ // WebSocket handlers
286
+ // ============================================================
287
+ setupWebSocketHandlers() {
288
+ this.wss.on('connection', (ws, req) => {
289
+ const sessionId = randomUUID();
290
+ logger.info(`Client connected: id=${sessionId}, address=${req.socket.remoteAddress}`);
250
291
  const state = {
292
+ id: sessionId,
293
+ ws,
251
294
  scrcpyClient: null,
252
295
  adb: null,
253
296
  videoWidth: 0,
254
297
  videoHeight: 0,
255
298
  };
256
- const emitStatus = (phase) => {
257
- socket.emit('preview-status', buildScrcpyPreviewStatusEvent(phase));
258
- };
259
- const sendDevicesList = async () => {
260
- try {
261
- const devices = await this.getDevicesList();
262
- socket.emit('devices-list', {
263
- devices,
264
- currentDeviceId: this.currentDeviceId,
265
- });
266
- }
267
- catch (error) {
268
- logger.warn(`sendDevicesList failed: ${error.message}`);
269
- socket.emit('error', { message: 'failed to get devices list' });
270
- }
271
- };
272
- socket.on('get-devices', () => {
273
- void sendDevicesList();
299
+ this.sessions.set(ws, state);
300
+ this.attachSocketHandlers(state);
301
+ // 立即异步推送设备列表
302
+ void this.sendDevicesListTo(state);
303
+ });
304
+ }
305
+ async sendDevicesListTo(state) {
306
+ try {
307
+ const devices = await this.getDevicesList();
308
+ wsSend(state.ws, 'devices-list', {
309
+ devices,
310
+ currentDeviceId: this.currentDeviceId,
274
311
  });
275
- socket.on('switch-device', async (deviceId) => {
312
+ }
313
+ catch (error) {
314
+ logger.warn(`sendDevicesList failed: ${error.message}`);
315
+ wsSend(state.ws, 'error', { message: 'failed to get devices list' });
316
+ }
317
+ }
318
+ attachSocketHandlers(state) {
319
+ const { ws } = state;
320
+ const emitStatus = (phase) => {
321
+ wsSend(ws, 'preview-status', buildScrcpyPreviewStatusEvent(phase));
322
+ };
323
+ // ---- 控制器复用辅助 ----
324
+ const ensureController = () => {
325
+ const controller = state.scrcpyClient?.controller;
326
+ if (!controller) {
327
+ wsSend(ws, 'error', {
328
+ message: 'Scrcpy controller not ready, connect-device first',
329
+ });
330
+ return null;
331
+ }
332
+ return controller;
333
+ };
334
+ const ACTION_MAP = {
335
+ down: 0,
336
+ up: 1,
337
+ move: 2,
338
+ cancel: 3,
339
+ };
340
+ const FINGER_POINTER_ID = BigInt(-2);
341
+ const pressKey = async (keyCode) => {
342
+ const controller = ensureController();
343
+ if (!controller)
344
+ return;
345
+ await controller.injectKeyCode({
346
+ action: 0,
347
+ keyCode,
348
+ repeat: 0,
349
+ metaState: 0,
350
+ });
351
+ await controller.injectKeyCode({
352
+ action: 1,
353
+ keyCode,
354
+ repeat: 0,
355
+ metaState: 0,
356
+ });
357
+ };
358
+ // ---- 事件分发表 ----
359
+ const handlers = {
360
+ 'get-devices': () => this.sendDevicesListTo(state),
361
+ 'switch-device': async (deviceId) => {
276
362
  try {
363
+ const id = typeof deviceId === 'string' ? deviceId : String(deviceId ?? '');
277
364
  if (state.scrcpyClient) {
278
365
  await state.scrcpyClient.close().catch(() => { });
279
366
  state.scrcpyClient = null;
280
367
  }
281
- this.currentDeviceId = deviceId;
282
- socket.emit('device-switched', { deviceId });
283
- this.io.emit('global-device-switched', {
284
- deviceId,
368
+ this.currentDeviceId = id;
369
+ wsSend(ws, 'device-switched', { deviceId: id });
370
+ this.broadcastJson('global-device-switched', {
371
+ deviceId: id,
285
372
  timestamp: Date.now(),
286
373
  });
287
374
  }
288
375
  catch (error) {
289
- socket.emit('error', {
376
+ wsSend(ws, 'error', {
290
377
  message: `Failed to switch device: ${error?.message || 'Unknown error'}`,
291
378
  });
292
379
  }
293
- });
294
- socket.on('connect-device', async (options = {}) => {
380
+ },
381
+ 'connect-device': async (options = {}) => {
295
382
  const { ScrcpyVideoCodecId } = await import('@yume-chan/scrcpy');
296
383
  try {
297
384
  emitStatus('connecting-device');
298
- const requestedDeviceId = resolveRequestedDeviceId(options, this.currentDeviceId);
385
+ const requestedDeviceId = resolveRequestedDeviceId(options || {}, this.currentDeviceId);
299
386
  if (requestedDeviceId) {
300
387
  this.currentDeviceId = requestedDeviceId;
301
388
  }
302
389
  state.adb = await this.getAdb(requestedDeviceId);
303
390
  if (!state.adb) {
304
- socket.emit('error', { message: 'No device found' });
391
+ wsSend(ws, 'error', { message: 'No device found' });
305
392
  return;
306
393
  }
307
- state.scrcpyClient = await this.startScrcpy(state.adb, options, emitStatus);
308
- logger.info(`Scrcpy started for device=${this.currentDeviceId}, client=${socket.id}`);
394
+ state.scrcpyClient = await this.startScrcpy(state.adb, options || {}, emitStatus);
395
+ logger.info(`Scrcpy started for device=${this.currentDeviceId}, client=${state.id}`);
309
396
  const videoStreamRaw = state.scrcpyClient?.videoStream;
310
397
  if (!videoStreamRaw) {
311
- socket.emit('error', {
398
+ wsSend(ws, 'error', {
312
399
  message: 'Video stream not available in scrcpy client',
313
400
  });
314
401
  return;
@@ -324,7 +411,7 @@ export class ScrcpyServer {
324
411
  metadata.width = 1080;
325
412
  if (!metadata.height)
326
413
  metadata.height = 1920;
327
- socket.emit('video-metadata', metadata);
414
+ wsSend(ws, 'video-metadata', metadata);
328
415
  state.videoWidth = metadata.width;
329
416
  state.videoHeight = metadata.height;
330
417
  const { stream } = videoStream;
@@ -336,29 +423,25 @@ export class ScrcpyServer {
336
423
  if (done)
337
424
  break;
338
425
  const frameType = value.type || 'data';
339
- // scrcpy 包属性是 `keyframe`(小写 f),兼容两种命名后强制布尔
340
426
  const isKey = !!(value.keyframe ?? value.keyFrame);
341
- // 二进制 Uint8Array 直发,避免 Array.from 内存爆炸
342
- socket.emit('video-data', {
343
- data: value.data,
344
- type: frameType,
345
- timestamp: Date.now(),
346
- keyFrame: isKey,
347
- });
427
+ const isConfig = frameType === 'configuration';
428
+ if (ws.readyState !== WebSocket.OPEN)
429
+ break;
430
+ ws.send(buildVideoFrameBuffer(value.data, isKey, isConfig, Date.now()), { binary: true });
348
431
  }
349
432
  }
350
433
  catch (error) {
351
434
  logger.error(`Video stream error: ${error.message}`);
352
- if (socket.connected) {
353
- socket.emit('error', {
435
+ if (ws.readyState === WebSocket.OPEN) {
436
+ wsSend(ws, 'error', {
354
437
  message: 'video stream processing error',
355
438
  });
356
439
  }
357
440
  return;
358
441
  }
359
- // 流自然结束 — 通知前端尽快重连
360
- if (socket.connected) {
361
- socket.emit('error', { message: 'video stream ended' });
442
+ // 流自然结束
443
+ if (ws.readyState === WebSocket.OPEN) {
444
+ wsSend(ws, 'error', { message: 'video stream ended' });
362
445
  }
363
446
  if (state.scrcpyClient) {
364
447
  await state.scrcpyClient.close().catch(() => { });
@@ -367,7 +450,7 @@ export class ScrcpyServer {
367
450
  };
368
451
  void processStream();
369
452
  if (state.scrcpyClient?.controller) {
370
- socket.emit('control-ready');
453
+ wsSend(ws, 'control-ready');
371
454
  }
372
455
  }
373
456
  catch (error) {
@@ -377,57 +460,18 @@ export class ScrcpyServer {
377
460
  await state.scrcpyClient.close().catch(() => { });
378
461
  state.scrcpyClient = null;
379
462
  }
380
- socket.emit('error', {
463
+ wsSend(ws, 'error', {
381
464
  message: `Failed to connect device: ${message}`,
382
465
  });
383
466
  }
384
- });
385
- // ============================================================
386
- // Control channel: 触摸 / 按键 / 文本 / 物理按键快捷
387
- // 客户端约定:
388
- // socket.emit('control-touch', {
389
- // action: 'down'|'move'|'up'|'cancel',
390
- // x, y, // 0..1 归一化 或 已映射到设备坐标
391
- // normalized?: boolean, // true 表示 x,y 是 0..1,需要乘 videoWidth/Height
392
- // pointerId?: number,
393
- // pressure?: number,
394
- // })
395
- // socket.emit('control-key', { keycode: number, action?: 'down'|'up'|'press', repeat?, metaState? })
396
- // socket.emit('control-text', { text: string })
397
- // socket.emit('control-back') // 等价于 back/screen on
398
- // socket.emit('control-home') // Home
399
- // socket.emit('control-app-switch') // 最近任务
400
- // socket.emit('control-set-clipboard', { text, paste?: boolean })
401
- // ============================================================
402
- const ensureController = () => {
403
- const controller = state.scrcpyClient?.controller;
404
- if (!controller) {
405
- socket.emit('error', {
406
- message: 'Scrcpy controller not ready, connect-device first',
407
- });
408
- return null;
409
- }
410
- return controller;
411
- };
412
- const ACTION_MAP = {
413
- down: 0,
414
- up: 1,
415
- move: 2,
416
- cancel: 3,
417
- };
418
- // scrcpy 协议常量(参考 https://tangoadb.dev/scrcpy/control/touch/)
419
- // ScrcpyPointerId.Finger = -2n
420
- const FINGER_POINTER_ID = BigInt(-2);
421
- const BUTTON_PRIMARY = 1;
422
- socket.on('control-touch', async (raw = {}) => {
467
+ },
468
+ 'control-touch': async (raw = {}) => {
423
469
  try {
424
470
  const controller = ensureController();
425
471
  if (!controller) {
426
472
  logger.warn('control-touch: controller not ready');
427
473
  return;
428
474
  }
429
- // ⚠️ scrcpy 协议字段是 videoWidth / videoHeight(旧 d.ts 误写为 screenWidth),
430
- // 必须与最近一次 video-metadata 的 width/height 完全一致,否则 server 会忽略
431
475
  const videoWidth = state.videoWidth || 1080;
432
476
  const videoHeight = state.videoHeight || 1920;
433
477
  const normalized = raw.normalized === true;
@@ -446,15 +490,10 @@ export class ScrcpyServer {
446
490
  const actionStr = String(raw.action || 'down').toLowerCase();
447
491
  const action = ACTION_MAP[actionStr] ?? 0;
448
492
  const isUp = actionStr === 'up' || actionStr === 'cancel';
449
- // pressure: down/move=1.0, up=0
450
493
  const pressure = isUp ? 0 : 1;
451
- // 手指模式 (Finger=-2n);如果前端有 pointerId 就直接用 BigInt
452
494
  const pointerId = raw.pointerId !== undefined && raw.pointerId !== null
453
495
  ? BigInt(raw.pointerId)
454
496
  : FINGER_POINTER_ID;
455
- // 触摸(手指)模式下,scrcpy server 在 server 端的解码不依赖 button 字段
456
- // —— 上一次设置 actionButton=Primary 反而让某些 ROM 把它当成"按下了实体鼠标键再松开",
457
- // 结果手机上能看到 inject 但 click 不识别。回退到 0/0 最稳。
458
497
  const actionButton = 0;
459
498
  const buttons = 0;
460
499
  logger.info(`inject touch ${actionStr} (${x},${y}) p=${pressure} pid=${pointerId} videoSize=${videoWidth}x${videoHeight}`);
@@ -463,7 +502,6 @@ export class ScrcpyServer {
463
502
  pointerId,
464
503
  pointerX: x,
465
504
  pointerY: y,
466
- // 重要:字段名是 videoWidth/videoHeight
467
505
  videoWidth,
468
506
  videoHeight,
469
507
  pressure,
@@ -474,8 +512,8 @@ export class ScrcpyServer {
474
512
  catch (error) {
475
513
  logger.warn(`control-touch failed: ${error.message}`);
476
514
  }
477
- });
478
- socket.on('control-key', async (raw = {}) => {
515
+ },
516
+ 'control-key': async (raw = {}) => {
479
517
  try {
480
518
  const controller = ensureController();
481
519
  if (!controller)
@@ -507,8 +545,8 @@ export class ScrcpyServer {
507
545
  catch (error) {
508
546
  logger.warn(`control-key failed: ${error.message}`);
509
547
  }
510
- });
511
- socket.on('control-text', async (raw = {}) => {
548
+ },
549
+ 'control-text': async (raw = {}) => {
512
550
  try {
513
551
  const controller = ensureController();
514
552
  if (!controller)
@@ -522,49 +560,32 @@ export class ScrcpyServer {
522
560
  catch (error) {
523
561
  logger.warn(`control-text failed: ${error.message}`);
524
562
  }
525
- });
526
- const pressKey = async (keyCode) => {
527
- const controller = ensureController();
528
- if (!controller)
529
- return;
530
- await controller.injectKeyCode({
531
- action: 0,
532
- keyCode,
533
- repeat: 0,
534
- metaState: 0,
535
- });
536
- await controller.injectKeyCode({
537
- action: 1,
538
- keyCode,
539
- repeat: 0,
540
- metaState: 0,
541
- });
542
- };
543
- socket.on('control-back', async () => {
563
+ },
564
+ 'control-back': async () => {
544
565
  try {
545
- await pressKey(4); // AndroidKeyCode.AndroidBack
566
+ await pressKey(4);
546
567
  }
547
568
  catch (error) {
548
569
  logger.warn(`control-back failed: ${error.message}`);
549
570
  }
550
- });
551
- socket.on('control-home', async () => {
571
+ },
572
+ 'control-home': async () => {
552
573
  try {
553
- await pressKey(3); // AndroidKeyCode.AndroidHome
574
+ await pressKey(3);
554
575
  }
555
576
  catch (error) {
556
577
  logger.warn(`control-home failed: ${error.message}`);
557
578
  }
558
- });
559
- socket.on('control-app-switch', async () => {
579
+ },
580
+ 'control-app-switch': async () => {
560
581
  try {
561
- await pressKey(187); // AndroidKeyCode.AndroidAppSwitch
582
+ await pressKey(187);
562
583
  }
563
584
  catch (error) {
564
585
  logger.warn(`control-app-switch failed: ${error.message}`);
565
586
  }
566
- });
567
- socket.on('control-set-clipboard', async (raw = {}) => {
587
+ },
588
+ 'control-set-clipboard': async (raw = {}) => {
568
589
  try {
569
590
  const controller = ensureController();
570
591
  if (!controller)
@@ -581,11 +602,8 @@ export class ScrcpyServer {
581
602
  catch (error) {
582
603
  logger.warn(`control-set-clipboard failed: ${error.message}`);
583
604
  }
584
- });
585
- // ---- scroll: 鼠标滚轮(参考 https://tangoadb.dev/scrcpy/control/scroll/) ----
586
- // raw: { x, y, scrollX?, scrollY?, normalized?: bool }
587
- // 默认 scrollY = -1(向下滚动一格),向上滚动用 +1
588
- socket.on('control-scroll', async (raw = {}) => {
605
+ },
606
+ 'control-scroll': async (raw = {}) => {
589
607
  try {
590
608
  const controller = ensureController();
591
609
  if (!controller)
@@ -615,22 +633,19 @@ export class ScrcpyServer {
615
633
  catch (error) {
616
634
  logger.warn(`control-scroll failed: ${error.message}`);
617
635
  }
618
- });
619
- // ---- back-or-screen-on:右键模拟,息屏时唤醒 ----
620
- socket.on('control-back-or-screen-on', async () => {
636
+ },
637
+ 'control-back-or-screen-on': async () => {
621
638
  try {
622
639
  const controller = ensureController();
623
640
  if (!controller)
624
641
  return;
625
- // action: Down(0)=按下;通常一次发 Down 就够了
626
642
  await controller.backOrScreenOn(0);
627
643
  }
628
644
  catch (error) {
629
645
  logger.warn(`control-back-or-screen-on failed: ${error.message}`);
630
646
  }
631
- });
632
- // ---- rotate-device:旋转屏幕 ----
633
- socket.on('control-rotate', async () => {
647
+ },
648
+ 'control-rotate': async () => {
634
649
  try {
635
650
  const controller = ensureController();
636
651
  if (!controller)
@@ -640,9 +655,8 @@ export class ScrcpyServer {
640
655
  catch (error) {
641
656
  logger.warn(`control-rotate failed: ${error.message}`);
642
657
  }
643
- });
644
- // ---- reset-video:让 scrcpy 重新发送 SPS/PPS 与关键帧(解决花屏) ----
645
- socket.on('control-reset-video', async () => {
658
+ },
659
+ 'control-reset-video': async () => {
646
660
  try {
647
661
  const controller = ensureController();
648
662
  if (!controller)
@@ -652,10 +666,8 @@ export class ScrcpyServer {
652
666
  catch (error) {
653
667
  logger.warn(`control-reset-video failed: ${error.message}`);
654
668
  }
655
- });
656
- // ---- screen-power:开/关屏幕背光(不锁屏) ----
657
- // raw: { mode: 'normal' | 'off' } normal=2, off=0
658
- socket.on('control-screen-power', async (raw = {}) => {
669
+ },
670
+ 'control-screen-power': async (raw = {}) => {
659
671
  try {
660
672
  const controller = ensureController();
661
673
  if (!controller)
@@ -666,21 +678,55 @@ export class ScrcpyServer {
666
678
  catch (error) {
667
679
  logger.warn(`control-screen-power failed: ${error.message}`);
668
680
  }
669
- });
670
- socket.on('disconnect', async (reason) => {
671
- logger.info(`Client disconnected: id=${socket.id}, reason=${reason}`);
672
- if (state.scrcpyClient) {
673
- try {
674
- await state.scrcpyClient.close();
675
- }
676
- catch (error) {
677
- logger.warn(`Failed to close scrcpy client on disconnect: ${error.message}`);
678
- }
679
- state.scrcpyClient = null;
681
+ },
682
+ };
683
+ ws.on('message', (raw, isBinary) => {
684
+ if (isBinary) {
685
+ // 客户端不应发送二进制;忽略
686
+ return;
687
+ }
688
+ let msg;
689
+ try {
690
+ msg = JSON.parse(raw.toString('utf8'));
691
+ }
692
+ catch (e) {
693
+ logger.warn(`Invalid JSON from client ${state.id}: ${e.message}`);
694
+ wsSend(ws, 'error', { message: 'invalid JSON message' });
695
+ return;
696
+ }
697
+ const event = msg && typeof msg.event === 'string' ? msg.event : '';
698
+ if (!event) {
699
+ wsSend(ws, 'error', { message: 'missing event field' });
700
+ return;
701
+ }
702
+ const handler = handlers[event];
703
+ if (!handler) {
704
+ logger.warn(`Unknown event from client ${state.id}: ${event}`);
705
+ wsSend(ws, 'error', { message: `unknown event: ${event}` });
706
+ return;
707
+ }
708
+ try {
709
+ void handler(msg.data);
710
+ }
711
+ catch (e) {
712
+ logger.warn(`handler(${event}) threw: ${e.message}`);
713
+ }
714
+ });
715
+ ws.on('close', async (code, reason) => {
716
+ logger.info(`Client disconnected: id=${state.id}, code=${code}, reason=${reason?.toString() || ''}`);
717
+ this.sessions.delete(ws);
718
+ if (state.scrcpyClient) {
719
+ try {
720
+ await state.scrcpyClient.close();
680
721
  }
681
- });
682
- // 立即异步推送设备列表,避免冷启动卡住
683
- void sendDevicesList();
722
+ catch (error) {
723
+ logger.warn(`Failed to close scrcpy client on disconnect: ${error.message}`);
724
+ }
725
+ state.scrcpyClient = null;
726
+ }
727
+ });
728
+ ws.on('error', (err) => {
729
+ logger.warn(`WebSocket error for ${state.id}: ${err.message}`);
684
730
  });
685
731
  }
686
732
  // ============================================================
@@ -709,7 +755,7 @@ export class ScrcpyServer {
709
755
  this.started = true;
710
756
  await new Promise((resolve) => {
711
757
  this.httpServer.listen(this.config.port, this.config.host, () => {
712
- logger.info(`Scrcpy server running at http://${this.config.host}:${this.config.port}`);
758
+ logger.info(`Scrcpy WebSocket server running at ws://${this.config.host}:${this.config.port}`);
713
759
  logger.info(`Using scrcpy-server bin: ${this.serverBinPath}`);
714
760
  this.startDeviceMonitoring();
715
761
  resolve();
@@ -723,12 +769,31 @@ export class ScrcpyServer {
723
769
  clearInterval(this.devicePollInterval);
724
770
  this.devicePollInterval = null;
725
771
  }
772
+ // 关闭所有 session 的 scrcpy 客户端
773
+ for (const sess of this.sessions.values()) {
774
+ if (sess.scrcpyClient) {
775
+ try {
776
+ await sess.scrcpyClient.close();
777
+ }
778
+ catch {
779
+ // ignore
780
+ }
781
+ sess.scrcpyClient = null;
782
+ }
783
+ try {
784
+ sess.ws.close(1001, 'server shutting down');
785
+ }
786
+ catch {
787
+ // ignore
788
+ }
789
+ }
790
+ this.sessions.clear();
726
791
  await new Promise((resolve) => {
727
792
  if (!this.httpServer.listening) {
728
793
  resolve();
729
794
  return;
730
795
  }
731
- this.io.close(() => {
796
+ this.wss.close(() => {
732
797
  this.httpServer.close(() => resolve());
733
798
  });
734
799
  });
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/scrcpy/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/scrcpy/server.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aiscene/aiserver",
3
- "version": "1.6.1",
3
+ "version": "1.6.2",
4
4
  "description": "AI automation server with device management, task scheduling, and debug capabilities",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",