@yume-chan/scrcpy 0.0.23 → 0.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/CHANGELOG.json +21 -0
- package/CHANGELOG.md +11 -1
- package/LICENSE +1 -1
- package/esm/codec/av1.d.ts +364 -0
- package/esm/codec/av1.d.ts.map +1 -1
- package/esm/codec/av1.js +591 -0
- package/esm/codec/av1.js.map +1 -1
- package/esm/codec/nalu.d.ts +0 -9
- package/esm/codec/nalu.d.ts.map +1 -1
- package/esm/codec/nalu.js +56 -129
- package/esm/codec/nalu.js.map +1 -1
- package/esm/control/{basic.d.ts → empty.d.ts} +2 -2
- package/esm/control/empty.d.ts.map +1 -0
- package/esm/control/empty.js +3 -0
- package/esm/control/empty.js.map +1 -0
- package/esm/control/index.d.ts +1 -1
- package/esm/control/index.js +1 -1
- package/esm/control/rotate-device.js +2 -2
- package/esm/control/serializer.d.ts +2 -0
- package/esm/control/serializer.d.ts.map +1 -1
- package/esm/control/serializer.js +10 -4
- package/esm/control/serializer.js.map +1 -1
- package/esm/control/type.js +1 -1
- package/esm/control/type.js.map +1 -1
- package/esm/control/writer.d.ts +4 -1
- package/esm/control/writer.d.ts.map +1 -1
- package/esm/control/writer.js +12 -2
- package/esm/control/writer.js.map +1 -1
- package/esm/index.d.ts +0 -1
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +0 -1
- package/esm/index.js.map +1 -1
- package/esm/options/1_16/float.d.ts +6 -0
- package/esm/options/1_16/float.d.ts.map +1 -0
- package/esm/options/1_16/{float-to-uint16.js → float.js} +7 -6
- package/esm/options/1_16/float.js.map +1 -0
- package/esm/options/1_16/index.d.ts +1 -1
- package/esm/options/1_16/index.d.ts.map +1 -1
- package/esm/options/1_16/index.js +1 -1
- package/esm/options/1_16/index.js.map +1 -1
- package/esm/options/1_16/message.d.ts +4 -0
- package/esm/options/1_16/message.d.ts.map +1 -1
- package/esm/options/1_16/message.js +7 -4
- package/esm/options/1_16/message.js.map +1 -1
- package/esm/options/1_16/options.d.ts +13 -4
- package/esm/options/1_16/options.d.ts.map +1 -1
- package/esm/options/1_16/options.js +43 -15
- package/esm/options/1_16/options.js.map +1 -1
- package/esm/options/1_17.d.ts +2 -3
- package/esm/options/1_17.d.ts.map +1 -1
- package/esm/options/1_17.js +3 -6
- package/esm/options/1_17.js.map +1 -1
- package/esm/options/1_18.d.ts +2 -3
- package/esm/options/1_18.d.ts.map +1 -1
- package/esm/options/1_18.js +4 -24
- package/esm/options/1_18.js.map +1 -1
- package/esm/options/1_21.d.ts +9 -4
- package/esm/options/1_21.d.ts.map +1 -1
- package/esm/options/1_21.js +30 -7
- package/esm/options/1_21.js.map +1 -1
- package/esm/options/1_22/options.d.ts +2 -3
- package/esm/options/1_22/options.d.ts.map +1 -1
- package/esm/options/1_22/options.js +4 -7
- package/esm/options/1_22/options.js.map +1 -1
- package/esm/options/1_23.d.ts +2 -3
- package/esm/options/1_23.d.ts.map +1 -1
- package/esm/options/1_23.js +4 -7
- package/esm/options/1_23.js.map +1 -1
- package/esm/options/1_24.d.ts +2 -3
- package/esm/options/1_24.d.ts.map +1 -1
- package/esm/options/1_24.js +3 -6
- package/esm/options/1_24.js.map +1 -1
- package/esm/options/1_25/options.d.ts +2 -3
- package/esm/options/1_25/options.d.ts.map +1 -1
- package/esm/options/1_25/options.js +3 -6
- package/esm/options/1_25/options.js.map +1 -1
- package/esm/options/1_25/scroll.d.ts +3 -2
- package/esm/options/1_25/scroll.d.ts.map +1 -1
- package/esm/options/1_25/scroll.js +8 -7
- package/esm/options/1_25/scroll.js.map +1 -1
- package/esm/options/2_0.d.ts +10 -8
- package/esm/options/2_0.d.ts.map +1 -1
- package/esm/options/2_0.js +68 -74
- package/esm/options/2_0.js.map +1 -1
- package/esm/options/2_1.d.ts +4 -5
- package/esm/options/2_1.d.ts.map +1 -1
- package/esm/options/2_1.js +3 -6
- package/esm/options/2_1.js.map +1 -1
- package/esm/options/2_2.d.ts +4 -5
- package/esm/options/2_2.d.ts.map +1 -1
- package/esm/options/2_2.js +3 -6
- package/esm/options/2_2.js.map +1 -1
- package/esm/options/2_3.d.ts +59 -0
- package/esm/options/2_3.d.ts.map +1 -0
- package/esm/options/2_3.js +47 -0
- package/esm/options/2_3.js.map +1 -0
- package/esm/options/codec.d.ts +1 -0
- package/esm/options/codec.d.ts.map +1 -1
- package/esm/options/codec.js +1 -0
- package/esm/options/codec.js.map +1 -1
- package/esm/options/index.d.ts +1 -0
- package/esm/options/index.d.ts.map +1 -1
- package/esm/options/index.js +1 -0
- package/esm/options/index.js.map +1 -1
- package/esm/options/latest.d.ts +4 -4
- package/esm/options/latest.js +2 -2
- package/esm/options/types.d.ts +30 -32
- package/esm/options/types.d.ts.map +1 -1
- package/esm/options/types.js +77 -26
- package/esm/options/types.js.map +1 -1
- package/package.json +11 -11
- package/src/codec/av1.ts +670 -0
- package/src/codec/nalu.ts +67 -154
- package/src/control/empty.ts +3 -0
- package/src/control/index.ts +1 -1
- package/src/control/rotate-device.ts +2 -2
- package/src/control/serializer.ts +12 -4
- package/src/control/type.ts +1 -1
- package/src/control/writer.ts +16 -6
- package/src/index.ts +0 -1
- package/src/options/1_16/{float-to-uint16.ts → float.ts} +8 -6
- package/src/options/1_16/index.ts +1 -1
- package/src/options/1_16/message.ts +8 -4
- package/src/options/1_16/options.ts +68 -28
- package/src/options/1_17.ts +3 -9
- package/src/options/1_18.ts +3 -36
- package/src/options/1_21.ts +40 -11
- package/src/options/1_22/options.ts +4 -10
- package/src/options/1_23.ts +4 -10
- package/src/options/1_24.ts +3 -9
- package/src/options/1_25/options.ts +3 -9
- package/src/options/1_25/scroll.ts +10 -11
- package/src/options/2_0.ts +87 -92
- package/src/options/2_1.ts +3 -9
- package/src/options/2_2.ts +3 -9
- package/src/options/2_3.ts +70 -0
- package/src/options/codec.ts +6 -0
- package/src/options/index.ts +1 -0
- package/src/options/latest.ts +4 -4
- package/src/options/types.ts +89 -98
- package/tsconfig.build.tsbuildinfo +1 -1
- package/esm/control/basic.d.ts.map +0 -1
- package/esm/control/basic.js +0 -3
- package/esm/control/basic.js.map +0 -1
- package/esm/device-message/ack-clipboard.d.ts +0 -9
- package/esm/device-message/ack-clipboard.d.ts.map +0 -1
- package/esm/device-message/ack-clipboard.js +0 -6
- package/esm/device-message/ack-clipboard.js.map +0 -1
- package/esm/device-message/clipboard.d.ts +0 -10
- package/esm/device-message/clipboard.d.ts.map +0 -1
- package/esm/device-message/clipboard.js +0 -7
- package/esm/device-message/clipboard.js.map +0 -1
- package/esm/device-message/index.d.ts +0 -5
- package/esm/device-message/index.d.ts.map +0 -1
- package/esm/device-message/index.js +0 -5
- package/esm/device-message/index.js.map +0 -1
- package/esm/device-message/stream.d.ts +0 -8
- package/esm/device-message/stream.d.ts.map +0 -1
- package/esm/device-message/stream.js +0 -35
- package/esm/device-message/stream.js.map +0 -1
- package/esm/device-message/type.d.ts +0 -5
- package/esm/device-message/type.d.ts.map +0 -1
- package/esm/device-message/type.js +0 -7
- package/esm/device-message/type.js.map +0 -1
- package/esm/options/1_16/float-to-uint16.d.ts +0 -5
- package/esm/options/1_16/float-to-uint16.d.ts.map +0 -1
- package/esm/options/1_16/float-to-uint16.js.map +0 -1
- package/src/control/basic.ts +0 -3
- package/src/device-message/ack-clipboard.ts +0 -10
- package/src/device-message/clipboard.ts +0 -11
- package/src/device-message/index.ts +0 -4
- package/src/device-message/stream.ts +0 -49
- package/src/device-message/type.ts +0 -5
package/src/options/2_0.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
+
import { getUint32BigEndian } from "@yume-chan/no-data-view";
|
|
1
2
|
import type { ReadableStream } from "@yume-chan/stream-extra";
|
|
2
3
|
import {
|
|
3
4
|
BufferedReadableStream,
|
|
4
5
|
PushReadableStream,
|
|
5
6
|
} from "@yume-chan/stream-extra";
|
|
6
7
|
import type { ValueOrPromise } from "@yume-chan/struct";
|
|
7
|
-
import Struct, {
|
|
8
|
+
import Struct, { placeholder } from "@yume-chan/struct";
|
|
8
9
|
|
|
9
10
|
import type {
|
|
10
11
|
AndroidMotionEventAction,
|
|
@@ -13,8 +14,8 @@ import type {
|
|
|
13
14
|
|
|
14
15
|
import {
|
|
15
16
|
CodecOptions,
|
|
16
|
-
ScrcpyFloatToUint16FieldDefinition,
|
|
17
17
|
ScrcpyOptions1_16,
|
|
18
|
+
ScrcpyUnsignedFloatFieldDefinition,
|
|
18
19
|
} from "./1_16/index.js";
|
|
19
20
|
import { ScrcpyOptions1_21 } from "./1_21.js";
|
|
20
21
|
import type { ScrcpyOptionsInit1_24 } from "./1_24.js";
|
|
@@ -27,7 +28,7 @@ import type {
|
|
|
27
28
|
ScrcpyEncoder,
|
|
28
29
|
ScrcpyOptionValue,
|
|
29
30
|
} from "./types.js";
|
|
30
|
-
import {
|
|
31
|
+
import { ScrcpyOptions } from "./types.js";
|
|
31
32
|
|
|
32
33
|
export const ScrcpyInjectTouchControlMessage2_0 = new Struct()
|
|
33
34
|
.uint8("type")
|
|
@@ -37,7 +38,7 @@ export const ScrcpyInjectTouchControlMessage2_0 = new Struct()
|
|
|
37
38
|
.uint32("pointerY")
|
|
38
39
|
.uint16("screenWidth")
|
|
39
40
|
.uint16("screenHeight")
|
|
40
|
-
.field("pressure",
|
|
41
|
+
.field("pressure", ScrcpyUnsignedFloatFieldDefinition)
|
|
41
42
|
.uint32("actionButton")
|
|
42
43
|
.uint32("buttons");
|
|
43
44
|
|
|
@@ -76,20 +77,20 @@ export interface ScrcpyOptionsInit2_0
|
|
|
76
77
|
videoCodec?: "h264" | "h265" | "av1";
|
|
77
78
|
videoBitRate?: number;
|
|
78
79
|
videoCodecOptions?: CodecOptions;
|
|
79
|
-
videoEncoder?: string;
|
|
80
|
+
videoEncoder?: string | undefined;
|
|
80
81
|
|
|
81
82
|
audio?: boolean;
|
|
82
|
-
audioCodec?: "
|
|
83
|
+
audioCodec?: "raw" | "opus" | "aac";
|
|
83
84
|
audioBitRate?: number;
|
|
84
85
|
audioCodecOptions?: CodecOptions;
|
|
85
|
-
audioEncoder?: string;
|
|
86
|
+
audioEncoder?: string | undefined;
|
|
86
87
|
|
|
87
88
|
listEncoders?: boolean;
|
|
88
89
|
listDisplays?: boolean;
|
|
89
90
|
sendCodecMeta?: boolean;
|
|
90
91
|
}
|
|
91
92
|
|
|
92
|
-
function omit<T extends object, K extends keyof T>(
|
|
93
|
+
export function omit<T extends object, K extends keyof T>(
|
|
93
94
|
obj: T,
|
|
94
95
|
keys: K[],
|
|
95
96
|
): Omit<T, K> {
|
|
@@ -102,10 +103,59 @@ function omit<T extends object, K extends keyof T>(
|
|
|
102
103
|
return result as Omit<T, K>;
|
|
103
104
|
}
|
|
104
105
|
|
|
105
|
-
export class ScrcpyOptions2_0 extends
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
106
|
+
export class ScrcpyOptions2_0 extends ScrcpyOptions<ScrcpyOptionsInit2_0> {
|
|
107
|
+
static async parseAudioMetadata(
|
|
108
|
+
stream: ReadableStream<Uint8Array>,
|
|
109
|
+
sendCodecMeta: boolean,
|
|
110
|
+
mapMetadata: (value: number) => ScrcpyAudioCodec,
|
|
111
|
+
getOptionCodec: () => ScrcpyAudioCodec,
|
|
112
|
+
): Promise<ScrcpyAudioStreamMetadata> {
|
|
113
|
+
const buffered = new BufferedReadableStream(stream);
|
|
114
|
+
|
|
115
|
+
const buffer = await buffered.readExactly(4);
|
|
116
|
+
// Treat it as a 32-bit number for simpler comparisons
|
|
117
|
+
const codecMetadataValue = getUint32BigEndian(buffer, 0);
|
|
118
|
+
// Server will send `0x00_00_00_00` and `0x00_00_00_01` even if `sendCodecMeta` is false
|
|
119
|
+
switch (codecMetadataValue) {
|
|
120
|
+
case 0x00_00_00_00:
|
|
121
|
+
return {
|
|
122
|
+
type: "disabled",
|
|
123
|
+
};
|
|
124
|
+
case 0x00_00_00_01:
|
|
125
|
+
return {
|
|
126
|
+
type: "errored",
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
if (sendCodecMeta) {
|
|
131
|
+
return {
|
|
132
|
+
type: "success",
|
|
133
|
+
codec: mapMetadata(codecMetadataValue),
|
|
134
|
+
stream: buffered.release(),
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
return {
|
|
139
|
+
type: "success",
|
|
140
|
+
// Infer codec from `audioCodec` option
|
|
141
|
+
codec: getOptionCodec(),
|
|
142
|
+
stream: new PushReadableStream<Uint8Array>(async (controller) => {
|
|
143
|
+
// Put the first 4 bytes back
|
|
144
|
+
await controller.enqueue(buffer);
|
|
145
|
+
|
|
146
|
+
const stream = buffered.release();
|
|
147
|
+
const reader = stream.getReader();
|
|
148
|
+
while (true) {
|
|
149
|
+
const { done, value } = await reader.read();
|
|
150
|
+
if (done) {
|
|
151
|
+
break;
|
|
152
|
+
}
|
|
153
|
+
await controller.enqueue(value);
|
|
154
|
+
}
|
|
155
|
+
}),
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
|
|
109
159
|
static readonly DEFAULTS = {
|
|
110
160
|
...omit(ScrcpyOptions1_24.DEFAULTS, [
|
|
111
161
|
"bitRate",
|
|
@@ -117,13 +167,13 @@ export class ScrcpyOptions2_0 extends ScrcpyOptionsBase<
|
|
|
117
167
|
videoCodec: "h264",
|
|
118
168
|
videoBitRate: 8000000,
|
|
119
169
|
videoCodecOptions: new CodecOptions(),
|
|
120
|
-
videoEncoder:
|
|
170
|
+
videoEncoder: undefined,
|
|
121
171
|
|
|
122
172
|
audio: true,
|
|
123
173
|
audioCodec: "opus",
|
|
124
174
|
audioBitRate: 128000,
|
|
125
175
|
audioCodecOptions: new CodecOptions(),
|
|
126
|
-
audioEncoder:
|
|
176
|
+
audioEncoder: undefined,
|
|
127
177
|
|
|
128
178
|
listEncoders: false,
|
|
129
179
|
listDisplays: false,
|
|
@@ -135,10 +185,7 @@ export class ScrcpyOptions2_0 extends ScrcpyOptionsBase<
|
|
|
135
185
|
}
|
|
136
186
|
|
|
137
187
|
constructor(init: ScrcpyOptionsInit2_0) {
|
|
138
|
-
super(
|
|
139
|
-
...ScrcpyOptions2_0.DEFAULTS,
|
|
140
|
-
...init,
|
|
141
|
-
});
|
|
188
|
+
super(ScrcpyOptions1_25, init, ScrcpyOptions2_0.DEFAULTS);
|
|
142
189
|
}
|
|
143
190
|
|
|
144
191
|
override serialize(): string[] {
|
|
@@ -254,86 +301,34 @@ export class ScrcpyOptions2_0 extends ScrcpyOptionsBase<
|
|
|
254
301
|
override parseAudioStreamMetadata(
|
|
255
302
|
stream: ReadableStream<Uint8Array>,
|
|
256
303
|
): ValueOrPromise<ScrcpyAudioStreamMetadata> {
|
|
257
|
-
return (
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
buffer,
|
|
265
|
-
false,
|
|
266
|
-
);
|
|
267
|
-
// Server will send `0x00_00_00_00` and `0x00_00_00_01` even if `sendCodecMeta` is false
|
|
268
|
-
switch (codecMetadataValue) {
|
|
269
|
-
case 0x00_00_00_00:
|
|
270
|
-
return {
|
|
271
|
-
type: "disabled",
|
|
272
|
-
};
|
|
273
|
-
case 0x00_00_00_01:
|
|
274
|
-
return {
|
|
275
|
-
type: "errored",
|
|
276
|
-
};
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
if (this.value.sendCodecMeta) {
|
|
280
|
-
let codec: ScrcpyAudioCodec;
|
|
281
|
-
switch (codecMetadataValue) {
|
|
304
|
+
return ScrcpyOptions2_0.parseAudioMetadata(
|
|
305
|
+
stream,
|
|
306
|
+
this.value.sendCodecMeta,
|
|
307
|
+
(value) => {
|
|
308
|
+
switch (value) {
|
|
309
|
+
case ScrcpyAudioCodec.RAW.metadataValue:
|
|
310
|
+
return ScrcpyAudioCodec.RAW;
|
|
282
311
|
case ScrcpyAudioCodec.OPUS.metadataValue:
|
|
283
|
-
|
|
284
|
-
break;
|
|
312
|
+
return ScrcpyAudioCodec.OPUS;
|
|
285
313
|
case ScrcpyAudioCodec.AAC.metadataValue:
|
|
286
|
-
|
|
287
|
-
break;
|
|
288
|
-
case ScrcpyAudioCodec.RAW.metadataValue:
|
|
289
|
-
codec = ScrcpyAudioCodec.RAW;
|
|
290
|
-
break;
|
|
314
|
+
return ScrcpyAudioCodec.AAC;
|
|
291
315
|
default:
|
|
292
316
|
throw new Error(
|
|
293
|
-
`Unknown audio codec metadata value: ${
|
|
317
|
+
`Unknown audio codec metadata value: ${value}`,
|
|
294
318
|
);
|
|
295
319
|
}
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
break;
|
|
309
|
-
case "aac":
|
|
310
|
-
codec = ScrcpyAudioCodec.AAC;
|
|
311
|
-
break;
|
|
312
|
-
case "raw":
|
|
313
|
-
codec = ScrcpyAudioCodec.RAW;
|
|
314
|
-
break;
|
|
315
|
-
}
|
|
316
|
-
return {
|
|
317
|
-
type: "success",
|
|
318
|
-
codec,
|
|
319
|
-
stream: new PushReadableStream<Uint8Array>(
|
|
320
|
-
async (controller) => {
|
|
321
|
-
// Put the first 4 bytes back
|
|
322
|
-
await controller.enqueue(buffer);
|
|
323
|
-
|
|
324
|
-
const stream = buffered.release();
|
|
325
|
-
const reader = stream.getReader();
|
|
326
|
-
while (true) {
|
|
327
|
-
const { done, value } = await reader.read();
|
|
328
|
-
if (done) {
|
|
329
|
-
break;
|
|
330
|
-
}
|
|
331
|
-
await controller.enqueue(value);
|
|
332
|
-
}
|
|
333
|
-
},
|
|
334
|
-
),
|
|
335
|
-
};
|
|
336
|
-
})();
|
|
320
|
+
},
|
|
321
|
+
() => {
|
|
322
|
+
switch (this.value.audioCodec) {
|
|
323
|
+
case "raw":
|
|
324
|
+
return ScrcpyAudioCodec.RAW;
|
|
325
|
+
case "opus":
|
|
326
|
+
return ScrcpyAudioCodec.OPUS;
|
|
327
|
+
case "aac":
|
|
328
|
+
return ScrcpyAudioCodec.AAC;
|
|
329
|
+
}
|
|
330
|
+
},
|
|
331
|
+
);
|
|
337
332
|
}
|
|
338
333
|
|
|
339
334
|
override serializeInjectTouchControlMessage(
|
package/src/options/2_1.ts
CHANGED
|
@@ -1,17 +1,14 @@
|
|
|
1
1
|
import { ScrcpyOptions1_21 } from "./1_21.js";
|
|
2
2
|
import type { ScrcpyOptionsInit2_0 } from "./2_0.js";
|
|
3
3
|
import { ScrcpyOptions2_0 } from "./2_0.js";
|
|
4
|
-
import {
|
|
4
|
+
import { ScrcpyOptions } from "./types.js";
|
|
5
5
|
|
|
6
6
|
export interface ScrcpyOptionsInit2_1 extends ScrcpyOptionsInit2_0 {
|
|
7
7
|
video?: boolean;
|
|
8
8
|
audioSource?: "output" | "mic";
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
-
export class ScrcpyOptions2_1 extends
|
|
12
|
-
ScrcpyOptionsInit2_1,
|
|
13
|
-
ScrcpyOptions2_0
|
|
14
|
-
> {
|
|
11
|
+
export class ScrcpyOptions2_1 extends ScrcpyOptions<ScrcpyOptionsInit2_1> {
|
|
15
12
|
static readonly DEFAULTS = {
|
|
16
13
|
...ScrcpyOptions2_0.DEFAULTS,
|
|
17
14
|
video: true,
|
|
@@ -23,10 +20,7 @@ export class ScrcpyOptions2_1 extends ScrcpyOptionsBase<
|
|
|
23
20
|
}
|
|
24
21
|
|
|
25
22
|
constructor(init: ScrcpyOptionsInit2_1) {
|
|
26
|
-
super(
|
|
27
|
-
...ScrcpyOptions2_1.DEFAULTS,
|
|
28
|
-
...init,
|
|
29
|
-
});
|
|
23
|
+
super(ScrcpyOptions2_0, init, ScrcpyOptions2_1.DEFAULTS);
|
|
30
24
|
}
|
|
31
25
|
|
|
32
26
|
override serialize(): string[] {
|
package/src/options/2_2.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { ScrcpyOptions1_21 } from "./1_21.js";
|
|
|
2
2
|
import type { ScrcpyOptionsInit2_1 } from "./2_1.js";
|
|
3
3
|
import { ScrcpyOptions2_1 } from "./2_1.js";
|
|
4
4
|
import type { ScrcpyDisplay } from "./types.js";
|
|
5
|
-
import {
|
|
5
|
+
import { ScrcpyOptions } from "./types.js";
|
|
6
6
|
|
|
7
7
|
export interface ScrcpyOptionsInit2_2
|
|
8
8
|
extends Omit<ScrcpyOptionsInit2_1, "display"> {
|
|
@@ -19,10 +19,7 @@ export interface ScrcpyOptionsInit2_2
|
|
|
19
19
|
listCameraSizes?: boolean;
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
export class ScrcpyOptions2_2 extends
|
|
23
|
-
ScrcpyOptionsInit2_2,
|
|
24
|
-
ScrcpyOptions2_1
|
|
25
|
-
> {
|
|
22
|
+
export class ScrcpyOptions2_2 extends ScrcpyOptions<ScrcpyOptionsInit2_2> {
|
|
26
23
|
static readonly DEFAULTS = {
|
|
27
24
|
...ScrcpyOptions2_1.DEFAULTS,
|
|
28
25
|
videoSource: "display",
|
|
@@ -42,10 +39,7 @@ export class ScrcpyOptions2_2 extends ScrcpyOptionsBase<
|
|
|
42
39
|
}
|
|
43
40
|
|
|
44
41
|
constructor(init: ScrcpyOptionsInit2_2) {
|
|
45
|
-
super(
|
|
46
|
-
...ScrcpyOptions2_2.DEFAULTS,
|
|
47
|
-
...init,
|
|
48
|
-
});
|
|
42
|
+
super(ScrcpyOptions2_1, init, ScrcpyOptions2_2.DEFAULTS);
|
|
49
43
|
}
|
|
50
44
|
|
|
51
45
|
override parseDisplay(line: string): ScrcpyDisplay | undefined {
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import type { ReadableStream } from "@yume-chan/stream-extra";
|
|
2
|
+
import type { ValueOrPromise } from "@yume-chan/struct";
|
|
3
|
+
|
|
4
|
+
import { ScrcpyOptions1_21 } from "./1_21.js";
|
|
5
|
+
import { ScrcpyOptions2_0 } from "./2_0.js";
|
|
6
|
+
import type { ScrcpyOptionsInit2_2 } from "./2_2.js";
|
|
7
|
+
import { ScrcpyOptions2_2 } from "./2_2.js";
|
|
8
|
+
import type { ScrcpyAudioStreamMetadata } from "./codec.js";
|
|
9
|
+
import { ScrcpyAudioCodec } from "./codec.js";
|
|
10
|
+
import { ScrcpyOptions } from "./types.js";
|
|
11
|
+
|
|
12
|
+
export interface ScrcpyOptionsInit2_3
|
|
13
|
+
extends Omit<ScrcpyOptionsInit2_2, "audioCodec"> {
|
|
14
|
+
audioCodec?: "raw" | "opus" | "aac" | "flac";
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export class ScrcpyOptions2_3 extends ScrcpyOptions<ScrcpyOptionsInit2_3> {
|
|
18
|
+
static readonly DEFAULTS = {
|
|
19
|
+
...ScrcpyOptions2_2.DEFAULTS,
|
|
20
|
+
} as const satisfies Required<ScrcpyOptionsInit2_3>;
|
|
21
|
+
|
|
22
|
+
override get defaults(): Required<ScrcpyOptionsInit2_3> {
|
|
23
|
+
return ScrcpyOptions2_3.DEFAULTS;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
constructor(init: ScrcpyOptionsInit2_3) {
|
|
27
|
+
super(ScrcpyOptions2_2, init, ScrcpyOptions2_3.DEFAULTS);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
override serialize(): string[] {
|
|
31
|
+
return ScrcpyOptions1_21.serialize(this.value, this.defaults);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
override parseAudioStreamMetadata(
|
|
35
|
+
stream: ReadableStream<Uint8Array>,
|
|
36
|
+
): ValueOrPromise<ScrcpyAudioStreamMetadata> {
|
|
37
|
+
return ScrcpyOptions2_0.parseAudioMetadata(
|
|
38
|
+
stream,
|
|
39
|
+
this.value.sendCodecMeta,
|
|
40
|
+
(value) => {
|
|
41
|
+
switch (value) {
|
|
42
|
+
case ScrcpyAudioCodec.RAW.metadataValue:
|
|
43
|
+
return ScrcpyAudioCodec.RAW;
|
|
44
|
+
case ScrcpyAudioCodec.OPUS.metadataValue:
|
|
45
|
+
return ScrcpyAudioCodec.OPUS;
|
|
46
|
+
case ScrcpyAudioCodec.AAC.metadataValue:
|
|
47
|
+
return ScrcpyAudioCodec.AAC;
|
|
48
|
+
case ScrcpyAudioCodec.FLAC.metadataValue:
|
|
49
|
+
return ScrcpyAudioCodec.FLAC;
|
|
50
|
+
default:
|
|
51
|
+
throw new Error(
|
|
52
|
+
`Unknown audio codec metadata value: ${value}`,
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
() => {
|
|
57
|
+
switch (this.value.audioCodec) {
|
|
58
|
+
case "raw":
|
|
59
|
+
return ScrcpyAudioCodec.RAW;
|
|
60
|
+
case "opus":
|
|
61
|
+
return ScrcpyAudioCodec.OPUS;
|
|
62
|
+
case "aac":
|
|
63
|
+
return ScrcpyAudioCodec.AAC;
|
|
64
|
+
case "flac":
|
|
65
|
+
return ScrcpyAudioCodec.FLAC;
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
}
|
package/src/options/codec.ts
CHANGED
|
@@ -33,6 +33,12 @@ export class ScrcpyAudioCodec implements ScrcpyOptionValue {
|
|
|
33
33
|
"audio/aac",
|
|
34
34
|
"mp4a.66",
|
|
35
35
|
);
|
|
36
|
+
static readonly FLAC = new ScrcpyAudioCodec(
|
|
37
|
+
"flac",
|
|
38
|
+
0x66_6c_61_63,
|
|
39
|
+
"audio/flac",
|
|
40
|
+
"flac",
|
|
41
|
+
);
|
|
36
42
|
static readonly RAW = new ScrcpyAudioCodec(
|
|
37
43
|
"raw",
|
|
38
44
|
0x00_72_61_77,
|
package/src/options/index.ts
CHANGED
package/src/options/latest.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ScrcpyLogLevel1_18, ScrcpyVideoOrientation1_18 } from "./1_18.js";
|
|
2
|
-
import type {
|
|
3
|
-
import {
|
|
2
|
+
import type { ScrcpyOptionsInit2_3 } from "./2_3.js";
|
|
3
|
+
import { ScrcpyOptions2_3 } from "./2_3.js";
|
|
4
4
|
|
|
5
5
|
export const ScrcpyLogLevel = ScrcpyLogLevel1_18;
|
|
6
6
|
export type ScrcpyLogLevel = ScrcpyLogLevel1_18;
|
|
@@ -8,5 +8,5 @@ export type ScrcpyLogLevel = ScrcpyLogLevel1_18;
|
|
|
8
8
|
export const ScrcpyVideoOrientation = ScrcpyVideoOrientation1_18;
|
|
9
9
|
export type ScrcpyVideoOrientation = ScrcpyVideoOrientation1_18;
|
|
10
10
|
|
|
11
|
-
export type ScrcpyOptionsInitLatest =
|
|
12
|
-
export class ScrcpyOptionsLatest extends
|
|
11
|
+
export type ScrcpyOptionsInitLatest = ScrcpyOptionsInit2_3;
|
|
12
|
+
export class ScrcpyOptionsLatest extends ScrcpyOptions2_3 {}
|