commit 7697298d763be545e76b802e86044c1d0c30ed5a
Author: 许杰 <1102043058@qq.com>
Date: Sat Jul 17 21:49:42 2021 +0800
first commit
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..9326124
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+#忽略 node_modules
+/node_modules/*
\ No newline at end of file
diff --git a/Install.js b/Install.js
new file mode 100644
index 0000000..efc7dd4
--- /dev/null
+++ b/Install.js
@@ -0,0 +1,23 @@
+let path = require('path');
+
+let Service = require('node-windows').Service;
+
+// Create a new service object
+let svc = new Service({
+ name:'node windows server test', //名称
+ description: 'The socket.io nodejs server test ',//描述
+ script: './bin/www',//node执行入口
+ execPath:'C:\\Program Files\\nodejs\\node.exe',
+ nodeOptions: [
+ '--harmony',
+ '--max_old_space_size=4096'
+ ]
+});
+
+// Listen for the "install" event, which indicates the
+// process is available as a service.
+svc.on('install',function(){
+ svc.start();
+});
+
+svc.install();
\ No newline at end of file
diff --git a/Uninstall.js b/Uninstall.js
new file mode 100644
index 0000000..c9a4641
--- /dev/null
+++ b/Uninstall.js
@@ -0,0 +1,19 @@
+let Service = require('node-windows').Service;
+
+let svc = new Service({
+ name:'node windows server test', //名称
+ description: 'The socket.io nodejs server test ',//描述
+ script: './bin/www',//node执行入口
+ execPath:'C:\\Program Files\\nodejs\\node.exe',
+ nodeOptions: [
+ '--harmony',
+ '--max_old_space_size=4096'
+ ]
+ });
+
+svc.on('uninstall',function(){
+ console.log('Uninstall complete.');
+ console.log('The service exists: ',svc.exists);
+});
+
+svc.uninstall()
\ No newline at end of file
diff --git a/app.js b/app.js
new file mode 100644
index 0000000..5ee4836
--- /dev/null
+++ b/app.js
@@ -0,0 +1,56 @@
+var createError = require('http-errors');
+var express = require('express');
+var path = require('path');
+var cookieParser = require('cookie-parser');
+var logger = require('morgan');
+
+var indexRouter = require('./routes/index');
+var usersRouter = require('./routes/users');
+var camerasRouter = require('./routes/cameras');
+var imgRouter = require('./routes/imgs');
+
+var app = express();
+
+// view engine setup
+app.set('views', path.join(__dirname, 'views'));
+app.set('view engine', 'jade');
+
+//设置跨域访问
+app.all('*', (req, res, next) => {
+ res.header("Access-Control-Allow-Origin", "*");
+ res.header("Access-Control-Allow-Headers", "X-Requested-With");
+ res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
+ res.header("X-Powered-By",' 3.2.1')
+ res.header("Content-Type", "application/json;charset=utf-8");
+ next();
+});
+
+app.use(logger('dev'));
+app.use(express.json());
+app.use(express.urlencoded({ extended: false }));
+app.use(cookieParser());
+app.use(express.static(path.join(__dirname, 'public')));
+
+app.use('/', indexRouter);
+app.use('/users', usersRouter);
+app.use('/cameras', camerasRouter);
+app.use('/imgs', imgRouter);
+
+// catch 404 and forward to error handler
+app.use(function(req, res, next) {
+ next(createError(404));
+});
+
+
+// error handler
+app.use(function(err, req, res, next) {
+ // set locals, only providing error in development
+ res.locals.message = err.message;
+ res.locals.error = req.app.get('env') === 'development' ? err : {};
+
+ // render the error page
+ res.status(err.status || 500);
+ res.render('error');
+});
+
+module.exports = app;
diff --git a/bin/www b/bin/www
new file mode 100644
index 0000000..b09c4b4
--- /dev/null
+++ b/bin/www
@@ -0,0 +1,90 @@
+#!/usr/bin/env node
+
+/**
+ * Module dependencies.
+ */
+
+var app = require('../app');
+var debug = require('debug')('server:server');
+var http = require('http');
+
+/**
+ * Get port from environment and store in Express.
+ */
+
+var port = normalizePort(process.env.PORT || '3000');
+app.set('port', port);
+
+/**
+ * Create HTTP server.
+ */
+
+var server = http.createServer(app);
+
+/**
+ * Listen on provided port, on all network interfaces.
+ */
+
+server.listen(port);
+server.on('error', onError);
+server.on('listening', onListening);
+
+/**
+ * Normalize a port into a number, string, or false.
+ */
+
+function normalizePort(val) {
+ var port = parseInt(val, 10);
+
+ if (isNaN(port)) {
+ // named pipe
+ return val;
+ }
+
+ if (port >= 0) {
+ // port number
+ return port;
+ }
+
+ return false;
+}
+
+/**
+ * Event listener for HTTP server "error" event.
+ */
+
+function onError(error) {
+ if (error.syscall !== 'listen') {
+ throw error;
+ }
+
+ var bind = typeof port === 'string'
+ ? 'Pipe ' + port
+ : 'Port ' + port;
+
+ // handle specific listen errors with friendly messages
+ switch (error.code) {
+ case 'EACCES':
+ console.error(bind + ' requires elevated privileges');
+ process.exit(1);
+ break;
+ case 'EADDRINUSE':
+ console.error(bind + ' is already in use');
+ process.exit(1);
+ break;
+ default:
+ throw error;
+ }
+}
+
+/**
+ * Event listener for HTTP server "listening" event.
+ */
+
+function onListening() {
+ var addr = server.address();
+ var bind = typeof addr === 'string'
+ ? 'pipe ' + addr
+ : 'port ' + addr.port;
+ debug('Listening on ' + bind);
+}
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..3eb2795
--- /dev/null
+++ b/index.html
@@ -0,0 +1,76 @@
+
+
+
+
+
+ DEMO node-rtsp-stream-jsmpeg
+
+
+
+
+
+
+
+
+
+ rtsp :
+
+ rtsp :
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/lib/RequestManager.js b/lib/RequestManager.js
new file mode 100644
index 0000000..9dff264
--- /dev/null
+++ b/lib/RequestManager.js
@@ -0,0 +1,79 @@
+const Stream = require('node-rtsp-stream')
+const args = []
+const requestManager = function () { }
+requestManager.prototype = {
+ Open: function (arg) {
+ let result = {}
+ if (args.length == 0) {
+ result = this._create(arg)
+ result = this._openVideo(result)
+ } else {
+ args.forEach(a => {
+ if (a.rtspUrl == arg.rtspUrl) {
+ result = a
+ }
+ })
+ if (result.port === undefined || result.rtspUrl === undefined) {
+ result = this._create(arg)
+ result = this._openVideo(result)
+ }
+ }
+
+ return result;
+ },
+ Close: function (arg) {
+ let result = {}
+ let idx = -1
+ idx = args.findIndex(a => a.rtspUrl == arg.rtspUrl)
+ if (idx !== -1) {
+ args[idx].stream.stop()
+ result = args.splice(idx, 1)
+ } else {
+
+ }
+ console.log(args)
+ return result
+ },
+ _randomPort: function () {
+ let port = Math.floor(Math.random() * (4001 - 3001) + 3001)
+ return port
+ },
+ _openVideo: function (arg) {
+ arg.stream = new Stream({
+ name: 'name',
+ //streamUrl: 'rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov',
+ streamUrl: arg.rtspUrl,
+ wsPort: arg.port,
+ ffmpegOptions: { // options ffmpeg flags
+ '-stats': '', // an option with no neccessary value uses a blank string
+ '-r': 30, // options with required values specify the value after the key
+ '-s': arg.size,
+ '-codec:a': 'mp2',
+ '-ar': 44100,
+ '-ac': 1,
+ '-b:a': '128k'
+ }
+ })
+ return arg
+ },
+ _create: function (arg) {
+ let target = {
+ rtspUrl: 'rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov',
+ port: this._randomPort(),
+ size: '1024*768',
+ stream: null
+ }
+ let source = {
+ rtspUrl: arg.rtspUrl,
+ port: this._randomPort(),
+ size: arg.size,
+ stream: null
+ }
+ Object.assign(target, source)
+ args.push(target)
+ return target
+ }
+
+}
+
+module.exports = requestManager
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..9506129
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,783 @@
+{
+ "name": "server",
+ "version": "0.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "accepts": {
+ "version": "1.3.7",
+ "resolved": "https://registry.npm.taobao.org/accepts/download/accepts-1.3.7.tgz",
+ "integrity": "sha1-UxvHJlF6OytB+FACHGzBXqq1B80=",
+ "requires": {
+ "mime-types": "~2.1.24",
+ "negotiator": "0.6.2"
+ }
+ },
+ "acorn": {
+ "version": "2.7.0",
+ "resolved": "https://registry.nlark.com/acorn/download/acorn-2.7.0.tgz",
+ "integrity": "sha1-q259nYhqrKiwhbwzEreaGYQz8Oc="
+ },
+ "acorn-globals": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npm.taobao.org/acorn-globals/download/acorn-globals-1.0.9.tgz",
+ "integrity": "sha1-VbtemGkVB7dFedBRNBMhfDgMVM8=",
+ "requires": {
+ "acorn": "^2.1.0"
+ }
+ },
+ "align-text": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npm.taobao.org/align-text/download/align-text-0.1.4.tgz",
+ "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
+ "requires": {
+ "kind-of": "^3.0.2",
+ "longest": "^1.0.1",
+ "repeat-string": "^1.5.2"
+ }
+ },
+ "amdefine": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npm.taobao.org/amdefine/download/amdefine-1.0.1.tgz",
+ "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU="
+ },
+ "array-flatten": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npm.taobao.org/array-flatten/download/array-flatten-1.1.1.tgz",
+ "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
+ },
+ "asap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npm.taobao.org/asap/download/asap-1.0.0.tgz",
+ "integrity": "sha1-sqRdpf36ILBJb8N2jMJ8EvqRan0="
+ },
+ "basic-auth": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npm.taobao.org/basic-auth/download/basic-auth-2.0.1.tgz",
+ "integrity": "sha1-uZgnm/R844NEtPPPkW1Gebv1Hjo=",
+ "requires": {
+ "safe-buffer": "5.1.2"
+ }
+ },
+ "body-parser": {
+ "version": "1.18.3",
+ "resolved": "https://registry.npm.taobao.org/body-parser/download/body-parser-1.18.3.tgz",
+ "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=",
+ "requires": {
+ "bytes": "3.0.0",
+ "content-type": "~1.0.4",
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "http-errors": "~1.6.3",
+ "iconv-lite": "0.4.23",
+ "on-finished": "~2.3.0",
+ "qs": "6.5.2",
+ "raw-body": "2.3.3",
+ "type-is": "~1.6.16"
+ }
+ },
+ "bytes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npm.taobao.org/bytes/download/bytes-3.0.0.tgz",
+ "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
+ },
+ "camelcase": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-1.2.1.tgz?cache=0&sync_timestamp=1603921884289&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcamelcase%2Fdownload%2Fcamelcase-1.2.1.tgz",
+ "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk="
+ },
+ "center-align": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npm.taobao.org/center-align/download/center-align-0.1.3.tgz",
+ "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
+ "requires": {
+ "align-text": "^0.1.3",
+ "lazy-cache": "^1.0.3"
+ }
+ },
+ "character-parser": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npm.taobao.org/character-parser/download/character-parser-1.2.1.tgz",
+ "integrity": "sha1-wN3kqxgnE7kZuXCVmhI+zBow/NY="
+ },
+ "clean-css": {
+ "version": "3.4.28",
+ "resolved": "https://registry.nlark.com/clean-css/download/clean-css-3.4.28.tgz",
+ "integrity": "sha1-vxlF6C/ICPVWlebd6uwBQA79A/8=",
+ "requires": {
+ "commander": "2.8.x",
+ "source-map": "0.4.x"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "2.8.1",
+ "resolved": "https://registry.nlark.com/commander/download/commander-2.8.1.tgz?cache=0&sync_timestamp=1624609539421&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcommander%2Fdownload%2Fcommander-2.8.1.tgz",
+ "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=",
+ "requires": {
+ "graceful-readlink": ">= 1.0.0"
+ }
+ }
+ }
+ },
+ "cliui": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npm.taobao.org/cliui/download/cliui-2.1.0.tgz",
+ "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
+ "requires": {
+ "center-align": "^0.1.1",
+ "right-align": "^0.1.1",
+ "wordwrap": "0.0.2"
+ },
+ "dependencies": {
+ "wordwrap": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npm.taobao.org/wordwrap/download/wordwrap-0.0.2.tgz",
+ "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8="
+ }
+ }
+ },
+ "commander": {
+ "version": "2.6.0",
+ "resolved": "https://registry.nlark.com/commander/download/commander-2.6.0.tgz?cache=0&sync_timestamp=1624609539421&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcommander%2Fdownload%2Fcommander-2.6.0.tgz",
+ "integrity": "sha1-nfflL7Kgyw+4kFjugMMQQiXzfh0="
+ },
+ "constantinople": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npm.taobao.org/constantinople/download/constantinople-3.0.2.tgz",
+ "integrity": "sha1-S5RdmTeQe82Y7ldRIsOBdRZUQUE=",
+ "requires": {
+ "acorn": "^2.1.0"
+ }
+ },
+ "content-disposition": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npm.taobao.org/content-disposition/download/content-disposition-0.5.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcontent-disposition%2Fdownload%2Fcontent-disposition-0.5.2.tgz",
+ "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ="
+ },
+ "content-type": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npm.taobao.org/content-type/download/content-type-1.0.4.tgz",
+ "integrity": "sha1-4TjMdeBAxyexlm/l5fjJruJW/js="
+ },
+ "cookie": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npm.taobao.org/cookie/download/cookie-0.4.0.tgz",
+ "integrity": "sha1-vrQ35wIrO21JAZ0IhmUwPr6cFLo="
+ },
+ "cookie-parser": {
+ "version": "1.4.5",
+ "resolved": "https://registry.npm.taobao.org/cookie-parser/download/cookie-parser-1.4.5.tgz",
+ "integrity": "sha1-PlctS3wMgPnGHa9gTkM2gxtdHUk=",
+ "requires": {
+ "cookie": "0.4.0",
+ "cookie-signature": "1.0.6"
+ }
+ },
+ "cookie-signature": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npm.taobao.org/cookie-signature/download/cookie-signature-1.0.6.tgz",
+ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
+ },
+ "css": {
+ "version": "1.0.8",
+ "resolved": "https://registry.nlark.com/css/download/css-1.0.8.tgz",
+ "integrity": "sha1-k4aBHKgrzMnuf7WnMrHioxfIo+c=",
+ "requires": {
+ "css-parse": "1.0.4",
+ "css-stringify": "1.0.5"
+ }
+ },
+ "css-parse": {
+ "version": "1.0.4",
+ "resolved": "https://registry.nlark.com/css-parse/download/css-parse-1.0.4.tgz",
+ "integrity": "sha1-OLBQP7+dqfVOnB29pg4UXHcRe90="
+ },
+ "css-stringify": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npm.taobao.org/css-stringify/download/css-stringify-1.0.5.tgz",
+ "integrity": "sha1-sNBClG2ylTu50pKQCmy19tASIDE="
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1607566571506&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz",
+ "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz?cache=0&sync_timestamp=1610348638646&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdecamelize%2Fdownload%2Fdecamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
+ },
+ "depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npm.taobao.org/depd/download/depd-1.1.2.tgz",
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
+ },
+ "destroy": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npm.taobao.org/destroy/download/destroy-1.0.4.tgz",
+ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
+ },
+ "ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npm.taobao.org/ee-first/download/ee-first-1.1.1.tgz",
+ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
+ },
+ "encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npm.taobao.org/encodeurl/download/encodeurl-1.0.2.tgz",
+ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
+ },
+ "escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npm.taobao.org/escape-html/download/escape-html-1.0.3.tgz",
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
+ },
+ "etag": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npm.taobao.org/etag/download/etag-1.8.1.tgz",
+ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
+ },
+ "express": {
+ "version": "4.16.4",
+ "resolved": "https://registry.npm.taobao.org/express/download/express-4.16.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexpress%2Fdownload%2Fexpress-4.16.4.tgz",
+ "integrity": "sha1-/d72GSYQniTFFeqX/S8b2/Yt8S4=",
+ "requires": {
+ "accepts": "~1.3.5",
+ "array-flatten": "1.1.1",
+ "body-parser": "1.18.3",
+ "content-disposition": "0.5.2",
+ "content-type": "~1.0.4",
+ "cookie": "0.3.1",
+ "cookie-signature": "1.0.6",
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "finalhandler": "1.1.1",
+ "fresh": "0.5.2",
+ "merge-descriptors": "1.0.1",
+ "methods": "~1.1.2",
+ "on-finished": "~2.3.0",
+ "parseurl": "~1.3.2",
+ "path-to-regexp": "0.1.7",
+ "proxy-addr": "~2.0.4",
+ "qs": "6.5.2",
+ "range-parser": "~1.2.0",
+ "safe-buffer": "5.1.2",
+ "send": "0.16.2",
+ "serve-static": "1.13.2",
+ "setprototypeof": "1.1.0",
+ "statuses": "~1.4.0",
+ "type-is": "~1.6.16",
+ "utils-merge": "1.0.1",
+ "vary": "~1.1.2"
+ },
+ "dependencies": {
+ "cookie": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npm.taobao.org/cookie/download/cookie-0.3.1.tgz",
+ "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s="
+ }
+ }
+ },
+ "finalhandler": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npm.taobao.org/finalhandler/download/finalhandler-1.1.1.tgz",
+ "integrity": "sha1-7r9O2EAHnIP0JJA4ydcDAIMBsQU=",
+ "requires": {
+ "debug": "2.6.9",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "on-finished": "~2.3.0",
+ "parseurl": "~1.3.2",
+ "statuses": "~1.4.0",
+ "unpipe": "~1.0.0"
+ }
+ },
+ "forwarded": {
+ "version": "0.2.0",
+ "resolved": "https://registry.nlark.com/forwarded/download/forwarded-0.2.0.tgz?cache=0&sync_timestamp=1622503451002&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fforwarded%2Fdownload%2Fforwarded-0.2.0.tgz",
+ "integrity": "sha1-ImmTZCiq1MFcfr6XeahL8LKoGBE="
+ },
+ "fresh": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npm.taobao.org/fresh/download/fresh-0.5.2.tgz",
+ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
+ },
+ "graceful-readlink": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npm.taobao.org/graceful-readlink/download/graceful-readlink-1.0.1.tgz",
+ "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU="
+ },
+ "http-errors": {
+ "version": "1.6.3",
+ "resolved": "https://registry.npm.taobao.org/http-errors/download/http-errors-1.6.3.tgz?cache=0&sync_timestamp=1593407647372&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-errors%2Fdownload%2Fhttp-errors-1.6.3.tgz",
+ "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
+ "requires": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.1.0",
+ "statuses": ">= 1.4.0 < 2"
+ }
+ },
+ "iconv-lite": {
+ "version": "0.4.23",
+ "resolved": "https://registry.nlark.com/iconv-lite/download/iconv-lite-0.4.23.tgz",
+ "integrity": "sha1-KXhx9jvlB63Pv8pxXQzQ7thOmmM=",
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+ },
+ "ipaddr.js": {
+ "version": "1.9.1",
+ "resolved": "https://registry.nlark.com/ipaddr.js/download/ipaddr.js-1.9.1.tgz",
+ "integrity": "sha1-v/OFQ+64mEglB5/zoqjmy9RngbM="
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz?cache=0&sync_timestamp=1604432378894&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-buffer%2Fdownload%2Fis-buffer-1.1.6.tgz",
+ "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4="
+ },
+ "is-promise": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npm.taobao.org/is-promise/download/is-promise-2.2.2.tgz",
+ "integrity": "sha1-OauVnMv5p3TPB597QMeib3YxNfE="
+ },
+ "jade": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npm.taobao.org/jade/download/jade-1.11.0.tgz",
+ "integrity": "sha1-nIDlOMEtP7lcjZu5VZ+gzAQEBf0=",
+ "requires": {
+ "character-parser": "1.2.1",
+ "clean-css": "^3.1.9",
+ "commander": "~2.6.0",
+ "constantinople": "~3.0.1",
+ "jstransformer": "0.0.2",
+ "mkdirp": "~0.5.0",
+ "transformers": "2.1.0",
+ "uglify-js": "^2.4.19",
+ "void-elements": "~2.0.1",
+ "with": "~4.0.0"
+ }
+ },
+ "jstransformer": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npm.taobao.org/jstransformer/download/jstransformer-0.0.2.tgz",
+ "integrity": "sha1-eq4pqQPRls+glz2IXT5HlH7Ndqs=",
+ "requires": {
+ "is-promise": "^2.0.0",
+ "promise": "^6.0.1"
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ },
+ "lazy-cache": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npm.taobao.org/lazy-cache/download/lazy-cache-1.0.4.tgz",
+ "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4="
+ },
+ "longest": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npm.taobao.org/longest/download/longest-1.0.1.tgz",
+ "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc="
+ },
+ "media-typer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npm.taobao.org/media-typer/download/media-typer-0.3.0.tgz",
+ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
+ },
+ "merge-descriptors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npm.taobao.org/merge-descriptors/download/merge-descriptors-1.0.1.tgz",
+ "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
+ },
+ "methods": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npm.taobao.org/methods/download/methods-1.1.2.tgz",
+ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
+ },
+ "mime": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npm.taobao.org/mime/download/mime-1.4.1.tgz",
+ "integrity": "sha1-Eh+evEnjdm8xGnbh+hyAA8SwOqY="
+ },
+ "mime-db": {
+ "version": "1.48.0",
+ "resolved": "https://registry.nlark.com/mime-db/download/mime-db-1.48.0.tgz?cache=0&sync_timestamp=1622433556078&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fmime-db%2Fdownload%2Fmime-db-1.48.0.tgz",
+ "integrity": "sha1-41sxBF3X6to6qtU37YijOvvvLR0="
+ },
+ "mime-types": {
+ "version": "2.1.31",
+ "resolved": "https://registry.nlark.com/mime-types/download/mime-types-2.1.31.tgz?cache=0&sync_timestamp=1622569162264&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fmime-types%2Fdownload%2Fmime-types-2.1.31.tgz",
+ "integrity": "sha1-oA12t0MXxh+cLbIhi46fjpxcnms=",
+ "requires": {
+ "mime-db": "1.48.0"
+ }
+ },
+ "minimist": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npm.taobao.org/minimist/download/minimist-1.2.5.tgz",
+ "integrity": "sha1-Z9ZgFLZqaoqqDAg8X9WN9OTpdgI="
+ },
+ "mkdirp": {
+ "version": "0.5.5",
+ "resolved": "https://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.5.tgz?cache=0&sync_timestamp=1587535418745&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmkdirp%2Fdownload%2Fmkdirp-0.5.5.tgz",
+ "integrity": "sha1-2Rzv1i0UNsoPQWIOJRKI1CAJne8=",
+ "requires": {
+ "minimist": "^1.2.5"
+ }
+ },
+ "morgan": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npm.taobao.org/morgan/download/morgan-1.9.1.tgz",
+ "integrity": "sha1-Co0Wc0odmvvIJLmd+H5zjlji2lk=",
+ "requires": {
+ "basic-auth": "~2.0.0",
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "on-finished": "~2.3.0",
+ "on-headers": "~1.0.1"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz?cache=0&sync_timestamp=1607433872491&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ },
+ "negotiator": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npm.taobao.org/negotiator/download/negotiator-0.6.2.tgz",
+ "integrity": "sha1-/qz3zPUlp3rpY0Q2pkiD/+yjRvs="
+ },
+ "node-rtsp-stream": {
+ "version": "0.0.9",
+ "resolved": "https://registry.npm.taobao.org/node-rtsp-stream/download/node-rtsp-stream-0.0.9.tgz",
+ "integrity": "sha1-95q9J/cu7uRHE8/EO42TmrJwC4s=",
+ "requires": {
+ "ws": "^7.0.0"
+ }
+ },
+ "node-windows": {
+ "version": "1.0.0-beta.5",
+ "resolved": "https://registry.npm.taobao.org/node-windows/download/node-windows-1.0.0-beta.5.tgz",
+ "integrity": "sha1-95KIscpvH0Gm0xIpkCxhGiGrudY=",
+ "requires": {
+ "optimist": "~0.6.0",
+ "xml": "0.0.12"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npm.taobao.org/minimist/download/minimist-0.0.10.tgz",
+ "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8="
+ },
+ "optimist": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npm.taobao.org/optimist/download/optimist-0.6.1.tgz",
+ "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
+ "requires": {
+ "minimist": "~0.0.1",
+ "wordwrap": "~0.0.2"
+ }
+ }
+ }
+ },
+ "on-finished": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npm.taobao.org/on-finished/download/on-finished-2.3.0.tgz",
+ "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+ "requires": {
+ "ee-first": "1.1.1"
+ }
+ },
+ "on-headers": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npm.taobao.org/on-headers/download/on-headers-1.0.2.tgz",
+ "integrity": "sha1-dysK5qqlJcOZ5Imt+tkMQD6zwo8="
+ },
+ "optimist": {
+ "version": "0.3.7",
+ "resolved": "https://registry.npm.taobao.org/optimist/download/optimist-0.3.7.tgz",
+ "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=",
+ "requires": {
+ "wordwrap": "~0.0.2"
+ }
+ },
+ "parseurl": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npm.taobao.org/parseurl/download/parseurl-1.3.3.tgz",
+ "integrity": "sha1-naGee+6NEt/wUT7Vt2lXeTvC6NQ="
+ },
+ "path-to-regexp": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npm.taobao.org/path-to-regexp/download/path-to-regexp-0.1.7.tgz?cache=0&sync_timestamp=1601400247487&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-to-regexp%2Fdownload%2Fpath-to-regexp-0.1.7.tgz",
+ "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
+ },
+ "promise": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npm.taobao.org/promise/download/promise-6.1.0.tgz",
+ "integrity": "sha1-LOcp9rlLRcJoka0GAsXJDgTG7vY=",
+ "requires": {
+ "asap": "~1.0.0"
+ }
+ },
+ "proxy-addr": {
+ "version": "2.0.7",
+ "resolved": "https://registry.nlark.com/proxy-addr/download/proxy-addr-2.0.7.tgz",
+ "integrity": "sha1-8Z/mnOqzEe65S0LnDowgcPm6ECU=",
+ "requires": {
+ "forwarded": "0.2.0",
+ "ipaddr.js": "1.9.1"
+ }
+ },
+ "qs": {
+ "version": "6.5.2",
+ "resolved": "https://registry.npm.taobao.org/qs/download/qs-6.5.2.tgz?cache=0&sync_timestamp=1616385248556&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fqs%2Fdownload%2Fqs-6.5.2.tgz",
+ "integrity": "sha1-yzroBuh0BERYTvFUzo7pjUA/PjY="
+ },
+ "range-parser": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npm.taobao.org/range-parser/download/range-parser-1.2.1.tgz",
+ "integrity": "sha1-PPNwI9GZ4cJNGlW4SADC8+ZGgDE="
+ },
+ "raw-body": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npm.taobao.org/raw-body/download/raw-body-2.3.3.tgz",
+ "integrity": "sha1-GzJOzmtXBuFThVvBFIxlu39uoMM=",
+ "requires": {
+ "bytes": "3.0.0",
+ "http-errors": "1.6.3",
+ "iconv-lite": "0.4.23",
+ "unpipe": "1.0.0"
+ }
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npm.taobao.org/repeat-string/download/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
+ },
+ "right-align": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npm.taobao.org/right-align/download/right-align-0.1.3.tgz",
+ "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
+ "requires": {
+ "align-text": "^0.1.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz",
+ "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0="
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npm.taobao.org/safer-buffer/download/safer-buffer-2.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsafer-buffer%2Fdownload%2Fsafer-buffer-2.1.2.tgz",
+ "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo="
+ },
+ "send": {
+ "version": "0.16.2",
+ "resolved": "https://registry.npm.taobao.org/send/download/send-0.16.2.tgz",
+ "integrity": "sha1-bsyh4PjBVtFBWXVZhI32RzCmu8E=",
+ "requires": {
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "destroy": "~1.0.4",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "fresh": "0.5.2",
+ "http-errors": "~1.6.2",
+ "mime": "1.4.1",
+ "ms": "2.0.0",
+ "on-finished": "~2.3.0",
+ "range-parser": "~1.2.0",
+ "statuses": "~1.4.0"
+ }
+ },
+ "serve-static": {
+ "version": "1.13.2",
+ "resolved": "https://registry.npm.taobao.org/serve-static/download/serve-static-1.13.2.tgz",
+ "integrity": "sha1-CV6Ecv1bRiN9tQzkhqQ/S4bGzsE=",
+ "requires": {
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "parseurl": "~1.3.2",
+ "send": "0.16.2"
+ }
+ },
+ "setprototypeof": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.1.0.tgz?cache=0&sync_timestamp=1563425414995&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsetprototypeof%2Fdownload%2Fsetprototypeof-1.1.0.tgz",
+ "integrity": "sha1-0L2FU2iHtv58DYGMuWLZ2RxU5lY="
+ },
+ "source-map": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.4.4.tgz",
+ "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
+ "requires": {
+ "amdefine": ">=0.0.4"
+ }
+ },
+ "statuses": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npm.taobao.org/statuses/download/statuses-1.4.0.tgz?cache=0&sync_timestamp=1609654060878&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstatuses%2Fdownload%2Fstatuses-1.4.0.tgz",
+ "integrity": "sha1-u3PURtonlhBu/MG2AaJT1sRr0Ic="
+ },
+ "transformers": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npm.taobao.org/transformers/download/transformers-2.1.0.tgz",
+ "integrity": "sha1-XSPLNVYd2F3Gf7hIIwm0fVPM6ac=",
+ "requires": {
+ "css": "~1.0.8",
+ "promise": "~2.0",
+ "uglify-js": "~2.2.5"
+ },
+ "dependencies": {
+ "is-promise": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npm.taobao.org/is-promise/download/is-promise-1.0.1.tgz",
+ "integrity": "sha1-MVc3YcBX4zwukaq56W2gjO++duU="
+ },
+ "promise": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npm.taobao.org/promise/download/promise-2.0.0.tgz",
+ "integrity": "sha1-RmSKqdYFr10ucMMCS/WUNtoCuA4=",
+ "requires": {
+ "is-promise": "~1"
+ }
+ },
+ "source-map": {
+ "version": "0.1.43",
+ "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.1.43.tgz",
+ "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
+ "requires": {
+ "amdefine": ">=0.0.4"
+ }
+ },
+ "uglify-js": {
+ "version": "2.2.5",
+ "resolved": "https://registry.nlark.com/uglify-js/download/uglify-js-2.2.5.tgz?cache=0&sync_timestamp=1624812318797&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fuglify-js%2Fdownload%2Fuglify-js-2.2.5.tgz",
+ "integrity": "sha1-puAqcNg5eSuXgEiLe4sYTAlcmcc=",
+ "requires": {
+ "optimist": "~0.3.5",
+ "source-map": "~0.1.7"
+ }
+ }
+ }
+ },
+ "type-is": {
+ "version": "1.6.18",
+ "resolved": "https://registry.npm.taobao.org/type-is/download/type-is-1.6.18.tgz",
+ "integrity": "sha1-TlUs0F3wlGfcvE73Od6J8s83wTE=",
+ "requires": {
+ "media-typer": "0.3.0",
+ "mime-types": "~2.1.24"
+ }
+ },
+ "uglify-js": {
+ "version": "2.8.29",
+ "resolved": "https://registry.nlark.com/uglify-js/download/uglify-js-2.8.29.tgz?cache=0&sync_timestamp=1624812318797&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fuglify-js%2Fdownload%2Fuglify-js-2.8.29.tgz",
+ "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
+ "requires": {
+ "source-map": "~0.5.1",
+ "uglify-to-browserify": "~1.0.0",
+ "yargs": "~3.10.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ }
+ }
+ },
+ "uglify-to-browserify": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npm.taobao.org/uglify-to-browserify/download/uglify-to-browserify-1.0.2.tgz",
+ "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
+ "optional": true
+ },
+ "unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npm.taobao.org/unpipe/download/unpipe-1.0.0.tgz",
+ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
+ },
+ "utils-merge": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npm.taobao.org/utils-merge/download/utils-merge-1.0.1.tgz",
+ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
+ },
+ "vary": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npm.taobao.org/vary/download/vary-1.1.2.tgz",
+ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
+ },
+ "void-elements": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npm.taobao.org/void-elements/download/void-elements-2.0.1.tgz",
+ "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w="
+ },
+ "window-size": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npm.taobao.org/window-size/download/window-size-0.1.0.tgz",
+ "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0="
+ },
+ "with": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npm.taobao.org/with/download/with-4.0.3.tgz",
+ "integrity": "sha1-7v0VTp550sjTQXtkeo8U2f7M4U4=",
+ "requires": {
+ "acorn": "^1.0.1",
+ "acorn-globals": "^1.0.3"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "1.2.2",
+ "resolved": "https://registry.nlark.com/acorn/download/acorn-1.2.2.tgz",
+ "integrity": "sha1-yM4n3grMdtiW0rH6099YjZ6C8BQ="
+ }
+ }
+ },
+ "wordwrap": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npm.taobao.org/wordwrap/download/wordwrap-0.0.3.tgz",
+ "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc="
+ },
+ "ws": {
+ "version": "7.5.0",
+ "resolved": "https://registry.nlark.com/ws/download/ws-7.5.0.tgz",
+ "integrity": "sha1-ADO6/qAx+53wQbICb8cqVxykRpE="
+ },
+ "xml": {
+ "version": "0.0.12",
+ "resolved": "https://registry.npm.taobao.org/xml/download/xml-0.0.12.tgz",
+ "integrity": "sha1-8Is0cQmRK+AChXhfRvFa2OUKX2c="
+ },
+ "yargs": {
+ "version": "3.10.0",
+ "resolved": "https://registry.nlark.com/yargs/download/yargs-3.10.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fyargs%2Fdownload%2Fyargs-3.10.0.tgz",
+ "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
+ "requires": {
+ "camelcase": "^1.0.2",
+ "cliui": "^2.1.0",
+ "decamelize": "^1.0.0",
+ "window-size": "0.1.0"
+ }
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..7e377d7
--- /dev/null
+++ b/package.json
@@ -0,0 +1,18 @@
+{
+ "name": "server",
+ "version": "0.0.0",
+ "private": true,
+ "scripts": {
+ "start": "node ./bin/www"
+ },
+ "dependencies": {
+ "cookie-parser": "~1.4.4",
+ "debug": "~2.6.9",
+ "express": "~4.16.1",
+ "http-errors": "~1.6.3",
+ "jade": "~1.11.0",
+ "morgan": "~1.9.1",
+ "node-rtsp-stream": "0.0.9",
+ "node-windows": "^1.0.0-beta.5"
+ }
+}
diff --git a/public/stylesheets/style.css b/public/stylesheets/style.css
new file mode 100644
index 0000000..9453385
--- /dev/null
+++ b/public/stylesheets/style.css
@@ -0,0 +1,8 @@
+body {
+ padding: 50px;
+ font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;
+}
+
+a {
+ color: #00B7FF;
+}
diff --git a/routes/cameras.js b/routes/cameras.js
new file mode 100644
index 0000000..20ef97c
--- /dev/null
+++ b/routes/cameras.js
@@ -0,0 +1,24 @@
+var express = require('express');
+const requestmanager = require('../lib/RequestManager')
+var router = express.Router();
+
+router.get('/', function (req, res) {
+ res.send('Carmeras Server is Runing...');
+});
+
+/* GET users listing. */
+router.post('/', function (req, res) {
+ var cfg = req.body
+ let result = new requestmanager().Open(cfg)
+ res.json(result)
+});
+
+router.post('/close', function (req, res) {
+ var cfg = req.body
+ new requestmanager().Close(cfg)
+ res.json({ state: 'close the rtsp stream success.' })
+})
+
+
+
+module.exports = router;
diff --git a/routes/imgs.js b/routes/imgs.js
new file mode 100644
index 0000000..73334b8
--- /dev/null
+++ b/routes/imgs.js
@@ -0,0 +1,45 @@
+var express = require('express');
+var router = express.Router();
+var path = require("path");
+var fs = require("fs");
+
+/* GET home page. */
+router.get('/', function (req, res, next) {
+ var imgs = ''
+ var dirs = [];
+ var pathName = "./public/images/";
+ res.setHeader("Content-Type", "text/html;charset=utf-8")
+ fs.readdir(pathName, function (err, files) {
+
+ for (var i = 0; i < files.length; i++) {
+
+ var img = ``
+
+ imgs +=img
+ fs.writeFile('E:\\ht.txt', imgs, function (error) {
+ if (error) {
+ console.log('写入失败')
+ } else {
+ console.log('写入成功了')
+ }
+ })
+ //console.log(imgs)
+ fs.stat(path.join(pathName, files[i]), function (err, data) {
+ if (data.isFile()) {
+ dirs.push(files[i]);
+ }
+ });
+ }
+ })
+ res.end()
+
+
+
+
+
+
+});
+
+
+
+module.exports = router;
diff --git a/routes/index.js b/routes/index.js
new file mode 100644
index 0000000..ca0ed82
--- /dev/null
+++ b/routes/index.js
@@ -0,0 +1,16 @@
+var express = require('express');
+var router = express.Router();
+
+/* GET home page. */
+router.get('/', function(req, res, next) {
+
+ res.render('index', { title: 'Express' });
+});
+
+router.post('/',function(req,res){
+
+
+
+})
+
+module.exports = router;
diff --git a/routes/users.js b/routes/users.js
new file mode 100644
index 0000000..58e8223
--- /dev/null
+++ b/routes/users.js
@@ -0,0 +1,10 @@
+var express = require('express');
+var router = express.Router();
+
+/* GET users listing. */
+router.get('/', function(req, res, next) {
+ res.setHeader("Content-Type", "text/html;charset=utf-8")
+ res.send('Hello NOdejs