From 2e92de80100431b4f674ae680c46d9143ac4822d Mon Sep 17 00:00:00 2001 From: Mario Jr <mariogasparoni@gmail.com> Date: Tue, 23 Feb 2021 11:12:37 -0300 Subject: [PATCH] Clean up HTMLAudioElement used for notification sounds After ending the notification playback, we set the ".src" property to null, which immediately stop the internal player of mobile browser (tested on Chrome for Android - device list is on #11458). For the specific list of devices, this prevents the internal buffer error "-61" described in #11458. Fixes #11458. --- .../imports/ui/components/activity-check/component.jsx | 1 + .../imports/ui/components/audio/audio-test/container.jsx | 1 + bigbluebutton-html5/imports/ui/services/audio-manager/index.js | 2 ++ 3 files changed, 4 insertions(+) diff --git a/bigbluebutton-html5/imports/ui/components/activity-check/component.jsx b/bigbluebutton-html5/imports/ui/components/activity-check/component.jsx index 628a2e717a..598095e77a 100644 --- a/bigbluebutton-html5/imports/ui/components/activity-check/component.jsx +++ b/bigbluebutton-html5/imports/ui/components/activity-check/component.jsx @@ -76,6 +76,7 @@ class ActivityCheck extends Component { playAudioAlert() { this.alert = new Audio(`${Meteor.settings.public.app.cdn + Meteor.settings.public.app.basename}/resources/sounds/notify.mp3`); + alert.addEventListener('ended', () => { alert.src = null; }); this.alert.play(); } diff --git a/bigbluebutton-html5/imports/ui/components/audio/audio-test/container.jsx b/bigbluebutton-html5/imports/ui/components/audio/audio-test/container.jsx index 6fef02dfce..ac3b4b6605 100644 --- a/bigbluebutton-html5/imports/ui/components/audio/audio-test/container.jsx +++ b/bigbluebutton-html5/imports/ui/components/audio/audio-test/container.jsx @@ -9,6 +9,7 @@ export default withTracker(() => ({ outputDeviceId: Service.outputDeviceId(), handlePlayAudioSample: (deviceId) => { const sound = new Audio((Meteor.settings.public.app.cdn + Meteor.settings.public.app.basename) + '/resources/sounds/audioSample.mp3'); + sound.addEventListener('ended', () => { sound.src = null; }); if (deviceId && sound.setSinkId) sound.setSinkId(deviceId); sound.play(); }, diff --git a/bigbluebutton-html5/imports/ui/services/audio-manager/index.js b/bigbluebutton-html5/imports/ui/services/audio-manager/index.js index 18f1e31f3b..5027304d4a 100755 --- a/bigbluebutton-html5/imports/ui/services/audio-manager/index.js +++ b/bigbluebutton-html5/imports/ui/services/audio-manager/index.js @@ -628,6 +628,8 @@ class AudioManager { const audioAlert = new Audio(url); + audioAlert.addEventListener('ended', () => { audioAlert.src = null; }); + if (this.outputDeviceId && (typeof audioAlert.setSinkId === 'function')) { return audioAlert .setSinkId(this.outputDeviceId) -- GitLab