Dette er eksempel viser hvordan man kan streame indholdet af et html canvas element (en p5js sketch) til en anden maskine.
Streaming delen håndteres af WebRTC, og etablering af forbindelsen håndteres ved hjælp af Socket.io.
Opsætning af projekt
Først skal der laves et projekt så node kan finde ud af at køre programmet, og har en package.json fil til at holde styr på projektet og afhængigheder af biblioteksmoduler.
Start med at lave en mappe, som kan indeholde dit projekt. Kald den f.eks. webrtc-server.
I denne mappe skal du køre følgende kommando, for at oprette projekt filen package.json.
npm init
Udfyld passende værdier som svar på de spørgsmål programmet stiller.
Jeg foreslår at ændre din main fil til server.js.
Dernæst har du mulighed for at installere disse afhængigheder.
npm install express
npm install socket.io
Indsæt en start action i script sektionen.
Du burde nu have en package.json fil, der ser nogenlunde sådan ud:
Bemærk de to pakker der er listet under afhængigheder.
Server
De statiske web-resourcer placeres i mappen public, og de gøres tilgængelige på samme måde som i eksemplet med den simple web server.
Derudover består serveren af en række endpoints, der håndterer socket.io beskeder.
Dette er nødvendigt for at kunne styre transmission af videostrømmen, da dette ikke er indbygget i WebRTC.
Når du ønsker at starte serveren, kan det gøres med kommandoen.
npm start
Afsender af video stream
For at have noget at sende afsted laves en sketch ved hjælp af p5js, der streames til modtagerne med WebRTC.
Tegn på canvas
Der laves en sketch, der tegner noget på det canvas element, som skal transmitteres.
I eksemplet tegnes blot en rød cirkel med sort omrids på musens position.
Dette laves i filen public/broadcast/sketch.js.
letstream;
functionsetup() {
// Capture the canvas content as a stream
constc=createCanvas(400, 400);
consthtmlCanvas=c.elt;
stream=htmlCanvas.captureStream();
gotStream(stream);
}
functiondraw() {
background(220);
// Draw a red circle at the position of the mouse
fill('red');
strokeWeight(5);
circle(mouseX, mouseY, 50);
}
Styring af video stream
For at kunne håndtere WebRTC forbindelsen kommunikeres med serveren via Socket.io.
Klient-delen der styrer afsendelsen laves i public/broadcast/webrtc.js
Javascript koden kan ikke stå alene.
For at kunne eksekvere den i browseren bliver den indsat på en simpel web side i filen public/broadcast/index.html.
Bemærk at filen /socket.io/socket.io.js genereres automatisk af serveren når socket.io pakken benyttes.
For at kunne tegne på canvas med p5js i public/broadcast/sketch.js er det nødvendigt at inkludere p5 biblioteksfilerne.
Disse er placeret i public/p5lib.