@yume-chan/scrcpy 0.0.20 → 0.0.22
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 +33 -0
- package/CHANGELOG.md +18 -1
- package/README.md +8 -122
- package/esm/codec/av1.js +2 -2
- package/esm/codec/av1.js.map +1 -1
- package/esm/codec/h264.js +2 -2
- package/esm/codec/h264.js.map +1 -1
- package/esm/codec/h265.d.ts +72 -4
- package/esm/codec/h265.d.ts.map +1 -1
- package/esm/codec/h265.js +18 -19
- package/esm/codec/h265.js.map +1 -1
- package/esm/codec/nalu.d.ts +1 -8
- package/esm/codec/nalu.d.ts.map +1 -1
- package/esm/codec/nalu.js +53 -40
- package/esm/codec/nalu.js.map +1 -1
- package/esm/control/hover-helper.d.ts +1 -1
- package/esm/control/hover-helper.d.ts.map +1 -1
- package/esm/control/hover-helper.js +8 -9
- package/esm/control/hover-helper.js.map +1 -1
- package/esm/control/inject-keycode.d.ts +13 -13
- package/esm/control/inject-keycode.d.ts.map +1 -1
- package/esm/control/inject-keycode.js +3 -3
- package/esm/control/inject-keycode.js.map +1 -1
- package/esm/control/inject-touch.d.ts.map +1 -1
- package/esm/control/inject-touch.js +3 -4
- package/esm/control/inject-touch.js.map +1 -1
- package/esm/control/serializer.d.ts +4 -3
- package/esm/control/serializer.d.ts.map +1 -1
- package/esm/control/serializer.js +30 -14
- package/esm/control/serializer.js.map +1 -1
- package/esm/control/set-screen-power-mode.js +1 -1
- package/esm/control/set-screen-power-mode.js.map +1 -1
- package/esm/control/type.d.ts +1 -1
- package/esm/control/type.d.ts.map +1 -1
- package/esm/control/type.js +4 -4
- package/esm/control/type.js.map +1 -1
- package/esm/control/writer.d.ts +5 -3
- package/esm/control/writer.d.ts.map +1 -1
- package/esm/control/writer.js +23 -14
- package/esm/control/writer.js.map +1 -1
- package/esm/device-message/stream.js.map +1 -1
- package/esm/device-message/type.js +1 -1
- package/esm/device-message/type.js.map +1 -1
- package/esm/options/1_16/codec-options.d.ts +2 -2
- package/esm/options/1_16/codec-options.d.ts.map +1 -1
- package/esm/options/1_16/codec-options.js +15 -5
- package/esm/options/1_16/codec-options.js.map +1 -1
- package/esm/options/1_16/float-to-uint16.js.map +1 -1
- package/esm/options/1_16/init.js +2 -2
- package/esm/options/1_16/init.js.map +1 -1
- package/esm/options/1_16/options.d.ts +1 -1
- package/esm/options/1_16/options.d.ts.map +1 -1
- package/esm/options/1_16/options.js +2 -3
- package/esm/options/1_16/options.js.map +1 -1
- package/esm/options/1_16/scroll.d.ts +1 -2
- package/esm/options/1_16/scroll.d.ts.map +1 -1
- package/esm/options/1_16/scroll.js +12 -12
- package/esm/options/1_16/scroll.js.map +1 -1
- package/esm/options/1_17.d.ts +1 -1
- package/esm/options/1_17.d.ts.map +1 -1
- package/esm/options/1_17.js +1 -2
- package/esm/options/1_17.js.map +1 -1
- package/esm/options/1_18.d.ts +1 -1
- package/esm/options/1_18.d.ts.map +1 -1
- package/esm/options/1_18.js +3 -4
- package/esm/options/1_18.js.map +1 -1
- package/esm/options/1_21.d.ts +1 -1
- package/esm/options/1_21.d.ts.map +1 -1
- package/esm/options/1_21.js +1 -2
- package/esm/options/1_21.js.map +1 -1
- package/esm/options/1_22/options.d.ts +1 -1
- package/esm/options/1_22/options.d.ts.map +1 -1
- package/esm/options/1_22/options.js +1 -2
- package/esm/options/1_22/options.js.map +1 -1
- package/esm/options/1_22/scroll.d.ts.map +1 -1
- package/esm/options/1_22/scroll.js.map +1 -1
- package/esm/options/1_23.d.ts +1 -1
- package/esm/options/1_23.d.ts.map +1 -1
- package/esm/options/1_23.js +1 -2
- package/esm/options/1_23.js.map +1 -1
- package/esm/options/1_24.d.ts +1 -1
- package/esm/options/1_24.d.ts.map +1 -1
- package/esm/options/1_24.js +1 -2
- package/esm/options/1_24.js.map +1 -1
- package/esm/options/1_25/options.d.ts.map +1 -1
- package/esm/options/1_25/options.js.map +1 -1
- package/esm/options/2_0.d.ts +1 -1
- package/esm/options/2_0.d.ts.map +1 -1
- package/esm/options/2_0.js +2 -4
- package/esm/options/2_0.js.map +1 -1
- package/esm/options/2_1.d.ts +48 -0
- package/esm/options/2_1.d.ts.map +1 -0
- package/esm/options/2_1.js +23 -0
- package/esm/options/2_1.js.map +1 -0
- package/esm/options/2_2.d.ts +67 -0
- package/esm/options/2_2.d.ts.map +1 -0
- package/esm/options/2_2.js +44 -0
- package/esm/options/2_2.js.map +1 -0
- package/esm/options/codec.d.ts.map +1 -1
- package/esm/options/codec.js +3 -4
- package/esm/options/codec.js.map +1 -1
- package/esm/options/index.d.ts +2 -0
- package/esm/options/index.d.ts.map +1 -1
- package/esm/options/index.js +2 -0
- package/esm/options/index.js.map +1 -1
- package/esm/options/latest.d.ts +4 -5
- package/esm/options/latest.d.ts.map +1 -1
- package/esm/options/latest.js +2 -3
- package/esm/options/latest.js.map +1 -1
- package/esm/options/types.d.ts +1 -0
- package/esm/options/types.d.ts.map +1 -1
- package/esm/options/types.js +15 -0
- package/esm/options/types.js.map +1 -1
- package/package.json +10 -22
- package/src/codec/h265.ts +40 -31
- package/src/codec/nalu.ts +73 -55
- package/src/control/hover-helper.ts +10 -11
- package/src/control/inject-touch.ts +0 -1
- package/src/control/serializer.ts +56 -35
- package/src/control/type.ts +7 -7
- package/src/control/writer.ts +40 -30
- package/src/device-message/stream.ts +2 -2
- package/src/options/1_16/codec-options.ts +22 -7
- package/src/options/1_16/float-to-uint16.ts +1 -1
- package/src/options/1_16/options.ts +32 -36
- package/src/options/1_16/scroll.ts +16 -16
- package/src/options/1_17.ts +11 -11
- package/src/options/1_18.ts +12 -12
- package/src/options/1_21.ts +9 -9
- package/src/options/1_22/options.ts +7 -7
- package/src/options/1_22/scroll.ts +2 -2
- package/src/options/1_23.ts +6 -6
- package/src/options/1_24.ts +4 -4
- package/src/options/1_25/options.ts +4 -4
- package/src/options/1_25/scroll.ts +2 -2
- package/src/options/2_0.ts +25 -25
- package/src/options/2_1.ts +35 -0
- package/src/options/2_2.ts +68 -0
- package/src/options/codec.ts +13 -13
- package/src/options/index.ts +2 -0
- package/src/options/latest.ts +4 -6
- package/src/options/types.ts +47 -28
- package/tsconfig.build.tsbuildinfo +1 -1
- package/bin/scrcpy-server +0 -0
- package/bin/version.d.ts +0 -1
- package/bin/version.js +0 -1
- package/scripts/fetch-server.cjs +0 -38
package/src/options/1_17.ts
CHANGED
|
@@ -11,19 +11,19 @@ export class ScrcpyOptions1_17 extends ScrcpyOptionsBase<
|
|
|
11
11
|
ScrcpyOptionsInit1_17,
|
|
12
12
|
ScrcpyOptions1_16
|
|
13
13
|
> {
|
|
14
|
-
|
|
14
|
+
static readonly DEFAULTS = {
|
|
15
15
|
...ScrcpyOptions1_16.DEFAULTS,
|
|
16
16
|
encoderName: undefined,
|
|
17
17
|
} as const satisfies Required<ScrcpyOptionsInit1_17>;
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
static readonly SERIALIZE_ORDER = [
|
|
20
20
|
...ScrcpyOptions1_16.SERIALIZE_ORDER,
|
|
21
21
|
"encoderName",
|
|
22
22
|
] as const satisfies readonly (keyof ScrcpyOptionsInit1_17)[];
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
static parseEncoder(
|
|
25
25
|
line: string,
|
|
26
|
-
encoderNameRegex: RegExp
|
|
26
|
+
encoderNameRegex: RegExp,
|
|
27
27
|
): ScrcpyEncoder | undefined {
|
|
28
28
|
const match = line.match(encoderNameRegex);
|
|
29
29
|
if (match) {
|
|
@@ -32,35 +32,35 @@ export class ScrcpyOptions1_17 extends ScrcpyOptionsBase<
|
|
|
32
32
|
return undefined;
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
override get defaults(): Required<ScrcpyOptionsInit1_17> {
|
|
36
36
|
return ScrcpyOptions1_17.DEFAULTS;
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
-
|
|
39
|
+
constructor(init: ScrcpyOptionsInit1_17) {
|
|
40
40
|
super(new ScrcpyOptions1_16(init), {
|
|
41
41
|
...ScrcpyOptions1_17.DEFAULTS,
|
|
42
42
|
...init,
|
|
43
43
|
});
|
|
44
44
|
}
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
override serialize(): string[] {
|
|
47
47
|
return ScrcpyOptions1_16.serialize(
|
|
48
48
|
this.value,
|
|
49
|
-
ScrcpyOptions1_17.SERIALIZE_ORDER
|
|
49
|
+
ScrcpyOptions1_17.SERIALIZE_ORDER,
|
|
50
50
|
);
|
|
51
51
|
}
|
|
52
52
|
|
|
53
|
-
|
|
53
|
+
override setListEncoders() {
|
|
54
54
|
// Set to an invalid value
|
|
55
55
|
// Server will print valid values before crashing
|
|
56
56
|
// (server will crash after opening video and control sockets)
|
|
57
57
|
this.value.encoderName = "_";
|
|
58
58
|
}
|
|
59
59
|
|
|
60
|
-
|
|
60
|
+
override parseEncoder(line: string): ScrcpyEncoder | undefined {
|
|
61
61
|
return ScrcpyOptions1_17.parseEncoder(
|
|
62
62
|
line,
|
|
63
|
-
/\s+scrcpy --encoder-name '(.*?)'
|
|
63
|
+
/\s+scrcpy --encoder-name '(.*?)'/,
|
|
64
64
|
);
|
|
65
65
|
}
|
|
66
66
|
}
|
package/src/options/1_18.ts
CHANGED
|
@@ -56,7 +56,7 @@ export const SCRCPY_CONTROL_MESSAGE_TYPES_1_18 =
|
|
|
56
56
|
SCRCPY_CONTROL_MESSAGE_TYPES_1_18.splice(
|
|
57
57
|
6,
|
|
58
58
|
0,
|
|
59
|
-
ScrcpyControlMessageType.ExpandSettingPanel
|
|
59
|
+
ScrcpyControlMessageType.ExpandSettingPanel,
|
|
60
60
|
);
|
|
61
61
|
|
|
62
62
|
const LOG_LEVEL_MAP = {
|
|
@@ -82,23 +82,23 @@ export class ScrcpyOptions1_18 extends ScrcpyOptionsBase<
|
|
|
82
82
|
ScrcpyOptionsInit1_18,
|
|
83
83
|
ScrcpyOptions1_17
|
|
84
84
|
> {
|
|
85
|
-
|
|
85
|
+
static readonly DEFAULTS = {
|
|
86
86
|
...ScrcpyOptions1_17.DEFAULTS,
|
|
87
87
|
logLevel: ScrcpyLogLevel1_18.Debug,
|
|
88
88
|
lockVideoOrientation: ScrcpyVideoOrientation1_18.Unlocked,
|
|
89
89
|
powerOffOnClose: false,
|
|
90
90
|
} as const satisfies Required<ScrcpyOptionsInit1_18>;
|
|
91
91
|
|
|
92
|
-
|
|
92
|
+
static readonly SERIALIZE_ORDER = [
|
|
93
93
|
...ScrcpyOptions1_17.SERIALIZE_ORDER,
|
|
94
94
|
"powerOffOnClose",
|
|
95
95
|
] as const satisfies readonly (keyof ScrcpyOptionsInit1_18)[];
|
|
96
96
|
|
|
97
|
-
|
|
97
|
+
override get defaults(): Required<ScrcpyOptionsInit1_18> {
|
|
98
98
|
return ScrcpyOptions1_18.DEFAULTS;
|
|
99
99
|
}
|
|
100
100
|
|
|
101
|
-
|
|
101
|
+
override get controlMessageTypes() {
|
|
102
102
|
return SCRCPY_CONTROL_MESSAGE_TYPES_1_18;
|
|
103
103
|
}
|
|
104
104
|
|
|
@@ -111,26 +111,26 @@ export class ScrcpyOptions1_18 extends ScrcpyOptionsBase<
|
|
|
111
111
|
lockVideoOrientation:
|
|
112
112
|
VIDEO_ORIENTATION_MAP[value.lockVideoOrientation],
|
|
113
113
|
}),
|
|
114
|
-
value
|
|
114
|
+
value,
|
|
115
115
|
);
|
|
116
116
|
}
|
|
117
117
|
|
|
118
|
-
|
|
118
|
+
override serialize(): string[] {
|
|
119
119
|
return ScrcpyOptions1_16.serialize(
|
|
120
120
|
this.value,
|
|
121
|
-
ScrcpyOptions1_18.SERIALIZE_ORDER
|
|
121
|
+
ScrcpyOptions1_18.SERIALIZE_ORDER,
|
|
122
122
|
);
|
|
123
123
|
}
|
|
124
124
|
|
|
125
|
-
|
|
125
|
+
override parseEncoder(line: string): ScrcpyEncoder | undefined {
|
|
126
126
|
return ScrcpyOptions1_17.parseEncoder(
|
|
127
127
|
line,
|
|
128
|
-
/\s+scrcpy --encoder '(.*?)'
|
|
128
|
+
/\s+scrcpy --encoder '(.*?)'/,
|
|
129
129
|
);
|
|
130
130
|
}
|
|
131
131
|
|
|
132
|
-
|
|
133
|
-
message: ScrcpyBackOrScreenOnControlMessage
|
|
132
|
+
override serializeBackOrScreenOnControlMessage(
|
|
133
|
+
message: ScrcpyBackOrScreenOnControlMessage,
|
|
134
134
|
) {
|
|
135
135
|
return ScrcpyBackOrScreenOnControlMessage1_18.serialize(message);
|
|
136
136
|
}
|
package/src/options/1_21.ts
CHANGED
|
@@ -30,14 +30,14 @@ export class ScrcpyOptions1_21 extends ScrcpyOptionsBase<
|
|
|
30
30
|
ScrcpyOptionsInit1_21,
|
|
31
31
|
ScrcpyOptions1_18
|
|
32
32
|
> {
|
|
33
|
-
|
|
33
|
+
static readonly DEFAULTS = {
|
|
34
34
|
...ScrcpyOptions1_18.DEFAULTS,
|
|
35
35
|
clipboardAutosync: true,
|
|
36
36
|
} as const satisfies Required<ScrcpyOptionsInit1_21>;
|
|
37
37
|
|
|
38
|
-
|
|
38
|
+
static serialize<T extends object>(
|
|
39
39
|
options: T,
|
|
40
|
-
defaults: Required<T
|
|
40
|
+
defaults: Required<T>,
|
|
41
41
|
): string[] {
|
|
42
42
|
// 1.21 changed the format of arguments
|
|
43
43
|
const result: string[] = [];
|
|
@@ -49,7 +49,7 @@ export class ScrcpyOptions1_21 extends ScrcpyOptionsBase<
|
|
|
49
49
|
|
|
50
50
|
const defaultValue = toScrcpyOptionValue(
|
|
51
51
|
defaults[key as keyof T],
|
|
52
|
-
undefined
|
|
52
|
+
undefined,
|
|
53
53
|
);
|
|
54
54
|
if (serializedValue == defaultValue) {
|
|
55
55
|
continue;
|
|
@@ -60,23 +60,23 @@ export class ScrcpyOptions1_21 extends ScrcpyOptionsBase<
|
|
|
60
60
|
return result;
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
-
|
|
63
|
+
override get defaults(): Required<ScrcpyOptionsInit1_21> {
|
|
64
64
|
return ScrcpyOptions1_21.DEFAULTS;
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
-
|
|
67
|
+
constructor(init: ScrcpyOptionsInit1_21) {
|
|
68
68
|
super(new ScrcpyOptions1_18(init), {
|
|
69
69
|
...ScrcpyOptions1_21.DEFAULTS,
|
|
70
70
|
...init,
|
|
71
71
|
});
|
|
72
72
|
}
|
|
73
73
|
|
|
74
|
-
|
|
74
|
+
override serialize(): string[] {
|
|
75
75
|
return ScrcpyOptions1_21.serialize(this.value, this.defaults);
|
|
76
76
|
}
|
|
77
77
|
|
|
78
|
-
|
|
79
|
-
message: ScrcpySetClipboardControlMessage
|
|
78
|
+
override serializeSetClipboardControlMessage(
|
|
79
|
+
message: ScrcpySetClipboardControlMessage,
|
|
80
80
|
): Uint8Array {
|
|
81
81
|
return ScrcpySetClipboardControlMessage1_21.serialize(message);
|
|
82
82
|
}
|
|
@@ -14,26 +14,26 @@ export class ScrcpyOptions1_22 extends ScrcpyOptionsBase<
|
|
|
14
14
|
ScrcpyOptionsInit1_22,
|
|
15
15
|
ScrcpyOptions1_21
|
|
16
16
|
> {
|
|
17
|
-
|
|
17
|
+
static readonly DEFAULTS = {
|
|
18
18
|
...ScrcpyOptions1_21.DEFAULTS,
|
|
19
19
|
downsizeOnError: true,
|
|
20
20
|
sendDeviceMeta: true,
|
|
21
21
|
sendDummyByte: true,
|
|
22
22
|
} as const satisfies Required<ScrcpyOptionsInit1_22>;
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
override get defaults(): Required<ScrcpyOptionsInit1_22> {
|
|
25
25
|
return ScrcpyOptions1_22.DEFAULTS;
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
constructor(init: ScrcpyOptionsInit1_22) {
|
|
29
29
|
super(new ScrcpyOptions1_21(init), {
|
|
30
30
|
...ScrcpyOptions1_22.DEFAULTS,
|
|
31
31
|
...init,
|
|
32
32
|
});
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
-
|
|
36
|
-
stream: ReadableStream<Uint8Array
|
|
35
|
+
override parseVideoStreamMetadata(
|
|
36
|
+
stream: ReadableStream<Uint8Array>,
|
|
37
37
|
): ValueOrPromise<ScrcpyVideoStream> {
|
|
38
38
|
if (!this.value.sendDeviceMeta) {
|
|
39
39
|
return { stream, metadata: { codec: ScrcpyVideoCodecId.H264 } };
|
|
@@ -42,11 +42,11 @@ export class ScrcpyOptions1_22 extends ScrcpyOptionsBase<
|
|
|
42
42
|
}
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
override serialize(): string[] {
|
|
46
46
|
return ScrcpyOptions1_21.serialize(this.value, this.defaults);
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
-
|
|
49
|
+
override createScrollController(): ScrcpyScrollController {
|
|
50
50
|
return new ScrcpyScrollController1_22();
|
|
51
51
|
}
|
|
52
52
|
}
|
|
@@ -13,8 +13,8 @@ export type ScrcpyInjectScrollControlMessage1_22 =
|
|
|
13
13
|
(typeof ScrcpyInjectScrollControlMessage1_22)["TInit"];
|
|
14
14
|
|
|
15
15
|
export class ScrcpyScrollController1_22 extends ScrcpyScrollController1_16 {
|
|
16
|
-
|
|
17
|
-
message: ScrcpyInjectScrollControlMessage1_22
|
|
16
|
+
override serializeScrollMessage(
|
|
17
|
+
message: ScrcpyInjectScrollControlMessage1_22,
|
|
18
18
|
): Uint8Array | undefined {
|
|
19
19
|
const processed = this.processMessage(message);
|
|
20
20
|
if (!processed) {
|
package/src/options/1_23.ts
CHANGED
|
@@ -16,27 +16,27 @@ export class ScrcpyOptions1_23 extends ScrcpyOptionsBase<
|
|
|
16
16
|
ScrcpyOptionsInit1_23,
|
|
17
17
|
ScrcpyOptions1_22
|
|
18
18
|
> {
|
|
19
|
-
|
|
19
|
+
static readonly DEFAULTS = {
|
|
20
20
|
...ScrcpyOptions1_22.DEFAULTS,
|
|
21
21
|
cleanup: true,
|
|
22
22
|
} as const satisfies Required<ScrcpyOptionsInit1_23>;
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
override get defaults(): Required<ScrcpyOptionsInit1_23> {
|
|
25
25
|
return ScrcpyOptions1_23.DEFAULTS;
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
constructor(init: ScrcpyOptionsInit1_22) {
|
|
29
29
|
super(new ScrcpyOptions1_22(init), {
|
|
30
30
|
...ScrcpyOptions1_23.DEFAULTS,
|
|
31
31
|
...init,
|
|
32
32
|
});
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
override serialize(): string[] {
|
|
36
36
|
return ScrcpyOptions1_21.serialize(this.value, this.defaults);
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
-
|
|
39
|
+
override createMediaStreamTransformer(): TransformStream<
|
|
40
40
|
Uint8Array,
|
|
41
41
|
ScrcpyMediaStreamPacket
|
|
42
42
|
> {
|
|
@@ -61,7 +61,7 @@ export class ScrcpyOptions1_23 extends ScrcpyOptionsBase<
|
|
|
61
61
|
|
|
62
62
|
controller.enqueue(packet);
|
|
63
63
|
},
|
|
64
|
-
})
|
|
64
|
+
}),
|
|
65
65
|
),
|
|
66
66
|
};
|
|
67
67
|
}
|
package/src/options/1_24.ts
CHANGED
|
@@ -11,23 +11,23 @@ export class ScrcpyOptions1_24 extends ScrcpyOptionsBase<
|
|
|
11
11
|
ScrcpyOptionsInit1_24,
|
|
12
12
|
ScrcpyOptions1_23
|
|
13
13
|
> {
|
|
14
|
-
|
|
14
|
+
static readonly DEFAULTS = {
|
|
15
15
|
...ScrcpyOptions1_23.DEFAULTS,
|
|
16
16
|
powerOn: true,
|
|
17
17
|
} as const satisfies Required<ScrcpyOptionsInit1_24>;
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
override get defaults(): Required<ScrcpyOptionsInit1_24> {
|
|
20
20
|
return ScrcpyOptions1_24.DEFAULTS;
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
constructor(init: ScrcpyOptionsInit1_24) {
|
|
24
24
|
super(new ScrcpyOptions1_23(init), {
|
|
25
25
|
...ScrcpyOptions1_24.DEFAULTS,
|
|
26
26
|
...init,
|
|
27
27
|
});
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
override serialize(): string[] {
|
|
31
31
|
return ScrcpyOptions1_21.serialize(this.value, this.defaults);
|
|
32
32
|
}
|
|
33
33
|
}
|
|
@@ -10,22 +10,22 @@ export class ScrcpyOptions1_25 extends ScrcpyOptionsBase<
|
|
|
10
10
|
ScrcpyOptionsInit1_24,
|
|
11
11
|
ScrcpyOptions1_24
|
|
12
12
|
> {
|
|
13
|
-
|
|
13
|
+
override get defaults(): Required<ScrcpyOptionsInit1_24> {
|
|
14
14
|
return ScrcpyOptions1_24.DEFAULTS;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
constructor(init: ScrcpyOptionsInit1_24) {
|
|
18
18
|
super(new ScrcpyOptions1_24(init), {
|
|
19
19
|
...ScrcpyOptions1_24.DEFAULTS,
|
|
20
20
|
...init,
|
|
21
21
|
});
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
override serialize(): string[] {
|
|
25
25
|
return ScrcpyOptions1_21.serialize(this.value, this.defaults);
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
override createScrollController(): ScrcpyScrollController {
|
|
29
29
|
return new ScrcpyScrollController1_25();
|
|
30
30
|
}
|
|
31
31
|
}
|
|
@@ -25,7 +25,7 @@ export const ScrcpyFloatToInt16NumberType: NumberFieldType = {
|
|
|
25
25
|
};
|
|
26
26
|
|
|
27
27
|
const ScrcpyFloatToInt16FieldDefinition = new NumberFieldDefinition(
|
|
28
|
-
ScrcpyFloatToInt16NumberType
|
|
28
|
+
ScrcpyFloatToInt16NumberType,
|
|
29
29
|
);
|
|
30
30
|
|
|
31
31
|
export const ScrcpyInjectScrollControlMessage1_25 = new Struct()
|
|
@@ -43,7 +43,7 @@ export type ScrcpyInjectScrollControlMessage1_25 =
|
|
|
43
43
|
|
|
44
44
|
export class ScrcpyScrollController1_25 implements ScrcpyScrollController {
|
|
45
45
|
serializeScrollMessage(
|
|
46
|
-
message: ScrcpyInjectScrollControlMessage
|
|
46
|
+
message: ScrcpyInjectScrollControlMessage,
|
|
47
47
|
): Uint8Array | undefined {
|
|
48
48
|
return ScrcpyInjectScrollControlMessage1_25.serialize(message);
|
|
49
49
|
}
|
package/src/options/2_0.ts
CHANGED
|
@@ -45,20 +45,20 @@ export type ScrcpyInjectTouchControlMessage2_0 =
|
|
|
45
45
|
(typeof ScrcpyInjectTouchControlMessage2_0)["TInit"];
|
|
46
46
|
|
|
47
47
|
export class ScrcpyInstanceId implements ScrcpyOptionValue {
|
|
48
|
-
|
|
48
|
+
static readonly NONE = new ScrcpyInstanceId(-1);
|
|
49
49
|
|
|
50
|
-
|
|
50
|
+
static random(): ScrcpyInstanceId {
|
|
51
51
|
// A random 31-bit unsigned integer
|
|
52
52
|
return new ScrcpyInstanceId((Math.random() * 0x80000000) | 0);
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
-
|
|
55
|
+
value: number;
|
|
56
56
|
|
|
57
|
-
|
|
57
|
+
constructor(value: number) {
|
|
58
58
|
this.value = value;
|
|
59
59
|
}
|
|
60
60
|
|
|
61
|
-
|
|
61
|
+
toOptionValue(): string | undefined {
|
|
62
62
|
if (this.value < 0) {
|
|
63
63
|
return undefined;
|
|
64
64
|
}
|
|
@@ -91,7 +91,7 @@ export interface ScrcpyOptionsInit2_0
|
|
|
91
91
|
|
|
92
92
|
function omit<T extends object, K extends keyof T>(
|
|
93
93
|
obj: T,
|
|
94
|
-
keys: K[]
|
|
94
|
+
keys: K[],
|
|
95
95
|
): Omit<T, K> {
|
|
96
96
|
const result: Record<PropertyKey, unknown> = {};
|
|
97
97
|
for (const key in obj) {
|
|
@@ -106,7 +106,7 @@ export class ScrcpyOptions2_0 extends ScrcpyOptionsBase<
|
|
|
106
106
|
ScrcpyOptionsInit2_0,
|
|
107
107
|
ScrcpyOptions1_25
|
|
108
108
|
> {
|
|
109
|
-
|
|
109
|
+
static readonly DEFAULTS = {
|
|
110
110
|
...omit(ScrcpyOptions1_24.DEFAULTS, [
|
|
111
111
|
"bitRate",
|
|
112
112
|
"codecOptions",
|
|
@@ -130,32 +130,32 @@ export class ScrcpyOptions2_0 extends ScrcpyOptionsBase<
|
|
|
130
130
|
sendCodecMeta: true,
|
|
131
131
|
} as const satisfies Required<ScrcpyOptionsInit2_0>;
|
|
132
132
|
|
|
133
|
-
|
|
133
|
+
override get defaults(): Required<ScrcpyOptionsInit2_0> {
|
|
134
134
|
return ScrcpyOptions2_0.DEFAULTS;
|
|
135
135
|
}
|
|
136
136
|
|
|
137
|
-
|
|
137
|
+
constructor(init: ScrcpyOptionsInit2_0) {
|
|
138
138
|
super(new ScrcpyOptions1_25(init), {
|
|
139
139
|
...ScrcpyOptions2_0.DEFAULTS,
|
|
140
140
|
...init,
|
|
141
141
|
});
|
|
142
142
|
}
|
|
143
143
|
|
|
144
|
-
|
|
144
|
+
override serialize(): string[] {
|
|
145
145
|
return ScrcpyOptions1_21.serialize(this.value, this.defaults);
|
|
146
146
|
}
|
|
147
147
|
|
|
148
|
-
|
|
148
|
+
override setListEncoders(): void {
|
|
149
149
|
this.value.listEncoders = true;
|
|
150
150
|
}
|
|
151
151
|
|
|
152
|
-
|
|
152
|
+
override setListDisplays(): void {
|
|
153
153
|
this.value.listDisplays = true;
|
|
154
154
|
}
|
|
155
155
|
|
|
156
|
-
|
|
156
|
+
override parseEncoder(line: string): ScrcpyEncoder | undefined {
|
|
157
157
|
let match = line.match(
|
|
158
|
-
/\s+--video-codec=(.*)\s+--video-encoder='(.*)'
|
|
158
|
+
/\s+--video-codec=(.*)\s+--video-encoder='(.*)'/,
|
|
159
159
|
);
|
|
160
160
|
if (match) {
|
|
161
161
|
return {
|
|
@@ -177,7 +177,7 @@ export class ScrcpyOptions2_0 extends ScrcpyOptionsBase<
|
|
|
177
177
|
return undefined;
|
|
178
178
|
}
|
|
179
179
|
|
|
180
|
-
|
|
180
|
+
override parseDisplay(line: string): ScrcpyDisplay | undefined {
|
|
181
181
|
const match = line.match(/\s+--display=(\d+)\s+\((.*?)\)/);
|
|
182
182
|
if (match) {
|
|
183
183
|
const display: ScrcpyDisplay = {
|
|
@@ -191,8 +191,8 @@ export class ScrcpyOptions2_0 extends ScrcpyOptionsBase<
|
|
|
191
191
|
return undefined;
|
|
192
192
|
}
|
|
193
193
|
|
|
194
|
-
|
|
195
|
-
stream: ReadableStream<Uint8Array
|
|
194
|
+
override parseVideoStreamMetadata(
|
|
195
|
+
stream: ReadableStream<Uint8Array>,
|
|
196
196
|
): ValueOrPromise<ScrcpyVideoStream> {
|
|
197
197
|
const { sendDeviceMeta, sendCodecMeta } = this.value;
|
|
198
198
|
if (!sendDeviceMeta && !sendCodecMeta) {
|
|
@@ -249,18 +249,18 @@ export class ScrcpyOptions2_0 extends ScrcpyOptionsBase<
|
|
|
249
249
|
})();
|
|
250
250
|
}
|
|
251
251
|
|
|
252
|
-
|
|
253
|
-
stream: ReadableStream<Uint8Array
|
|
252
|
+
override parseAudioStreamMetadata(
|
|
253
|
+
stream: ReadableStream<Uint8Array>,
|
|
254
254
|
): ValueOrPromise<ScrcpyAudioStreamMetadata> {
|
|
255
255
|
return (async (): Promise<ScrcpyAudioStreamMetadata> => {
|
|
256
256
|
const buffered = new BufferedReadableStream(stream);
|
|
257
257
|
const buffer = await buffered.readExactly(
|
|
258
|
-
NumberFieldType.Uint32.size
|
|
258
|
+
NumberFieldType.Uint32.size,
|
|
259
259
|
);
|
|
260
260
|
|
|
261
261
|
const codecMetadataValue = NumberFieldType.Uint32.deserialize(
|
|
262
262
|
buffer,
|
|
263
|
-
false
|
|
263
|
+
false,
|
|
264
264
|
);
|
|
265
265
|
// Server will send `0x00_00_00_00` and `0x00_00_00_01` even if `sendCodecMeta` is false
|
|
266
266
|
switch (codecMetadataValue) {
|
|
@@ -288,7 +288,7 @@ export class ScrcpyOptions2_0 extends ScrcpyOptionsBase<
|
|
|
288
288
|
break;
|
|
289
289
|
default:
|
|
290
290
|
throw new Error(
|
|
291
|
-
`Unknown audio codec metadata value: ${codecMetadataValue}
|
|
291
|
+
`Unknown audio codec metadata value: ${codecMetadataValue}`,
|
|
292
292
|
);
|
|
293
293
|
}
|
|
294
294
|
return {
|
|
@@ -328,14 +328,14 @@ export class ScrcpyOptions2_0 extends ScrcpyOptionsBase<
|
|
|
328
328
|
}
|
|
329
329
|
await controller.enqueue(value);
|
|
330
330
|
}
|
|
331
|
-
}
|
|
331
|
+
},
|
|
332
332
|
),
|
|
333
333
|
};
|
|
334
334
|
})();
|
|
335
335
|
}
|
|
336
336
|
|
|
337
|
-
|
|
338
|
-
message: ScrcpyInjectTouchControlMessage
|
|
337
|
+
override serializeInjectTouchControlMessage(
|
|
338
|
+
message: ScrcpyInjectTouchControlMessage,
|
|
339
339
|
): Uint8Array {
|
|
340
340
|
return ScrcpyInjectTouchControlMessage2_0.serialize(message);
|
|
341
341
|
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { ScrcpyOptions1_21 } from "./1_21.js";
|
|
2
|
+
import type { ScrcpyOptionsInit2_0 } from "./2_0.js";
|
|
3
|
+
import { ScrcpyOptions2_0 } from "./2_0.js";
|
|
4
|
+
import { ScrcpyOptionsBase } from "./types.js";
|
|
5
|
+
|
|
6
|
+
export interface ScrcpyOptionsInit2_1 extends ScrcpyOptionsInit2_0 {
|
|
7
|
+
video?: boolean;
|
|
8
|
+
audioSource?: "output" | "mic";
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export class ScrcpyOptions2_1 extends ScrcpyOptionsBase<
|
|
12
|
+
ScrcpyOptionsInit2_1,
|
|
13
|
+
ScrcpyOptions2_0
|
|
14
|
+
> {
|
|
15
|
+
static readonly DEFAULTS = {
|
|
16
|
+
...ScrcpyOptions2_0.DEFAULTS,
|
|
17
|
+
video: true,
|
|
18
|
+
audioSource: "output",
|
|
19
|
+
} as const satisfies Required<ScrcpyOptionsInit2_1>;
|
|
20
|
+
|
|
21
|
+
override get defaults(): Required<ScrcpyOptionsInit2_1> {
|
|
22
|
+
return ScrcpyOptions2_1.DEFAULTS;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
constructor(init: ScrcpyOptionsInit2_1) {
|
|
26
|
+
super(new ScrcpyOptions2_0(init), {
|
|
27
|
+
...ScrcpyOptions2_1.DEFAULTS,
|
|
28
|
+
...init,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
override serialize(): string[] {
|
|
33
|
+
return ScrcpyOptions1_21.serialize(this.value, this.defaults);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { ScrcpyOptions1_21 } from "./1_21.js";
|
|
2
|
+
import type { ScrcpyOptionsInit2_1 } from "./2_1.js";
|
|
3
|
+
import { ScrcpyOptions2_1 } from "./2_1.js";
|
|
4
|
+
import type { ScrcpyDisplay } from "./types.js";
|
|
5
|
+
import { ScrcpyOptionsBase } from "./types.js";
|
|
6
|
+
|
|
7
|
+
export interface ScrcpyOptionsInit2_2
|
|
8
|
+
extends Omit<ScrcpyOptionsInit2_1, "display"> {
|
|
9
|
+
videoSource?: "display" | "camera";
|
|
10
|
+
displayId?: number;
|
|
11
|
+
cameraId?: string | undefined;
|
|
12
|
+
cameraSize?: string | undefined;
|
|
13
|
+
cameraFacing?: "front" | "back" | "external" | undefined;
|
|
14
|
+
cameraAr?: string | undefined;
|
|
15
|
+
cameraFps?: number | undefined;
|
|
16
|
+
cameraHighSpeed?: boolean;
|
|
17
|
+
|
|
18
|
+
listCameras?: boolean;
|
|
19
|
+
listCameraSizes?: boolean;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export class ScrcpyOptions2_2 extends ScrcpyOptionsBase<
|
|
23
|
+
ScrcpyOptionsInit2_2,
|
|
24
|
+
ScrcpyOptions2_1
|
|
25
|
+
> {
|
|
26
|
+
static readonly DEFAULTS = {
|
|
27
|
+
...ScrcpyOptions2_1.DEFAULTS,
|
|
28
|
+
videoSource: "display",
|
|
29
|
+
displayId: 0,
|
|
30
|
+
cameraId: undefined,
|
|
31
|
+
cameraSize: undefined,
|
|
32
|
+
cameraFacing: undefined,
|
|
33
|
+
cameraAr: undefined,
|
|
34
|
+
cameraFps: undefined,
|
|
35
|
+
cameraHighSpeed: false,
|
|
36
|
+
listCameras: false,
|
|
37
|
+
listCameraSizes: false,
|
|
38
|
+
} as const satisfies Required<ScrcpyOptionsInit2_2>;
|
|
39
|
+
|
|
40
|
+
override get defaults(): Required<ScrcpyOptionsInit2_2> {
|
|
41
|
+
return ScrcpyOptions2_2.DEFAULTS;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
constructor(init: ScrcpyOptionsInit2_2) {
|
|
45
|
+
super(new ScrcpyOptions2_1(init), {
|
|
46
|
+
...ScrcpyOptions2_2.DEFAULTS,
|
|
47
|
+
...init,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
override parseDisplay(line: string): ScrcpyDisplay | undefined {
|
|
52
|
+
const match = line.match(/\s+--display-id=(\d+)\s+\((.*?)\)/);
|
|
53
|
+
if (match) {
|
|
54
|
+
const display: ScrcpyDisplay = {
|
|
55
|
+
id: Number.parseInt(match[1]!, 10),
|
|
56
|
+
};
|
|
57
|
+
if (match[2] !== "size unknown") {
|
|
58
|
+
display.resolution = match[2]!;
|
|
59
|
+
}
|
|
60
|
+
return display;
|
|
61
|
+
}
|
|
62
|
+
return undefined;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
override serialize(): string[] {
|
|
66
|
+
return ScrcpyOptions1_21.serialize(this.value, this.defaults);
|
|
67
|
+
}
|
|
68
|
+
}
|