diff --git a/app/server.js b/app/server.js index 41c3e1f..2708a04 100644 --- a/app/server.js +++ b/app/server.js @@ -8,7 +8,7 @@ * @license For open source under AGPL-3.0 * @license For private project or commercial purposes contact us at: license.mirotalk@gmail.com * @author Miroslav Pejic - miroslav.pejic.85@gmail.com - * @version 1.0.80 + * @version 1.0.81 */ require('dotenv').config(); diff --git a/package.json b/package.json index 7306cb0..8561b23 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mirotalkbro", - "version": "1.0.80", + "version": "1.0.81", "description": "P2P WebRTC audio, video and screen live broadcast", "main": "app/server.js", "scripts": { diff --git a/public/js/broadcast.js b/public/js/broadcast.js index cf1c0f5..0bfa599 100644 --- a/public/js/broadcast.js +++ b/public/js/broadcast.js @@ -406,7 +406,7 @@ function toggleVideo() { const color = getMode === 'dark' ? 'white' : 'black'; videoBtn.style.color = videoBtn.style.color == 'red' ? color : 'red'; videoOff.style.visibility = videoBtn.style.color == 'red' ? 'visible' : 'hidden'; - window.stream.getVideoTracks()[0].enabled = !window.stream.getVideoTracks()[0].enabled; + broadcastStream.getVideoTracks()[0].enabled = !broadcastStream.getVideoTracks()[0].enabled; sendToViewersDataChannel('video', { visibility: videoOff.style.visibility }); } @@ -792,7 +792,7 @@ videoFpsSelect.onchange = applyVideoConstraints; function applyVideoConstraints() { const videoConstraints = getVideoConstraints(); - window.stream + broadcastStream .getVideoTracks()[0] .applyConstraints(videoConstraints) .then(() => { @@ -801,9 +801,9 @@ function applyVideoConstraints() { localStorage.videoFpsSelectedIndex = videoFpsSelect.selectedIndex; }) .catch((error) => { + console.error('setVideoQuality Error', error.name, error.message); videoQualitySelect.selectedIndex = localStorage.videoQualitySelectedIndex; videoFpsSelect.selectedIndex = localStorage.videoFpsSelectedIndex; - console.error('setVideoQuality', error); popupMessage( 'warning', 'Video quality/fps', @@ -862,7 +862,6 @@ function getStream() { }; const constraints = screenShareEnabled ? screenConstraints : cameraConstraints; - stopWindowStream(); stopBroadcastStream(); if (screenShareEnabled) { @@ -888,8 +887,6 @@ function getStream() { } function gotStream(stream) { - window.stream = stream; - broadcastStream = stream; if (!screenShareEnabled) { audioSelect.selectedIndex = [...audioSelect.options].findIndex( (option) => option.text === stream.getAudioTracks()[0].label, @@ -911,13 +908,12 @@ function gotScreenStream(stream) { if (audioTabTrack) tracksToInclude.push(audioTabTrack); if (audioTrack) tracksToInclude.push(audioTrack); const newStream = new MediaStream(tracksToInclude); - window.stream = newStream; - broadcastStream = newStream; attachStream(newStream); socket.emit('broadcaster', broadcastID); } function attachStream(stream) { + broadcastStream = stream; video.srcObject = stream; video.playsInline = true; video.autoplay = true; @@ -926,12 +922,6 @@ function attachStream(stream) { video.controls = false; } -function hasVideoOrAudioTracks(stream) { - const hasVideo = stream && stream.getVideoTracks().length > 0; - const hasAudio = stream && stream.getAudioTracks().length > 0; - return { hasVideo, hasAudio }; -} - function stopBroadcastStream() { if (broadcastStream) { broadcastStream.getTracks().forEach((track) => { @@ -940,14 +930,6 @@ function stopBroadcastStream() { } } -function stopWindowStream() { - if (window.stream) { - window.stream.getTracks().forEach((track) => { - track.stop(); - }); - } -} - function handleError(error) { console.error('Error', error); if (screenShareEnabled) { diff --git a/public/js/utils.js b/public/js/utils.js index b85b074..6249083 100644 --- a/public/js/utils.js +++ b/public/js/utils.js @@ -65,16 +65,18 @@ function getUUID4() { ); } +function hasVideoOrAudioTracks(mediaStream) { + const hasVideo = mediaStream && mediaStream.getVideoTracks().length > 0; + const hasAudio = mediaStream && mediaStream.getAudioTracks().length > 0; + return { hasVideo, hasAudio }; +} + function hasAudioTrack(mediaStream) { - if (!mediaStream) return false; - const audioTracks = mediaStream.getAudioTracks(); - return audioTracks.length > 0; + return mediaStream && mediaStream.getAudioTracks().length > 0; } function hasVideoTrack(mediaStream) { - if (!mediaStream) return false; - const videoTracks = mediaStream.getVideoTracks(); - return videoTracks.length > 0; + return mediaStream && mediaStream.getVideoTracks().length > 0; } function saveDataToFile(dataURL, fileName) { @@ -217,21 +219,20 @@ function goOutFullscreen() { } function logStreamSettingsInfo() { - const stream = window.stream; let streamInfo = []; - if (stream.getVideoTracks()[0]) { + if (broadcastStream.getVideoTracks()[0]) { streamInfo.push({ video: { - label: stream.getVideoTracks()[0].label, - settings: stream.getVideoTracks()[0].getSettings(), + label: broadcastStream.getVideoTracks()[0].label, + settings: broadcastStream.getVideoTracks()[0].getSettings(), }, }); } - if (stream.getAudioTracks()[0]) { + if (broadcastStream.getAudioTracks()[0]) { streamInfo.push({ audio: { - label: stream.getAudioTracks()[0].label, - settings: stream.getAudioTracks()[0].getSettings(), + label: broadcastStream.getAudioTracks()[0].label, + settings: broadcastStream.getAudioTracks()[0].getSettings(), }, }); }