Propeliranje, env fajl za IP, popravki, WIP webrtc data xfer
parent
cbc1770d43
commit
0d74389113
|
@ -1 +1,2 @@
|
||||||
settings.js
|
settings.js
|
||||||
|
.env
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
VIR="http://192.168.64.104:81"
|
|
||||||
|
|
||||||
ffplay $VIR
|
source .env
|
||||||
|
|
||||||
|
ffplay $VIR:81
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
source .env
|
||||||
|
|
||||||
# Pretvori MJPEG v VP8 RTP stream
|
# Pretvori MJPEG v VP8 RTP stream
|
||||||
|
|
||||||
VIR="http://192.168.64.104:81"
|
|
||||||
CILJ="rtp://localhost:8004"
|
|
||||||
|
|
||||||
#ffmpeg -re -stream_loop -1 -i $VIR -c:v libx264 -tune zerolatency -profile:v baseline -b:v 1M -an -f rtp $CILJ
|
#ffmpeg -re -stream_loop -1 -i $VIR -c:v libx264 -tune zerolatency -profile:v baseline -b:v 1M -an -f rtp $CILJ
|
||||||
ffmpeg -re -stream_loop -1 -i $VIR -c:v libvpx -b:v 1M -an -f rtp $CILJ
|
ffmpeg -re -stream_loop -1 -i "$VIR:81" -c:v libvpx -b:v 1M -an -f rtp $CILJ
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
source .env
|
||||||
|
|
||||||
|
ventilator=$1
|
||||||
|
|
||||||
|
if [[ ! $ventilator ]]; then
|
||||||
|
echo "Izberi ventilator (1 ali 2 kot parameter)"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
url="$VIR/?m=1&o=$ventilator"
|
||||||
|
|
||||||
|
curl "$url"
|
||||||
|
sleep 2
|
||||||
|
curl "$url"
|
|
@ -11,6 +11,7 @@
|
||||||
<script type="text/javascript" src="webrtc-adapter.min.js" ></script>
|
<script type="text/javascript" src="webrtc-adapter.min.js" ></script>
|
||||||
<script type="text/javascript" src="settings.js" ></script>
|
<script type="text/javascript" src="settings.js" ></script>
|
||||||
<script type="text/javascript" src="janus.js" ></script>
|
<script type="text/javascript" src="janus.js" ></script>
|
||||||
|
<script type="text/javascript" src="propeliraj.js"></script>
|
||||||
<script type="text/javascript" src="streaming.js"></script>
|
<script type="text/javascript" src="streaming.js"></script>
|
||||||
|
|
||||||
<link rel="stylesheet" href="stil.css" type="text/css"/>
|
<link rel="stylesheet" href="stil.css" type="text/css"/>
|
||||||
|
|
|
@ -0,0 +1,54 @@
|
||||||
|
var BOT="http://192.168.1.101/";
|
||||||
|
|
||||||
|
// Koliko milisekund se naj vrtijo propelerji?
|
||||||
|
var DOLZINA=10000;
|
||||||
|
|
||||||
|
function xhttp() {
|
||||||
|
return new XMLHttpRequest();
|
||||||
|
}
|
||||||
|
|
||||||
|
function cors(xh) {
|
||||||
|
xh.setRequestHeader('Content-Type', 'application/x-www-form-urlencode');
|
||||||
|
xh.withCredentials = true;
|
||||||
|
return xh;
|
||||||
|
}
|
||||||
|
|
||||||
|
function preklopiA() {
|
||||||
|
var xh = xhttp();
|
||||||
|
xh.open('GET', BOT + "?m=1&o=1");
|
||||||
|
return xh;
|
||||||
|
}
|
||||||
|
|
||||||
|
function preklopiB() {
|
||||||
|
var xh = xhttp();
|
||||||
|
xh.open('GET', BOT + "?m=1&o=2");
|
||||||
|
return xh;
|
||||||
|
}
|
||||||
|
|
||||||
|
window.peljiLevo = function () {
|
||||||
|
var rb = preklopiB();
|
||||||
|
console.log('lev?', rb);
|
||||||
|
rb.send();
|
||||||
|
|
||||||
|
console.log(streaming);
|
||||||
|
|
||||||
|
setTimeout(function () {
|
||||||
|
var rb = preklopiB();
|
||||||
|
rb.send();
|
||||||
|
}, DOLZINA);
|
||||||
|
}
|
||||||
|
|
||||||
|
window.peljiDesno = function () {
|
||||||
|
var ra = preklopiA();
|
||||||
|
ra.send();
|
||||||
|
|
||||||
|
setTimeout(function () {
|
||||||
|
var ra = preklopiA();
|
||||||
|
ra.send();
|
||||||
|
}, DOLZINA);
|
||||||
|
}
|
||||||
|
|
||||||
|
window.peljiRavno = function () {
|
||||||
|
window.peljiLevo();
|
||||||
|
window.peljiDesno();
|
||||||
|
}
|
161
streaming.js
161
streaming.js
|
@ -33,12 +33,12 @@ window.addEventListener('DOMContentLoaded', function () {
|
||||||
Janus.init({debug: "all", callback: function() {
|
Janus.init({debug: "all", callback: function() {
|
||||||
// Make sure the browser supports WebRTC
|
// Make sure the browser supports WebRTC
|
||||||
if(!Janus.isWebrtcSupported()) {
|
if(!Janus.isWebrtcSupported()) {
|
||||||
bootbox.alert("No WebRTC support... ");
|
console.log("ERROR cannot start; no WebRTC support... ");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// Create session
|
// Create session
|
||||||
janus = new Janus({
|
janus = new Janus({
|
||||||
server: server,
|
server: server,
|
||||||
iceServers: iceServers,
|
iceServers: iceServers,
|
||||||
// Should the Janus API require authentication, you can specify either the API secret or user token here too
|
// Should the Janus API require authentication, you can specify either the API secret or user token here too
|
||||||
// token: "mytoken",
|
// token: "mytoken",
|
||||||
|
@ -79,6 +79,7 @@ window.addEventListener('DOMContentLoaded', function () {
|
||||||
// Gumbi levo in desno
|
// Gumbi levo in desno
|
||||||
gLevo.addEventListener('click', function () {
|
gLevo.addEventListener('click', function () {
|
||||||
console.log('GREMO LEVO!');
|
console.log('GREMO LEVO!');
|
||||||
|
window.peljiLevo();
|
||||||
vsiGumbi.forEach(function (gEl) {
|
vsiGumbi.forEach(function (gEl) {
|
||||||
gEl.toggleAttribute('disabled', true);
|
gEl.toggleAttribute('disabled', true);
|
||||||
});
|
});
|
||||||
|
@ -91,6 +92,7 @@ window.addEventListener('DOMContentLoaded', function () {
|
||||||
});
|
});
|
||||||
gDesno.addEventListener('click', function () {
|
gDesno.addEventListener('click', function () {
|
||||||
console.log('GREMO DESNO!');
|
console.log('GREMO DESNO!');
|
||||||
|
window.peljiDesno();
|
||||||
vsiGumbi.forEach(function (gEl) {
|
vsiGumbi.forEach(function (gEl) {
|
||||||
gEl.toggleAttribute('disabled', true);
|
gEl.toggleAttribute('disabled', true);
|
||||||
});
|
});
|
||||||
|
@ -103,6 +105,7 @@ window.addEventListener('DOMContentLoaded', function () {
|
||||||
});
|
});
|
||||||
gRavno.addEventListener('click', function () {
|
gRavno.addEventListener('click', function () {
|
||||||
console.log('GREMO RAVNO!');
|
console.log('GREMO RAVNO!');
|
||||||
|
window.peljiRavno();
|
||||||
vsiGumbi.forEach(function (gEl) {
|
vsiGumbi.forEach(function (gEl) {
|
||||||
gEl.toggleAttribute('disabled', true);
|
gEl.toggleAttribute('disabled', true);
|
||||||
});
|
});
|
||||||
|
@ -181,84 +184,86 @@ window.addEventListener('DOMContentLoaded', function () {
|
||||||
Janus.error("WebRTC error:", error);
|
Janus.error("WebRTC error:", error);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
|
||||||
},
|
|
||||||
onremotetrack: function(track, mid, on, metadata) {
|
|
||||||
Janus.debug("Remote track (mid=" + mid + ") " + (on ? "added" : "removed") +
|
|
||||||
(metadata ? " (" + metadata.reason + ") ": "") + ":", track
|
|
||||||
);
|
|
||||||
|
|
||||||
var mstreamId = "mstream"+mid;
|
|
||||||
if(streamsList[selectedStream] && streamsList[selectedStream].legacy) {
|
|
||||||
mstreamId = "mstream0";
|
|
||||||
}
|
|
||||||
|
|
||||||
console.log('dodam?', on);
|
|
||||||
if(true) {
|
|
||||||
// If we're here, a new track was added
|
|
||||||
var stream = null;
|
|
||||||
|
|
||||||
// New video track: create a stream out of it
|
|
||||||
stream = new MediaStream([track]);
|
|
||||||
console.log('MOJ PRETOK!', stream, track);
|
|
||||||
remoteTracks[mid] = stream;
|
|
||||||
Janus.log("Created remote video stream:", stream);
|
|
||||||
|
|
||||||
var vidEl = document.querySelector('#videofeed');
|
|
||||||
|
|
||||||
/* bitrate in resolucija
|
|
||||||
if(!bitrateTimer[mid]) {
|
|
||||||
bitrateTimer[mid] = setInterval(function() {
|
|
||||||
// Display updated bitrate, if supported
|
|
||||||
var bitrate = streaming.getBitrate(mid);
|
|
||||||
console.log('bitrate:', bitrate);
|
|
||||||
|
|
||||||
// Check if the resolution changed too
|
|
||||||
var width = vidEl.videoWidth;
|
|
||||||
var height = vidEl.videoHeight;
|
|
||||||
if (width > 0 && height > 0) console.log('resolucija', width+'x'+height);
|
|
||||||
}, 1000);
|
|
||||||
}
|
}
|
||||||
*/
|
},
|
||||||
console.log('dodajam pretok', vidEl, stream);
|
onremotetrack: function(track, mid, on, metadata) {
|
||||||
Janus.attachMediaStream(vidEl, stream);
|
Janus.debug("Remote track (mid=" + mid + ") " + (on ? "added" : "removed") +
|
||||||
|
(metadata ? " (" + metadata.reason + ") ": "") + ":", track
|
||||||
|
);
|
||||||
|
|
||||||
|
var mstreamId = "mstream"+mid;
|
||||||
|
if(streamsList[selectedStream] && streamsList[selectedStream].legacy) {
|
||||||
|
mstreamId = "mstream0";
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log('dodam?', on);
|
||||||
|
if(true) {
|
||||||
|
// If we're here, a new track was added
|
||||||
|
var stream = null;
|
||||||
|
|
||||||
|
// New video track: create a stream out of it
|
||||||
|
stream = new MediaStream([track]);
|
||||||
|
console.log('MOJ PRETOK!', stream, track);
|
||||||
|
remoteTracks[mid] = stream;
|
||||||
|
Janus.log("Created remote video stream:", stream);
|
||||||
|
|
||||||
|
var vidEl = document.querySelector('#videofeed');
|
||||||
|
|
||||||
|
/* bitrate in resolucija
|
||||||
|
if(!bitrateTimer[mid]) {
|
||||||
|
bitrateTimer[mid] = setInterval(function() {
|
||||||
|
// Display updated bitrate, if supported
|
||||||
|
var bitrate = streaming.getBitrate(mid);
|
||||||
|
console.log('bitrate:', bitrate);
|
||||||
|
|
||||||
|
// Check if the resolution changed too
|
||||||
|
var width = vidEl.videoWidth;
|
||||||
|
var height = vidEl.videoHeight;
|
||||||
|
if (width > 0 && height > 0) console.log('resolucija', width+'x'+height);
|
||||||
|
}, 1000);
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
console.log('dodajam pretok', vidEl, stream);
|
||||||
|
Janus.attachMediaStream(vidEl, stream);
|
||||||
|
|
||||||
|
// Moramo kliknit za predvajanje :/
|
||||||
|
predvajaj.style.display = 'block';
|
||||||
|
predvajaj.addEventListener('click', function () {
|
||||||
|
predvajaj.style.display = 'none';
|
||||||
|
vidEl.play();
|
||||||
|
});
|
||||||
|
|
||||||
|
vidEl.addEventListener('play', function () {
|
||||||
|
glavno.classList.add('predvajam');
|
||||||
|
predvajaj.style.display = 'none';
|
||||||
|
});
|
||||||
|
|
||||||
// Moramo kliknit za predvajanje :/
|
|
||||||
predvajaj.style.display = 'block';
|
|
||||||
predvajaj.addEventListener('click', function () {
|
|
||||||
predvajaj.style.display = 'none';
|
|
||||||
vidEl.play();
|
vidEl.play();
|
||||||
});
|
}
|
||||||
|
},
|
||||||
vidEl.addEventListener('play', function () {
|
ondataopen: function(data) {
|
||||||
glavno.classList.add('predvajam');
|
Janus.log("The DataChannel is available!");
|
||||||
predvajaj.style.display = 'none';
|
window.dataKanal = data;
|
||||||
});
|
},
|
||||||
|
ondata: function(data) {
|
||||||
vidEl.play();
|
Janus.debug("We got data from the DataChannel!", data);
|
||||||
|
console.log('DUBU DATA', data);
|
||||||
|
obdelajData(data);
|
||||||
|
},
|
||||||
|
oncleanup: function() {
|
||||||
|
Janus.log(" ::: Got a cleanup notification :::");
|
||||||
|
for(var i in bitrateTimer)
|
||||||
|
clearInterval(bitrateTimer[i]);
|
||||||
|
bitrateTimer = {};
|
||||||
|
remoteTracks = {};
|
||||||
|
dataMid = null;
|
||||||
}
|
}
|
||||||
},
|
});
|
||||||
ondataopen: function(data) {
|
},
|
||||||
Janus.log("The DataChannel is available!");
|
error: function(error) {
|
||||||
},
|
Janus.error(error);
|
||||||
ondata: function(data) {
|
},
|
||||||
Janus.debug("We got data from the DataChannel!", data);
|
destroyed: function() {
|
||||||
console.log('DUBU DATA', data);
|
|
||||||
},
|
|
||||||
oncleanup: function() {
|
|
||||||
Janus.log(" ::: Got a cleanup notification :::");
|
|
||||||
for(var i in bitrateTimer)
|
|
||||||
clearInterval(bitrateTimer[i]);
|
|
||||||
bitrateTimer = {};
|
|
||||||
remoteTracks = {};
|
|
||||||
dataMid = null;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
|
||||||
error: function(error) {
|
|
||||||
Janus.error(error);
|
|
||||||
},
|
|
||||||
destroyed: function() {
|
|
||||||
window.location.reload();
|
window.location.reload();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -353,3 +358,7 @@ function stopStream() {
|
||||||
streaming.send({ message: body });
|
streaming.send({ message: body });
|
||||||
streaming.hangup();
|
streaming.hangup();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function obdelajData(data) {
|
||||||
|
console.log('obdelam webrtc podatke', data);
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue