diff --git a/web-service/server/src/index.js b/web-service/server/src/index.js index 20d60562afe26d7802cb0e3ae3bfdee063c20128..4bff3b06594c529ee94db3444121ad16224feaad 100644 --- a/web-service/server/src/index.js +++ b/web-service/server/src/index.js @@ -11,14 +11,14 @@ const config = require('./utils/config') const User = require('./models/users') const Configs = require('./models/generic') const bodyParser = require('body-parser') -// const cors = require('cors') +const cors = require('cors') // ---- INDEXES ---------------------------------------------------------------- app.use(passport.initialize()); app.use(express.static(__dirname + '/public')); app.use(bodyParser.json()) -// app.use(cors()) +app.use(cors()) passport.serializeUser((user, done) => { diff --git a/web-service/server/src/peer.js b/web-service/server/src/peer.js index 630e94e7c9ea47cce1ee3c9cd1e48b39ef467656..2a4906823ca534f66c86c8ee75a1ba415eae4cb8 100644 --- a/web-service/server/src/peer.js +++ b/web-service/server/src/peer.js @@ -35,13 +35,13 @@ function Peer(ws) { this.master = false; let message = (raw) => { - console.log(raw) + // console.log(raw) //Gets right data for client if(this.sock.on === undefined){ raw = raw.data; } let msg = decode(raw); - console.log('MSG', msg) + // console.log('MSG', msg) if (this.status == kConnecting) { if (msg[1] != "__handshake__") { console.log("Bad handshake"); diff --git a/web-service/server/src/public/css/index.css b/web-service/server/src/public/css/index.css index 7eb21e91ae3f3c7929ca71ca867c5ac7938fbe6d..c134bb2304be9bc7f9f1a884ec6dd9c8ce964664 100644 --- a/web-service/server/src/public/css/index.css +++ b/web-service/server/src/public/css/index.css @@ -43,7 +43,7 @@ body { border: 1px solid black; } - #container { + #ftlab-stream-thumbnails { padding: 0; margin: 0; display: -webkit-box; diff --git a/web-service/server/src/public/js/bundle.js b/web-service/server/src/public/js/bundle.js index 6fc067c31a29898b06d8187fe3782bc2ca90f23e..28fbaf05962ad8a2c851fbbf953bcaa5bef9d9a9 100644 --- a/web-service/server/src/public/js/bundle.js +++ b/web-service/server/src/public/js/bundle.js @@ -383,7 +383,7 @@ BufferList.prototype._match = function(offset, search) { module.exports = BufferList -},{"readable-stream":18,"safe-buffer":19,"util":39}],2:[function(require,module,exports){ +},{"readable-stream":19,"safe-buffer":20,"util":39}],2:[function(require,module,exports){ (function (Buffer){ // Copyright Joyent, Inc. and other Node contributors. // @@ -493,8 +493,8 @@ function objectToString(o) { return Object.prototype.toString.call(o); } -}).call(this,{"isBuffer":require("../../../../../../../../../../../usr/lib/node_modules/watchify/node_modules/is-buffer/index.js")}) -},{"../../../../../../../../../../../usr/lib/node_modules/watchify/node_modules/is-buffer/index.js":33}],3:[function(require,module,exports){ +}).call(this,{"isBuffer":require("../../../../../../../../../usr/local/lib/node_modules/browserify/node_modules/is-buffer/index.js")}) +},{"../../../../../../../../../usr/local/lib/node_modules/browserify/node_modules/is-buffer/index.js":33}],3:[function(require,module,exports){ if (typeof Object.create === 'function') { // implementation from standard node.js 'util' module module.exports = function inherits(ctor, superCtor) { @@ -613,7 +613,7 @@ function msgpack (options) { module.exports = msgpack -},{"./lib/decoder":6,"./lib/encoder":7,"./lib/streams":8,"assert":24,"bl":1,"safe-buffer":19}],6:[function(require,module,exports){ +},{"./lib/decoder":6,"./lib/encoder":7,"./lib/streams":8,"assert":24,"bl":1,"safe-buffer":20}],6:[function(require,module,exports){ 'use strict' var bl = require('bl') @@ -1396,7 +1396,7 @@ function encodeFloat (obj, forceFloat64) { return buf } -},{"bl":1,"safe-buffer":19}],8:[function(require,module,exports){ +},{"bl":1,"safe-buffer":20}],8:[function(require,module,exports){ 'use strict' var Transform = require('readable-stream').Transform @@ -1488,7 +1488,7 @@ Decoder.prototype._transform = function (buf, enc, done) { module.exports.decoder = Decoder module.exports.encoder = Encoder -},{"bl":1,"inherits":3,"readable-stream":18}],9:[function(require,module,exports){ +},{"bl":1,"inherits":3,"readable-stream":19}],9:[function(require,module,exports){ (function (process){ 'use strict'; @@ -2739,7 +2739,7 @@ function indexOf(xs, x) { return -1; } }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"./_stream_duplex":10,"./internal/streams/BufferList":15,"./internal/streams/destroy":16,"./internal/streams/stream":17,"_process":35,"core-util-is":2,"events":31,"inherits":3,"isarray":4,"process-nextick-args":9,"safe-buffer":19,"string_decoder/":20,"util":29}],13:[function(require,module,exports){ +},{"./_stream_duplex":10,"./internal/streams/BufferList":15,"./internal/streams/destroy":16,"./internal/streams/stream":17,"_process":35,"core-util-is":2,"events":31,"inherits":3,"isarray":4,"process-nextick-args":9,"safe-buffer":20,"string_decoder/":18,"util":29}],13:[function(require,module,exports){ // Copyright Joyent, Inc. and other Node contributors. // // Permission is hereby granted, free of charge, to any person obtaining a @@ -3644,7 +3644,7 @@ Writable.prototype._destroy = function (err, cb) { cb(err); }; }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("timers").setImmediate) -},{"./_stream_duplex":10,"./internal/streams/destroy":16,"./internal/streams/stream":17,"_process":35,"core-util-is":2,"inherits":3,"process-nextick-args":9,"safe-buffer":19,"timers":36,"util-deprecate":21}],15:[function(require,module,exports){ +},{"./_stream_duplex":10,"./internal/streams/destroy":16,"./internal/streams/stream":17,"_process":35,"core-util-is":2,"inherits":3,"process-nextick-args":9,"safe-buffer":20,"timers":36,"util-deprecate":21}],15:[function(require,module,exports){ 'use strict'; function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -3724,7 +3724,7 @@ if (util && util.inspect && util.inspect.custom) { return this.constructor.name + ' ' + obj; }; } -},{"safe-buffer":19,"util":29}],16:[function(require,module,exports){ +},{"safe-buffer":20,"util":29}],16:[function(require,module,exports){ 'use strict'; /*<replacement>*/ @@ -3803,79 +3803,6 @@ module.exports = { module.exports = require('events').EventEmitter; },{"events":31}],18:[function(require,module,exports){ -exports = module.exports = require('./lib/_stream_readable.js'); -exports.Stream = exports; -exports.Readable = exports; -exports.Writable = require('./lib/_stream_writable.js'); -exports.Duplex = require('./lib/_stream_duplex.js'); -exports.Transform = require('./lib/_stream_transform.js'); -exports.PassThrough = require('./lib/_stream_passthrough.js'); - -},{"./lib/_stream_duplex.js":10,"./lib/_stream_passthrough.js":11,"./lib/_stream_readable.js":12,"./lib/_stream_transform.js":13,"./lib/_stream_writable.js":14}],19:[function(require,module,exports){ -/* eslint-disable node/no-deprecated-api */ -var buffer = require('buffer') -var Buffer = buffer.Buffer - -// alternative to using Object.keys for old browsers -function copyProps (src, dst) { - for (var key in src) { - dst[key] = src[key] - } -} -if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) { - module.exports = buffer -} else { - // Copy properties from require('buffer') - copyProps(buffer, exports) - exports.Buffer = SafeBuffer -} - -function SafeBuffer (arg, encodingOrOffset, length) { - return Buffer(arg, encodingOrOffset, length) -} - -// Copy static methods from Buffer -copyProps(Buffer, SafeBuffer) - -SafeBuffer.from = function (arg, encodingOrOffset, length) { - if (typeof arg === 'number') { - throw new TypeError('Argument must not be a number') - } - return Buffer(arg, encodingOrOffset, length) -} - -SafeBuffer.alloc = function (size, fill, encoding) { - if (typeof size !== 'number') { - throw new TypeError('Argument must be a number') - } - var buf = Buffer(size) - if (fill !== undefined) { - if (typeof encoding === 'string') { - buf.fill(fill, encoding) - } else { - buf.fill(fill) - } - } else { - buf.fill(0) - } - return buf -} - -SafeBuffer.allocUnsafe = function (size) { - if (typeof size !== 'number') { - throw new TypeError('Argument must be a number') - } - return Buffer(size) -} - -SafeBuffer.allocUnsafeSlow = function (size) { - if (typeof size !== 'number') { - throw new TypeError('Argument must be a number') - } - return buffer.SlowBuffer(size) -} - -},{"buffer":30}],20:[function(require,module,exports){ // Copyright Joyent, Inc. and other Node contributors. // // Permission is hereby granted, free of charge, to any person obtaining a @@ -4172,7 +4099,80 @@ function simpleWrite(buf) { function simpleEnd(buf) { return buf && buf.length ? this.write(buf) : ''; } -},{"safe-buffer":19}],21:[function(require,module,exports){ +},{"safe-buffer":20}],19:[function(require,module,exports){ +exports = module.exports = require('./lib/_stream_readable.js'); +exports.Stream = exports; +exports.Readable = exports; +exports.Writable = require('./lib/_stream_writable.js'); +exports.Duplex = require('./lib/_stream_duplex.js'); +exports.Transform = require('./lib/_stream_transform.js'); +exports.PassThrough = require('./lib/_stream_passthrough.js'); + +},{"./lib/_stream_duplex.js":10,"./lib/_stream_passthrough.js":11,"./lib/_stream_readable.js":12,"./lib/_stream_transform.js":13,"./lib/_stream_writable.js":14}],20:[function(require,module,exports){ +/* eslint-disable node/no-deprecated-api */ +var buffer = require('buffer') +var Buffer = buffer.Buffer + +// alternative to using Object.keys for old browsers +function copyProps (src, dst) { + for (var key in src) { + dst[key] = src[key] + } +} +if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) { + module.exports = buffer +} else { + // Copy properties from require('buffer') + copyProps(buffer, exports) + exports.Buffer = SafeBuffer +} + +function SafeBuffer (arg, encodingOrOffset, length) { + return Buffer(arg, encodingOrOffset, length) +} + +// Copy static methods from Buffer +copyProps(Buffer, SafeBuffer) + +SafeBuffer.from = function (arg, encodingOrOffset, length) { + if (typeof arg === 'number') { + throw new TypeError('Argument must not be a number') + } + return Buffer(arg, encodingOrOffset, length) +} + +SafeBuffer.alloc = function (size, fill, encoding) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + var buf = Buffer(size) + if (fill !== undefined) { + if (typeof encoding === 'string') { + buf.fill(fill, encoding) + } else { + buf.fill(fill) + } + } else { + buf.fill(0) + } + return buf +} + +SafeBuffer.allocUnsafe = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + return Buffer(size) +} + +SafeBuffer.allocUnsafeSlow = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + return buffer.SlowBuffer(size) +} + +},{"buffer":30}],21:[function(require,module,exports){ (function (global){ /** @@ -4282,13 +4282,13 @@ function Peer(ws) { this.master = false; let message = (raw) => { - console.log(raw) + // console.log(raw) //Gets right data for client if(this.sock.on === undefined){ raw = raw.data; } let msg = decode(raw); - console.log('MSG', msg) + // console.log('MSG', msg) if (this.status == kConnecting) { if (msg[1] != "__handshake__") { console.log("Bad handshake"); @@ -4555,20 +4555,24 @@ handleLogin = () => { * Returns a list of available streams */ getAvailableStreams = async () => { - const streamsInJson = await fetch('https://130.232.253.14:8080/streams'); - const streams = await streamsInJson.json(); - console.log('AVAILABLE', streams) - return streams; + try{ + const streamsInJson = await fetch('http://localhost:8080/streams'); + const streams = await streamsInJson.json(); + console.log('AVAILABLE', streams) + return streams; + }catch(err){ + console.log(err) + } } videoPlayer = () => { const containerDiv = document.getElementById('container') containerDiv.innerHTML = `<h1>Stream ${current_data.uri} is live right here!</h1><br><button onclick="renderThumbnails()">Go back</button><br> - <canvas id="ftlab-stream-video" width="0" height="0"></canvas>`; + <canvas id="ftlab-stream-video" width="640" height="360"></canvas>`; containerDiv.innerHTML += '<br>' containerDiv.innerHTML += '' - let decoder = new libde265.Decoder(); - console.log(decoder) + createPeer(); + setTimeout(connectToStream, 500) } @@ -4580,13 +4584,14 @@ renderThumbnails = async () => { // console.log('THUMBNAILS', thumbnails) const containerDiv = document.getElementById('container') containerDiv.innerHTML = ''; + containerDiv.innerHTML = `<div class="ftlab-stream-thumbnails"></div>` // console.log(containerDiv) for(var i=0; i<thumbnails.length; i++){ const encodedURI = encodeURIComponent(thumbnails[i]) current_data.uri = encodedURI console.log("THUMBNAIL[i]", thumbnails[i]) try{ - const someData = await fetch(`https://130.232.253.14:8080/stream/rgb?uri=${encodedURI}`) + const someData = await fetch(`http://localhost:8080/stream/rgb?uri=${encodedURI}`) console.log('SOME DATA', someData) if(!someData.ok){ throw new Error('Image not found') @@ -4661,7 +4666,7 @@ createCard = (url, viewers) => { createPeer = () => { - const ws = new WebSocket('ws://130.232.253.14:8080/'); + const ws = new WebSocket('ws://localhost:8080/'); ws.binaryType = "arraybuffer"; peer = new Peer(ws) console.log("peer", peer) @@ -4674,13 +4679,27 @@ createPeer = () => { * * */ connectToStream = () => { - // const data = peer.send("__ping__") - const data = peer.send("get_stream", (current_data.uri, 10, 0, current_data.uri)) - // closeStream(); + console.log(current_data.uri) + const deocdedURI = decodeURIComponent(current_data.uri); + peer.bind(deocdedURI, (latency, streampckg, pckg) => { + console.log(pckg[0]) + if(pckg[0] === 0){ + const newBlob = new Blob( [pckg[5]], {type: "image/jpeg"}); + const canvas = document.getElementById("ftlab-stream-video"); + let modified = canvas.getContext("2d"); + let image = new Image(); + image.onload = () => { + modified.drawImage(image, 0, 0) + } + image.src = URL.createObjectURL(newBlob) + } + }) + peer.send("get_stream", (current_data.uri, 10, 0, current_data.uri)) + // setTimeout(closeStream, 2000) } closeStream = () => { - peer.close() + peer.sock.close() } const cardLogic = () => { diff --git a/web-service/server/src/public/js/index.js b/web-service/server/src/public/js/index.js index 1bcdc9afd4da2d3bd3dfec5ccfab480188ef39a3..681614e985248c0850cb2a012f6deb1c8752942b 100644 --- a/web-service/server/src/public/js/index.js +++ b/web-service/server/src/public/js/index.js @@ -35,20 +35,25 @@ handleLogin = () => { * Returns a list of available streams */ getAvailableStreams = async () => { - const streamsInJson = await fetch('https://130.232.253.14:8080/streams'); - const streams = await streamsInJson.json(); - console.log('AVAILABLE', streams) - return streams; + try{ + const streamsInJson = await fetch('http://localhost:8080/streams'); + const streams = await streamsInJson.json(); + console.log('AVAILABLE', streams) + return streams; + }catch(err){ + console.log(err) + } } videoPlayer = () => { const containerDiv = document.getElementById('container') containerDiv.innerHTML = `<h1>Stream ${current_data.uri} is live right here!</h1><br><button onclick="renderThumbnails()">Go back</button><br> - <canvas id="ftlab-stream-video" width="0" height="0"></canvas>`; + <canvas id="ftlab-stream-video" width="640" height="360"></canvas>`; containerDiv.innerHTML += '<br>' containerDiv.innerHTML += '' - let decoder = new libde265.Decoder(); - console.log(decoder) + createPeer(); + setTimeout(connectToStream, 500) + } @@ -60,13 +65,14 @@ renderThumbnails = async () => { // console.log('THUMBNAILS', thumbnails) const containerDiv = document.getElementById('container') containerDiv.innerHTML = ''; + containerDiv.innerHTML = `<div class="ftlab-stream-thumbnails"></div>` // console.log(containerDiv) for(var i=0; i<thumbnails.length; i++){ const encodedURI = encodeURIComponent(thumbnails[i]) current_data.uri = encodedURI console.log("THUMBNAIL[i]", thumbnails[i]) try{ - const someData = await fetch(`https://130.232.253.14:8080/stream/rgb?uri=${encodedURI}`) + const someData = await fetch(`http://localhost:8080/stream/rgb?uri=${encodedURI}`) console.log('SOME DATA', someData) if(!someData.ok){ throw new Error('Image not found') @@ -141,7 +147,7 @@ createCard = (url, viewers) => { createPeer = () => { - const ws = new WebSocket('ws://130.232.253.14:8080/'); + const ws = new WebSocket('ws://localhost:8080/'); ws.binaryType = "arraybuffer"; peer = new Peer(ws) console.log("peer", peer) @@ -154,13 +160,27 @@ createPeer = () => { * * */ connectToStream = () => { - // const data = peer.send("__ping__") - const data = peer.send("get_stream", (current_data.uri, 10, 0, current_data.uri)) - // closeStream(); + console.log(current_data.uri) + const deocdedURI = decodeURIComponent(current_data.uri); + peer.bind(deocdedURI, (latency, streampckg, pckg) => { + console.log(pckg[0]) + if(pckg[0] === 0){ + const newBlob = new Blob( [pckg[5]], {type: "image/jpeg"}); + const canvas = document.getElementById("ftlab-stream-video"); + let modified = canvas.getContext("2d"); + let image = new Image(); + image.onload = () => { + modified.drawImage(image, 0, 0) + } + image.src = URL.createObjectURL(newBlob) + } + }) + peer.send("get_stream", (current_data.uri, 10, 0, current_data.uri)) + // setTimeout(closeStream, 2000) } closeStream = () => { - peer.close() + peer.sock.close() } const cardLogic = () => {