Skip to content

Commit 9f18263

Browse files
committed
sync files.
devicestreams - initial proper bringup devicestreams still needs to be made more stable. pushimage - image preview bringup. should work as is. imageserve - image preview bringup. should work as is, unless theres a bug in Express.static. package.json - added deps ws/* - some events
1 parent 791b1e0 commit 9f18263

File tree

11 files changed

+300
-30
lines changed

11 files changed

+300
-30
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,5 @@ config.js
33
media/
44
dist/
55
src/config.ts
6-
legacystuff/
6+
legacystuff/
7+
preview_images/

package-lock.json

Lines changed: 125 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,15 @@
1717
"express": "^4.18.2",
1818
"http": "^0.0.1-security",
1919
"js-event-bus": "^1.1.1",
20+
"multer": "^1.4.5-lts.1",
2021
"mysql2": "^2.3.3",
2122
"node-media-server": "^2.4.9",
2223
"socket.io": "^4.5.4"
2324
},
2425
"devDependencies": {
2526
"@types/bcrypt": "^5.0.0",
2627
"@types/express": "^4.17.17",
28+
"@types/multer": "^1.4.7",
2729
"@types/node": "^18.15.11",
2830
"@types/node-media-server": "^2.3.4",
2931
"@typescript-eslint/eslint-plugin": "^5.59.0",

src/rtmp/DeviceStreams.ts

Lines changed: 58 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,69 @@
1+
import { findDeviceSocket } from "../ws/DeviceSocketList";
2+
13
export type DeviceStream = {
2-
deviceHwid: string;
3-
streamId: string;
4-
}
4+
deviceHwid: string;
5+
streamId: string;
6+
};
57

68
let _deviceStreams: DeviceStream[] = [];
7-
9+
let _deviceLocks: boolean[] = [];
810
export function findDeviceStream(deviceHwid: string): DeviceStream | undefined {
9-
return _deviceStreams.find((ds) => ds.deviceHwid === deviceHwid);
11+
return _deviceStreams.find((ds) => ds.deviceHwid === deviceHwid);
12+
}
13+
14+
// This returns undefined when, either the device is offline or the device is online but the device did not send a stream request.
15+
export function findOrRequestDeviceStream(deviceHwid: string): DeviceStream | undefined {
16+
console.log("findOrRequestDeviceStream")
17+
18+
if (_deviceLocks[deviceHwid] === true) {
19+
console.log("Device is locked, returning undefined");
20+
return undefined;
21+
} // This is to prevent multiple requests from being sent to the device.
22+
_deviceLocks[deviceHwid] = true;
23+
let deviceStream = findDeviceStream(deviceHwid);
24+
if (deviceStream === undefined) {
25+
// Request stream from device.
26+
const generatedStreamKey = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);
27+
28+
findDeviceSocket(deviceHwid)
29+
?.socket.timeout(20000)
30+
.emit(
31+
"CameraStreamRequest",
32+
{
33+
streamKey: generatedStreamKey,
34+
},
35+
(error, data: any) => {
36+
if (error) {
37+
_deviceLocks[deviceHwid] = false;
38+
}
39+
if (data && data.success) {
40+
_deviceLocks[deviceHwid] = false;
41+
addToDeviceStreamList(deviceHwid, generatedStreamKey);
42+
deviceStream = findDeviceStream(deviceHwid);
43+
}
44+
}
45+
);
46+
} else {
47+
_deviceLocks[deviceHwid] = false;
48+
return deviceStream;
49+
}
1050
}
1151

1252
export function addToDeviceStreamList(deviceHwid: string, streamId: string): void {
13-
if (findDeviceStream(deviceHwid) === undefined) {
14-
_deviceStreams.push({ deviceHwid, streamId });
15-
} else {
16-
console.log("Device already has stream, lets override the device stream id.");
17-
_deviceStreams = _deviceStreams.map((ds) => {
18-
if (ds.deviceHwid === deviceHwid) {
19-
ds.streamId = streamId;
20-
}
21-
return ds;
22-
});
23-
}
53+
if (findDeviceStream(deviceHwid) === undefined) {
54+
_deviceStreams.push({ deviceHwid, streamId });
55+
} else {
56+
console.log("Device already has stream, lets override the device stream id.");
57+
_deviceStreams = _deviceStreams.map((ds) => {
58+
if (ds.deviceHwid === deviceHwid) {
59+
ds.streamId = streamId;
60+
}
61+
return ds;
62+
});
63+
}
2464
}
2565

2666
export function removeFromDeviceStreamList(deviceHwid: string): void {
27-
_deviceStreams = _deviceStreams.filter((ds) => ds.deviceHwid !== deviceHwid);
67+
_deviceStreams = _deviceStreams.filter((ds) => ds.deviceHwid !== deviceHwid);
68+
_deviceLocks[deviceHwid] = false;
2869
}
29-

src/rtmp/StreamServer.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,8 @@ export function startStreamingServer() {
6161
CheckDeviceSessionValidity(deviceID, deviceKey)
6262
.then((DeviceCheckStatus) => {
6363
if (DeviceCheckStatus.success) {
64-
console.log(`[StreamServer Ingest Authenticator] Device ${deviceID} succeeded authentication.`);
65-
addToDeviceStreamList(deviceID, id);
64+
console.log(`[StreamServer Ingest Authenticator] Device ${deviceID} succeeded authentication with key ${deviceKey}.`);
65+
6666
} else {
6767
const session = nms.getSession(id);
6868
console.warn(
@@ -74,7 +74,7 @@ export function startStreamingServer() {
7474
})
7575
.catch((e) => {
7676
console.warn(`[StreamServer Ingest Authenticator] Database failure, rejecting stream for hwid ${deviceID}...`);
77-
});
77+
});
7878
});
7979
// prePlay event is not really working for transcoded streams, so we're not using it until the
8080
// authors of NodeMediaServer fix it. Or maybe I am doing something wrong.

src/web/ExpressInstance.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,6 @@ function loadRoutes(): void {
2323
console.log("[PTServer Web] Loaded route " + file)
2424
});
2525
});
26-
}
26+
}
27+
28+
export {express}

src/web/routes/ImageServe.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import { app, express } from "../ExpressInstance";
2+
3+
4+
5+
6+
app.use("/preview_images/", express.static("/root/ProjectTiaraBackendServer/preview_images/", {
7+
index: false
8+
}));

0 commit comments

Comments
 (0)