diff --git a/components/streams/include/ftl/streams/feed.hpp b/components/streams/include/ftl/streams/feed.hpp index 23d500b61547643e930f2e5eea340d5dd2366060..17e6c3192a9867301f2b4c05cab3482554fe2cc0 100644 --- a/components/streams/include/ftl/streams/feed.hpp +++ b/components/streams/include/ftl/streams/feed.hpp @@ -196,6 +196,7 @@ private: void add(uint32_t fsid, const std::string &uri, ftl::stream::Stream *s); nlohmann::json &_add_recent_source(const ftl::URI &uri); + void _saveThumbnail(const ftl::data::FrameSetPtr& fs); /** callback for network (adds new sorces on connect/...) */ void _updateNetSources(ftl::net::Peer *p); diff --git a/web-service/public/js/bundle.js b/web-service/public/js/bundle.js index 074e04643695e136ff0ecb3e2ccc955de9f43529..a89bb20e0931ebb50865ebed62c83e581bbded12 100644 --- a/web-service/public/js/bundle.js +++ b/web-service/public/js/bundle.js @@ -71306,14 +71306,14 @@ renderThumbnails = async () => { const encodedURI = encodeURIComponent(thumbnails[i]) current_data.uri = thumbnails[i] try{ - const someData = await fetch(`./stream/rgb?uri=${encodedURI}`) - if(!someData.ok){ - throw new Error('Image not found') - } - const myBlob = await someData.blob(); - const objectURL = URL.createObjectURL(myBlob); + //const someData = await fetch(`./stream/rgb?uri=${encodedURI}`) + //if(!someData.ok){ + // throw new Error('Image not found') + //} + //const myBlob = await someData.blob(); + //const objectURL = URL.createObjectURL(myBlob); // containerDiv.innerHTML += createCard() - containerDiv.innerHTML += createCard(objectURL, i+4) + containerDiv.innerHTML += createCard(encodedURI, i+4) }catch(err){ console.log("Couldn't create thumbnail"); console.log(err) @@ -71328,7 +71328,7 @@ renderThumbnails = async () => { */ createCard = (url, viewers) => { return `<div class='ftlab-card-component' > - <img src='${url}' class="thumbnail-img" alt="Hups" width="250px"></img> + <img src='stream/rgb?uri=${url}' class="thumbnail-img" alt="Hups" width="250px"></img> <p>Viewers: ${viewers}</p> <button onclick="createVideoPlayer()">button</button> </div>` @@ -72693,8 +72693,8 @@ function Peer(ws) { this._notify("disconnect", this); } - let error = () => { - console.error("Socket error"); + let error = (e) => { + console.error("Socket error: ", e); this.sock.close(); this.status = kDisconnected; } diff --git a/web-service/public/js/index.js b/web-service/public/js/index.js index 7100c66a88de886e6d0b2a5a08eafdb8c8411f28..213be7a979df2b3f912819b33ea32bc08bafd5cc 100644 --- a/web-service/public/js/index.js +++ b/web-service/public/js/index.js @@ -82,14 +82,14 @@ renderThumbnails = async () => { const encodedURI = encodeURIComponent(thumbnails[i]) current_data.uri = thumbnails[i] try{ - const someData = await fetch(`./stream/rgb?uri=${encodedURI}`) - if(!someData.ok){ - throw new Error('Image not found') - } - const myBlob = await someData.blob(); - const objectURL = URL.createObjectURL(myBlob); + //const someData = await fetch(`./stream/rgb?uri=${encodedURI}`) + //if(!someData.ok){ + // throw new Error('Image not found') + //} + //const myBlob = await someData.blob(); + //const objectURL = URL.createObjectURL(myBlob); // containerDiv.innerHTML += createCard() - containerDiv.innerHTML += createCard(objectURL, i+4) + containerDiv.innerHTML += createCard(encodedURI, i+4) }catch(err){ console.log("Couldn't create thumbnail"); console.log(err) @@ -104,7 +104,7 @@ renderThumbnails = async () => { */ createCard = (url, viewers) => { return `<div class='ftlab-card-component' > - <img src='${url}' class="thumbnail-img" alt="Hups" width="250px"></img> + <img src='stream/rgb?uri=${url}' class="thumbnail-img" alt="Hups" width="250px"></img> <p>Viewers: ${viewers}</p> <button onclick="createVideoPlayer()">button</button> </div>` diff --git a/web-service/server/src/index.js b/web-service/server/src/index.js index 0a0e17938e4a54eeb51bbedd6d2c7d88222936be..2510db14a53f4d09a0104b3b5afcd94f2b647583 100644 --- a/web-service/server/src/index.js +++ b/web-service/server/src/index.js @@ -7,7 +7,11 @@ const config = require('./utils/config') const User = require('./models/users') const Configs = require('./models/generic') const bodyParser = require('body-parser') -const Url = require('url-parse') +const Url = require('url-parse'); +const { LogLuvEncoding } = require('three'); +const msgpack = require('msgpack5')() + , encode = msgpack.encode + , decode = msgpack.decode; // ---- INDEXES ---------------------------------------------------------------- app.use(express.static(__dirname + '/../../public')); @@ -76,6 +80,8 @@ function RGBDStream(uri, peer) { this.rxcount = 10; this.rxmax = 10; + this.data = {}; + let ix = uri.indexOf("?"); this.base_uri = (ix >= 0) ? uri.substring(0, ix) : uri; @@ -87,6 +93,7 @@ function RGBDStream(uri, peer) { //if (this.rxcount >= this.rxmax && this.clients.length > 0) { // this.subscribe(); //} + //console.log("Got frame: ", spacket); }); /*peer.bind(uri, (frame, ttime, chunk, rgb, depth) => { @@ -97,6 +104,9 @@ function RGBDStream(uri, peer) { this.subscribe(); } });*/ + + console.log("Sending request"); + this.peer.send(this.base_uri, 0, [1,255,255,74,1],[7,0,1,255,0,new Uint8Array(0)]); } RGBDStream.prototype.addClient = function(peer) { @@ -124,9 +134,8 @@ RGBDStream.prototype.subscribe = function() { RGBDStream.prototype.pushFrames = function(latency, spacket, packet) { //Checks that the type is jpg - if (packet[0] === 0){ - if (spacket[3] > 0) this.depth = packet[5]; - else this.rgb = packet[5]; + if (spacket[3] >= 64) { + this.data[spacket[3]] = decode(packet[5]); } //console.log("Frame = ", packet[0], packet[1]); @@ -161,24 +170,29 @@ app.get('/streams', (req, res) => { * binded to that */ app.get('/stream/rgb', (req, res) => { - let uri = req.query.uri; + let uri = decodeURI(req.query.uri); + let ix = uri.indexOf("?"); + let base_uri = (ix >= 0) ? uri.substring(0, ix) : uri; + if (uri_data.hasOwnProperty(uri)) { //uri_data[uri].peer.send("get_stream", uri, 3, 9, [Peer.uuid], uri); res.writeHead(200, {'Content-Type': 'image/jpeg'}); - res.end(uri_data[uri].rgb); + res.end(uri_data[uri].data[74]); } res.end(); }); -app.get('/stream/depth', (req, res) => { +app.get('/stream/data', (req, res) => { let uri = req.query.uri; + let channel = parseInt(req.query.channel); const parsedURI = stringSplitter(uri) if (uri_data.hasOwnProperty(parsedURI)) { - res.writeHead(200, {'Content-Type': 'image/png'}); - res.end(uri_data[parsedURI].depth); + //res.writeHead(200, {'Content-Type': 'image/png'}); + res.status(200).json(uri_data[parsedURI].data[channel]); + } else { + res.end(); } - res.end(); }); app.post('/stream/config', async (req, res) => { @@ -220,23 +234,19 @@ app.get('/stream/config', async(req, res) => { //example of uri ftlab.utu.fi/stream/config?uri=ftl://utu.fi#reconstruction_snap10/merge const settings = req.query.settings; - const uri = req.query.uri; - const parsedURI = stringSplitter(uri) + const uri = decodeURI(req.query.uri); + //const parsedURI = stringSplitter(uri) - // //Checks if DB has data - // let dbData = await Configs.find({Settings: settings}); - // if(dbData[0].data){ - // return res.status(200).json(dbData[0]); - // }else{ - let peer = uri_data[parsedURI].peer - if(peer){ - peer.rpc("get_cfg", (response) => { + if (uri_data.hasOwnProperty(uri)) { + let peer = uri_data[uri].peer + if (peer){ + peer.rpc("get_configurable", (response) => { if(response){ - return res.status(200).json(response); + return res.status(200).json(JSON.parse(response)); } - }, settings) + }, uri); } - // } + } })