@camera.ui/camera-ui-eufy 0.0.12 → 0.0.13
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/config.schema.json +8 -0
- package/dist/camera.d.ts +1 -0
- package/dist/camera.js +30 -23
- package/dist/camera.js.map +1 -1
- package/dist/types.d.ts +1 -0
- package/package.json +6 -6
package/config.schema.json
CHANGED
|
@@ -312,6 +312,14 @@
|
|
|
312
312
|
"defaultValue": "camera.ui",
|
|
313
313
|
"store": true
|
|
314
314
|
},
|
|
315
|
+
"useP2P": {
|
|
316
|
+
"type": "boolean",
|
|
317
|
+
"title": "Use P2P",
|
|
318
|
+
"description": "Use P2P for live stream",
|
|
319
|
+
"required": false,
|
|
320
|
+
"defaultValue": false,
|
|
321
|
+
"store": true
|
|
322
|
+
},
|
|
315
323
|
"maxLiveStreamDuration": {
|
|
316
324
|
"type": "number",
|
|
317
325
|
"title": "Max Live Stream Duration",
|
package/dist/camera.d.ts
CHANGED
|
@@ -12,6 +12,7 @@ export declare class Camera implements CameraDelegate {
|
|
|
12
12
|
private ffmpegPath?;
|
|
13
13
|
private rtspServer;
|
|
14
14
|
private localLivestreamManager;
|
|
15
|
+
private talkbackStream;
|
|
15
16
|
constructor(platform: Eufy, home: EufyHome, eufyClient: EufySecurity, eufyDevice: EufyCamera, logger: PluginLogger);
|
|
16
17
|
createCameraDevice(): Promise<void>;
|
|
17
18
|
snapshot(): Promise<ArrayBuffer | undefined>;
|
package/dist/camera.js
CHANGED
|
@@ -3,7 +3,6 @@ import { RTSPSingleServer } from '@camera.ui/rtsp';
|
|
|
3
3
|
import { PropertyName } from 'eufy-security-client';
|
|
4
4
|
import { LocalLivestreamManager } from './eufy/LocalLiveStreamManager.js';
|
|
5
5
|
import { TalkbackStream } from './eufy/Talkback.js';
|
|
6
|
-
import { is_rtsp_ready } from './eufy/utils.js';
|
|
7
6
|
export class Camera {
|
|
8
7
|
cameraDevice;
|
|
9
8
|
platform;
|
|
@@ -14,6 +13,7 @@ export class Camera {
|
|
|
14
13
|
ffmpegPath;
|
|
15
14
|
rtspServer;
|
|
16
15
|
localLivestreamManager;
|
|
16
|
+
talkbackStream;
|
|
17
17
|
constructor(platform, home, eufyClient, eufyDevice, logger) {
|
|
18
18
|
this.platform = platform;
|
|
19
19
|
this.home = home;
|
|
@@ -56,19 +56,7 @@ export class Camera {
|
|
|
56
56
|
}
|
|
57
57
|
this.cameraDevice.setDelegate('cameraDelegate', this);
|
|
58
58
|
this.localLivestreamManager = new LocalLivestreamManager(this.home, this.eufyClient, this.eufyDevice, this.cameraDevice, this.logger);
|
|
59
|
-
|
|
60
|
-
const client = this.rtspServer.getClient();
|
|
61
|
-
client.streamProcess.then(async (streamProcess) => {
|
|
62
|
-
const stationStream = await this.localLivestreamManager.getLocalLivestream();
|
|
63
|
-
stationStream.videostream.pipe(streamProcess.cp.stdio[4]);
|
|
64
|
-
stationStream.audiostream.pipe(streamProcess.cp.stdio[5]);
|
|
65
|
-
streamProcess.cp.on('exit', () => this.localLivestreamManager.stopLocalLiveStream());
|
|
66
|
-
});
|
|
67
|
-
client.talkbackProcess.then(async (talkbackProcess) => {
|
|
68
|
-
const talkbackStream = new TalkbackStream(this.home, this.eufyClient, this.eufyDevice, this.cameraDevice, this.logger);
|
|
69
|
-
talkbackProcess.cp.stdout?.pipe(talkbackStream);
|
|
70
|
-
});
|
|
71
|
-
}
|
|
59
|
+
this.talkbackStream = new TalkbackStream(this.home, this.eufyClient, this.eufyDevice, this.cameraDevice, this.logger);
|
|
72
60
|
const ffmpegPath = await this.platform.api.coreManager.getFFmpegPath();
|
|
73
61
|
this.rtspServer.changeFFmpegPath(ffmpegPath);
|
|
74
62
|
await this.cameraDevice.connect();
|
|
@@ -82,13 +70,7 @@ export class Camera {
|
|
|
82
70
|
}
|
|
83
71
|
async createRTSPServer() {
|
|
84
72
|
let stream;
|
|
85
|
-
if (
|
|
86
|
-
stream = {
|
|
87
|
-
name: 'Eufy',
|
|
88
|
-
url: this.eufyDevice.getPropertyValue(PropertyName.DeviceRTSPStreamUrl),
|
|
89
|
-
};
|
|
90
|
-
}
|
|
91
|
-
else {
|
|
73
|
+
if (this.home.useP2P) {
|
|
92
74
|
stream = {
|
|
93
75
|
name: 'Eufy',
|
|
94
76
|
addBackchannel: true,
|
|
@@ -103,15 +85,40 @@ export class Camera {
|
|
|
103
85
|
},
|
|
104
86
|
};
|
|
105
87
|
}
|
|
88
|
+
else {
|
|
89
|
+
stream = {
|
|
90
|
+
name: 'Eufy',
|
|
91
|
+
url: this.eufyDevice.getPropertyValue(PropertyName.DeviceRTSPStreamUrl),
|
|
92
|
+
};
|
|
93
|
+
}
|
|
106
94
|
const rtspLogger = {
|
|
107
95
|
// log: this.logger.log.bind(this.logger),
|
|
108
96
|
warn: this.logger.warn.bind(this.logger),
|
|
109
97
|
error: this.logger.error.bind(this.logger),
|
|
110
|
-
|
|
111
|
-
// trace: this.logger.trace.bind(this.logger),
|
|
98
|
+
debug: this.logger.trace.bind(this.logger),
|
|
112
99
|
};
|
|
113
100
|
this.rtspServer = await RTSPSingleServer.initialize({ stream }, rtspLogger);
|
|
114
101
|
await this.rtspServer.listen();
|
|
102
|
+
if (this.home.useP2P) {
|
|
103
|
+
const client = this.rtspServer.getClient();
|
|
104
|
+
client.onStreamStarted.subscribe(async (streamProcess) => {
|
|
105
|
+
try {
|
|
106
|
+
const stationStream = await this.localLivestreamManager.getLocalLivestream();
|
|
107
|
+
stationStream.videostream.pipe(streamProcess.cp.stdio[4]);
|
|
108
|
+
stationStream.audiostream.pipe(streamProcess.cp.stdio[5]);
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
this.logger.error(this.home.name, this.cameraDevice.name, 'Failed to start local livestream:', error);
|
|
112
|
+
streamProcess.kill();
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
client.onStreamStopped.subscribe(() => {
|
|
116
|
+
this.localLivestreamManager.stopLocalLiveStream();
|
|
117
|
+
});
|
|
118
|
+
client.onTalkbackProcessStarted.subscribe((talkbackProcess) => {
|
|
119
|
+
talkbackProcess.cp.stdout?.pipe(this.talkbackStream);
|
|
120
|
+
});
|
|
121
|
+
}
|
|
115
122
|
}
|
|
116
123
|
checkStates() {
|
|
117
124
|
this.logger.debug(`${this.cameraDevice.name}: Checking states...`);
|
package/dist/camera.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"camera.js","sourceRoot":"","sources":["../src/camera.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"camera.js","sourceRoot":"","sources":["../src/camera.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"displayName": "Eufy",
|
|
3
3
|
"name": "@camera.ui/camera-ui-eufy",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.13",
|
|
5
5
|
"description": "camera.ui eufy plugin",
|
|
6
6
|
"author": "seydx (https://github.com/seydx/camera.ui)",
|
|
7
7
|
"main": "./dist/index.js",
|
|
@@ -16,16 +16,16 @@
|
|
|
16
16
|
},
|
|
17
17
|
"dependencies": {
|
|
18
18
|
"@camera.ui/common": "^0.0.5",
|
|
19
|
-
"@camera.ui/rtsp": "^0.0.
|
|
20
|
-
"eufy-security-client": "^3.
|
|
19
|
+
"@camera.ui/rtsp": "^0.0.35",
|
|
20
|
+
"eufy-security-client": "^3.1.0"
|
|
21
21
|
},
|
|
22
22
|
"devDependencies": {
|
|
23
23
|
"@camera.ui/types": "^0.0.59",
|
|
24
24
|
"@rushstack/eslint-patch": "^1.10.4",
|
|
25
|
-
"@types/node": "^22.5.
|
|
25
|
+
"@types/node": "^22.5.3",
|
|
26
26
|
"@types/ws": "^8.5.12",
|
|
27
|
-
"@typescript-eslint/eslint-plugin": "^8.
|
|
28
|
-
"@typescript-eslint/parser": "^8.
|
|
27
|
+
"@typescript-eslint/eslint-plugin": "^8.4.0",
|
|
28
|
+
"@typescript-eslint/parser": "^8.4.0",
|
|
29
29
|
"concurrently": "^8.2.2",
|
|
30
30
|
"eslint": "8.57.0",
|
|
31
31
|
"eslint-config-prettier": "^9.1.0",
|