From 48aac0563e6c20170c39c0c2da51d82785a5cb79 Mon Sep 17 00:00:00 2001 From: Lorenzo Miniero Date: Mon, 11 Apr 2022 14:39:33 +0200 Subject: [PATCH] Added new demos: WebAudio and Virtual Backgrounds (#2941) --- html/background/retro.webp | Bin 0 -> 71256 bytes html/demos.html | 8 + html/navbar.html | 2 + html/virtualbg.html | 125 +++++++ html/virtualbg.js | 685 +++++++++++++++++++++++++++++++++++++ html/webaudio.html | 115 +++++++ html/webaudio.js | 395 +++++++++++++++++++++ 7 files changed, 1330 insertions(+) create mode 100644 html/background/retro.webp create mode 100644 html/virtualbg.html create mode 100644 html/virtualbg.js create mode 100644 html/webaudio.html create mode 100644 html/webaudio.js diff --git a/html/background/retro.webp b/html/background/retro.webp new file mode 100644 index 0000000000000000000000000000000000000000..09df77afa229afe593cb44292d94846608e5386d GIT binary patch literal 71256 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 WebRTC Server: Demo Tests Canvas Capture A variant of the Echo Test demo, that shows how to use a canvas element as a WebRTC media source. + + Web Audio Processing + A variant of the Echo Test demo, that shows how to use Web Audio to process audio before sending it to Janus. + + + Virtual Background + A variant of the Echo Test demo, that shows how to use something like MediaPipe to add a virtual background before sending video to Janus. + VP9-SVC Video Room A variant of the Video Room demo, that allows you to test the VP9 SVC layer selection, if available. diff --git a/html/navbar.html b/html/navbar.html index f1998e2adb..471857a75e 100644 --- a/html/navbar.html +++ b/html/navbar.html @@ -32,6 +32,8 @@
  • End-to-end Encryption
  • Multichannel Opus (surround)
  • Canvas Capture
  • +
  • Web Audio Processing
  • +
  • Virtual Background
  • VP9-SVC Video Room
  • Admin/Monitor
  • diff --git a/html/virtualbg.html b/html/virtualbg.html new file mode 100644 index 0000000000..30eab185f6 --- /dev/null +++ b/html/virtualbg.html @@ -0,0 +1,125 @@ + + + + + + +Janus WebRTC Server (multistream): Virtual Background + + + + + + + + + + + + + + + + + + +Fork me on GitHub + + + +
    +
    +
    + +
    +
    +
    +

    Demo details

    +

    This is a variant of the Echo Test and Canvas demos meant to + showcase how you can use libraries like + MediaPipe + to add a virtual background to your webcam capture before sending it + to Janus: everything is exactly the same in term of available controls, + features, and the like, with the substantial difference that we'll + play a bit with what we'll send on the video stream.

    +

    More precisely, the demo captures the webcam feed via a + getUserMedia call, and then will make use of MediaPipe + to segment the video and replace the background by drawing on a + canvas element. The canvas element is then used + as the actual source of media for our PeerConnection, which means the + video we get back from the EchoTest plugin should reflect the + tweaks we've made on the stream.

    +

    Notice that this is a very naive implementation, which is heavily + based on the example + from the MediaPipe Selfie Segmentation documentation.

    +

    Press the Start button above to launch the demo.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +

    Local Stream +
    + + + +
    +

    +
    +
    + + +
    +
    +
    +
    +
    +
    +
    +

    Remote Stream

    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + +
    + + + diff --git a/html/virtualbg.js b/html/virtualbg.js new file mode 100644 index 0000000000..af4cf718f0 --- /dev/null +++ b/html/virtualbg.js @@ -0,0 +1,685 @@ +// We make use of this 'server' variable to provide the address of the +// REST Janus API. By default, in this example we assume that Janus is +// co-located with the web server hosting the HTML pages but listening +// on a different port (8088, the default for HTTP in Janus), which is +// why we make use of the 'window.location.hostname' base address. Since +// Janus can also do HTTPS, and considering we don't really want to make +// use of HTTP for Janus if your demos are served on HTTPS, we also rely +// on the 'window.location.protocol' prefix to build the variable, in +// particular to also change the port used to contact Janus (8088 for +// HTTP and 8089 for HTTPS, if enabled). +// In case you place Janus behind an Apache frontend (as we did on the +// online demos at http://janus.conf.meetecho.com) you can just use a +// relative path for the variable, e.g.: +// +// var server = "/janus"; +// +// which will take care of this on its own. +// +// +// If you want to use the WebSockets frontend to Janus, instead, you'll +// have to pass a different kind of address, e.g.: +// +// var server = "ws://" + window.location.hostname + ":8188"; +// +// Of course this assumes that support for WebSockets has been built in +// when compiling the server. WebSockets support has not been tested +// as much as the REST API, so handle with care! +// +// +// If you have multiple options available, and want to let the library +// autodetect the best way to contact your server (or pool of servers), +// you can also pass an array of servers, e.g., to provide alternative +// means of access (e.g., try WebSockets first and, if that fails, fall +// back to plain HTTP) or just have failover servers: +// +// var server = [ +// "ws://" + window.location.hostname + ":8188", +// "/janus" +// ]; +// +// This will tell the library to try connecting to each of the servers +// in the presented order. The first working server will be used for +// the whole session. +// +var server = null; +if(window.location.protocol === 'http:') + server = "http://" + window.location.hostname + ":8088/janus"; +else + server = "https://" + window.location.hostname + ":8089/janus"; + +var janus = null; +var echotest = null; +var opaqueId = "canvas-"+Janus.randomString(12); + +var localTracks = {}, localVideos = 0, + remoteTracks = {}, remoteVideos = 0; +var bitrateTimer = null; +var spinner = null; + +var audioenabled = false; +var videoenabled = false; + +var doSimulcast = (getQueryStringValue("simulcast") === "yes" || getQueryStringValue("simulcast") === "true"); +var doSvc = getQueryStringValue("svc"); +if(doSvc === "") + doSvc = null; +var acodec = (getQueryStringValue("acodec") !== "" ? getQueryStringValue("acodec") : null); +var vcodec = (getQueryStringValue("vcodec") !== "" ? getQueryStringValue("vcodec") : null); +var vprofile = (getQueryStringValue("vprofile") !== "" ? getQueryStringValue("vprofile") : null); +var doDtx = (getQueryStringValue("dtx") === "yes" || getQueryStringValue("dtx") === "true"); +var doOpusred = (getQueryStringValue("opusred") === "yes" || getQueryStringValue("opusred") === "true"); +var simulcastStarted = false; + +// Canvas object +var canvas = null;; +var context = null; +var canvasStream = null; +var width = doSimulcast ? 1280 : 640, + height = doSimulcast ? 720 : 360; + +// We use this image as our virtual background +const image = new Image(); +image.src = './background/retro.webp'; + +$(document).ready(function() { + canvas = document.getElementById('canvas'); + context = canvas.getContext('2d'); + // Initialize the library (all console debuggers enabled) + Janus.init({debug: "all", callback: function() { + // Use a button to start the demo + $('#start').one('click', function() { + $(this).attr('disabled', true).unbind('click'); + // Make sure the browser supports WebRTC + if(!Janus.isWebrtcSupported()) { + bootbox.alert("No WebRTC support... "); + return; + } + // Create session + janus = new Janus( + { + server: server, + // No "iceServers" is provided, meaning janus.js will use a default STUN server + // Here are some examples of how an iceServers field may look like to support TURN + // iceServers: [{urls: "turn:yourturnserver.com:3478", username: "janususer", credential: "januspwd"}], + // iceServers: [{urls: "turn:yourturnserver.com:443?transport=tcp", username: "janususer", credential: "januspwd"}], + // iceServers: [{urls: "turns:yourturnserver.com:443?transport=tcp", username: "janususer", credential: "januspwd"}], + // Should the Janus API require authentication, you can specify either the API secret or user token here too + // token: "mytoken", + // or + // apisecret: "serversecret", + success: function() { + // Attach to EchoTest plugin + janus.attach( + { + plugin: "janus.plugin.echotest", + opaqueId: opaqueId, + success: function(pluginHandle) { + $('#details').remove(); + echotest = pluginHandle; + Janus.log("Plugin attached! (" + echotest.getPlugin() + ", id=" + echotest.getId() + ")"); + // We're connected to the plugin, create and populate the canvas element + createCanvas(); + $('#start').removeAttr('disabled').html("Stop") + .click(function() { + $(this).attr('disabled', true); + if(bitrateTimer) + clearInterval(bitrateTimer); + bitrateTimer = null; + janus.destroy(); + }); + }, + error: function(error) { + console.error(" -- Error attaching plugin...", error); + bootbox.alert("Error attaching plugin... " + error); + }, + consentDialog: function(on) { + Janus.debug("Consent dialog should be " + (on ? "on" : "off") + " now"); + if(on) { + // Darken screen and show hint + $.blockUI({ + message: '
    ', + css: { + border: 'none', + padding: '15px', + backgroundColor: 'transparent', + color: '#aaa', + top: '10px', + left: (navigator.mozGetUserMedia ? '-100px' : '300px') + } }); + } else { + // Restore screen + $.unblockUI(); + } + }, + iceState: function(state) { + Janus.log("ICE state changed to " + state); + }, + mediaState: function(medium, on, mid) { + Janus.log("Janus " + (on ? "started" : "stopped") + " receiving our " + medium + " (mid=" + mid + ")"); + }, + webrtcState: function(on) { + Janus.log("Janus says our WebRTC PeerConnection is " + (on ? "up" : "down") + " now"); + $("#videoleft").parent().unblock(); + }, + slowLink: function(uplink, lost, mid) { + Janus.warn("Janus reports problems " + (uplink ? "sending" : "receiving") + + " packets on mid " + mid + " (" + lost + " lost packets)"); + }, + onmessage: function(msg, jsep) { + Janus.debug(" ::: Got a message :::", msg); + if(jsep) { + Janus.debug("Handling SDP as well...", jsep); + echotest.handleRemoteJsep({ jsep: jsep }); + } + var result = msg["result"]; + if(result) { + if(result === "done") { + // The plugin closed the echo test + bootbox.alert("The Echo Test is over"); + if(spinner) + spinner.stop(); + spinner = null; + $('video').remove(); + $('#waitingvideo').remove(); + $('#peervideo').remove(); + $('#toggleaudio').attr('disabled', true); + $('#togglevideo').attr('disabled', true); + $('#bitrate').attr('disabled', true); + $('#curbitrate').hide(); + $('#curres').hide(); + return; + } + // Any loss? + var status = result["status"]; + if(status === "slow_link") { + toastr.warning("Janus apparently missed many packets we sent, maybe we should reduce the bitrate", "Packet loss?", {timeOut: 2000}); + } + } + // Is simulcast in place? + var substream = msg["substream"]; + var temporal = msg["temporal"]; + if((substream !== null && substream !== undefined) || (temporal !== null && temporal !== undefined)) { + if(!simulcastStarted) { + simulcastStarted = true; + addSimulcastButtons(msg["videocodec"] === "vp8"); + } + // We just received notice that there's been a switch, update the buttons + updateSimulcastButtons(substream, temporal); + } + }, + onlocaltrack: function(track, on) { + // We use the track ID as name of the element, but it may contain invalid characters + var trackId = track.id.replace(/[{}]/g, ""); + if(!on) { + // Track removed, get rid of the stream and the rendering + var stream = localTracks[trackId]; + if(stream) { + try { + var tracks = stream.getTracks(); + for(var i in tracks) { + var mst = tracks[i]; + if(mst) + mst.stop(); + } + } catch(e) {} + } + if(track.kind === "video") { + $('#myvideo' + trackId).remove(); + localVideos--; + if(localVideos === 0) { + // No video, at least for now: show a placeholder + if($('#videoleft .no-video-container').length === 0) { + $('#videoleft').append( + '
    ' + + '' + + 'No webcam available' + + '
    '); + } + } + } + delete localTracks[trackId]; + return; + } + // If we're here, a new track was added + var stream = localTracks[trackId]; + if(stream) { + // We've been here already + return; + } + if($('#videoleft video').length === 0) { + $('#videos').removeClass('hide').show(); + } + if(track.kind === "audio") { + // We ignore local audio tracks, they'd generate echo anyway + if(localVideos === 0) { + // No video, at least for now: show a placeholder + if($('#videoleft .no-video-container').length === 0) { + $('#videoleft').append( + '
    ' + + '' + + 'No webcam available' + + '
    '); + } + } + } else { + // New video track: create a stream out of it + localVideos++; + $('#videoleft .no-video-container').remove(); + stream = new MediaStream(); + stream.addTrack(track.clone()); + localTracks[trackId] = stream; + Janus.log("Created local stream:", stream); + $('#videoleft').append('