В моем небольшом проекте я хочу создать BabyCam, доступ к которому можно получить из любого веб-браузера с помощью Raspberry Pi Zero.Для этого я хотел бы открыть веб-сокет, используя функцию экспресс-передачи потокового видео нескольким клиентам.Я основываю большую часть кода, относящегося к видео, на модуле raspivid-stream .Однако при попытке получить доступ к веб-сокету я получаю сообщение об ошибке типа app.ws(...
, указывающее Property 'ws' does not exist on type 'Application'
.Конечно, я импортировал оба типа для express и express-ws.
Я не совсем уверен, что проблема в том, что один и тот же вызов в JavaScript выглядит нормально.Вот код - я рад любой помощи!
import express from 'express';
import { Request, Response } from 'express';
import fs from 'fs';
import https from 'https';
import http from 'http';
import raspividStream from 'raspivid-stream';
import expressWs from 'express-ws';
const server: express.Application = express();
const httpPort: number = 8080;
const httpsPort: number = 8443;
const sslCredentials = {
key: fs.readFileSync('../ssl/localhost.key', 'utf8'),
cert: fs.readFileSync('../ssl/localhost.cert', 'utf8')
};
// CREATE SERVER
const httpServer = http.createServer(server);
const httpsServer = https.createServer(sslCredentials, server);
expressWs(server, httpsServer);
// ROUTES
server.get('*', (req: Request, res:Response) => {
if (!req.secure) {
return res.redirect(`https://${req.hostname}:${httpsPort}${req.originalUrl}`);
}
res.sendFile(__dirname + '/client/index.html');
});
// WEBSOCKET
server.ws('/video-stream', (ws) => {
console.log('Client connected');
ws.send(JSON.stringify({
action: 'init',
width: '960',
height: '540'
}));
var videoStream = raspividStream({ rotation: 180 });
videoStream.on('data', (data) => {
ws.send(data, { binary: true }, (error) => { if (error) console.error(error); });
});
ws.on('close', () => {
console.log('Client left');
videoStream.removeAllListeners('data');
});
});
// START SERVER
httpServer.listen(httpPort, () => {
console.log(`BabyCam (redirect) listening at http://localhost:${httpPort}/`);
});
httpsServer.listen(httpsPort, () => {
console.log(`BabyCam (SSL) listening at https://localhost:${httpsPort}/`);
});