web: optional audio transmitting

This commit is contained in:
Maxim Devaev 2022-11-29 15:13:48 +03:00
parent a68eb4ed2d
commit 0e9b87ad61
2 changed files with 34 additions and 25 deletions

View File

@ -74,6 +74,12 @@ export function Streamer() {
$("stream-video").muted = !value; $("stream-video").muted = !value;
$("stream-video").volume = value / 100; $("stream-video").volume = value / 100;
$("stream-audio-volume-value").innerHTML = value + "%"; $("stream-audio-volume-value").innerHTML = value + "%";
if (__streamer.getMode() === "janus") {
let allow_audio = !$("stream-video").muted;
if (__streamer.isAudioAllowed() !== allow_audio) {
__resetStream();
}
}
}); });
tools.el.setOnClick($("stream-screenshot-button"), __clickScreenshotButton); tools.el.setOnClick($("stream-screenshot-button"), __clickScreenshotButton);
@ -122,6 +128,9 @@ export function Streamer() {
); );
let mode = (__janus_enabled ? tools.storage.get("stream.mode", "janus") : "mjpeg"); let mode = (__janus_enabled ? tools.storage.get("stream.mode", "janus") : "mjpeg");
tools.radio.clickValue("stream-mode-radio", mode); tools.radio.clickValue("stream-mode-radio", mode);
if (!__janus_enabled) {
tools.feature.setEnabled($("stream-audio"), false); // Enabling in stream_janus.js
}
self.setState(__state); self.setState(__state);
}; };
@ -239,22 +248,29 @@ export function Streamer() {
tools.slider.setValue(el, value); tools.slider.setValue(el, value);
}; };
var __resetStream = function(mode=null) {
if (mode === null) {
mode = __streamer.getMode();
}
__streamer.stopStream();
if (mode === "janus") {
__streamer = new JanusStreamer(__setActive, __setInactive, __setInfo, !$("stream-video").muted);
} else { // mjpeg
__streamer = new MjpegStreamer(__setActive, __setInactive, __setInfo);
tools.feature.setEnabled($("stream-audio"), false); // Enabling in stream_janus.js
}
if (wm.isWindowVisible($("stream-window"))) {
__streamer.ensureStream(__state);
}
};
var __clickModeRadio = function() { var __clickModeRadio = function() {
let mode = tools.radio.getValue("stream-mode-radio"); let mode = tools.radio.getValue("stream-mode-radio");
tools.storage.set("stream.mode", mode); tools.storage.set("stream.mode", mode);
if (mode !== __streamer.getMode()) { if (mode !== __streamer.getMode()) {
tools.hidden.setVisible($("stream-image"), (mode !== "janus")); tools.hidden.setVisible($("stream-image"), (mode !== "janus"));
tools.hidden.setVisible($("stream-video"), (mode === "janus")); tools.hidden.setVisible($("stream-video"), (mode === "janus"));
if (mode === "janus") { __resetStream(mode);
__streamer.stopStream();
__streamer = new JanusStreamer(__setActive, __setInactive, __setInfo);
} else { // mjpeg
__streamer.stopStream();
__streamer = new MjpegStreamer(__setActive, __setInactive, __setInfo);
}
if (wm.isWindowVisible($("stream-window"))) {
__streamer.ensureStream(__state);
}
} }
}; };
@ -270,11 +286,7 @@ export function Streamer() {
var __clickResetButton = function() { var __clickResetButton = function() {
wm.confirm("Are you sure you want to reset stream?").then(function (ok) { wm.confirm("Are you sure you want to reset stream?").then(function (ok) {
if (ok) { if (ok) {
if (wm.isWindowVisible($("stream-window"))) { __resetStream();
__streamer.stopStream();
__streamer.ensureStream(__state);
}
let http = tools.makeRequest("POST", "/api/streamer/reset", function() { let http = tools.makeRequest("POST", "/api/streamer/reset", function() {
if (http.readyState === 4) { if (http.readyState === 4) {
if (http.status !== 200) { if (http.status !== 200) {

View File

@ -29,7 +29,7 @@ import {tools, $} from "../tools.js";
var _Janus = null; var _Janus = null;
export function JanusStreamer(__setActive, __setInactive, __setInfo) { export function JanusStreamer(__setActive, __setInactive, __setInfo, __allow_audio) {
var self = this; var self = this;
var __stop = false; var __stop = false;
@ -45,7 +45,9 @@ export function JanusStreamer(__setActive, __setInactive, __setInfo) {
var __state = null; var __state = null;
var __frames = 0; var __frames = 0;
self.getName = () => "H.264"; self.isAudioAllowed = () => __allow_audio;
self.getName = () => (__allow_audio ? "H.264 + Audio" : "H.264");
self.getMode = () => "janus"; self.getMode = () => "janus";
self.getResolution = function() { self.getResolution = function() {
@ -124,7 +126,6 @@ export function JanusStreamer(__setActive, __setInactive, __setInfo) {
__handle.webrtcStuff.remoteStream = null; __handle.webrtcStuff.remoteStream = null;
} }
$("stream-video").srcObject = null; $("stream-video").srcObject = null;
__setAudioEnabled(false);
if (__janus !== null) { if (__janus !== null) {
__janus.destroy(); __janus.destroy();
} }
@ -179,7 +180,7 @@ export function JanusStreamer(__setActive, __setInactive, __setInfo) {
__setInactive(); __setInactive();
__setInfo(false, false, ""); __setInfo(false, false, "");
} else if (msg.result.status === "features") { } else if (msg.result.status === "features") {
__setAudioEnabled(msg.result.features.audio); tools.feature.setEnabled($("stream-audio"), msg.result.features.audio);
} }
} else if (msg.error_code || msg.error) { } else if (msg.error_code || msg.error) {
__logError("Got uStreamer error message:", msg.error_code, "-", msg.error); __logError("Got uStreamer error message:", msg.error_code, "-", msg.error);
@ -241,10 +242,6 @@ export function JanusStreamer(__setActive, __setInactive, __setInfo) {
}); });
}; };
var __setAudioEnabled = function(enabled) {
tools.feature.setEnabled($("stream-audio"), enabled);
};
var __startInfoInterval = function() { var __startInfoInterval = function() {
__stopInfoInterval(); __stopInfoInterval();
__setActive(); __setActive();
@ -292,9 +289,9 @@ export function JanusStreamer(__setActive, __setInactive, __setInfo) {
var __sendWatch = function() { var __sendWatch = function() {
if (__handle) { if (__handle) {
__logInfo("Sending WATCH + FEATURES ..."); __logInfo(`Sending WATCH(audio=${__allow_audio}) + FEATURES ...`);
__handle.send({"message": {"request": "features"}}); __handle.send({"message": {"request": "features"}});
__handle.send({"message": {"request": "watch", "params": {"audio": true}}}); __handle.send({"message": {"request": "watch", "params": {"audio": __allow_audio}}});
} }
}; };