diff --git a/bigbluebutton-html5/imports/api/external-videos/server/methods/destroyExternalVideo.js b/bigbluebutton-html5/imports/api/external-videos/server/methods/destroyExternalVideo.js new file mode 100644 index 0000000000000000000000000000000000000000..cd2b1772e37a6e3f2d1ae4bd8e60c9808dfdcf64 --- /dev/null +++ b/bigbluebutton-html5/imports/api/external-videos/server/methods/destroyExternalVideo.js @@ -0,0 +1,11 @@ +import { Meteor } from 'meteor/meteor'; +import Logger from '/imports/startup/server/logger'; + +export default function destroyExternalVideo(meetingId) { + const streamName = `external-videos-${meetingId}`; + + if (Meteor.StreamerCentral.instances[streamName]) { + Logger.info(`Destroying External Video streamer object for ${streamName}`); + delete Meteor.StreamerCentral.instances[streamName]; + } +}; diff --git a/bigbluebutton-html5/imports/api/external-videos/server/methods/initializeExternalVideo.js b/bigbluebutton-html5/imports/api/external-videos/server/methods/initializeExternalVideo.js index d774abba7d240d85a2e4e6ee2e767c349be9de1f..85dbdaed280b821e03db109e862d66c1e8725e24 100644 --- a/bigbluebutton-html5/imports/api/external-videos/server/methods/initializeExternalVideo.js +++ b/bigbluebutton-html5/imports/api/external-videos/server/methods/initializeExternalVideo.js @@ -17,8 +17,13 @@ export default function initializeExternalVideo(credentials, options) { check(meetingId, String); - let streamer = new Meteor.Streamer(`external-videos-${meetingId}`); - streamer.allowRead('all'); - streamer.allowWrite('all'); - streamer.allowEmit(allowFromPresenter); -} + const streamName = `external-videos-${meetingId}`; + if (!Meteor.StreamerCentral.instances[streamName]) { + streamer = new Meteor.Streamer(streamName); + streamer.allowRead('all'); + streamer.allowWrite('all'); + streamer.allowEmit(allowFromPresenter); + } else { + Logger.debug('External Video streamer is already created for ', streamName); + } +}; diff --git a/bigbluebutton-html5/imports/api/meetings/server/handlers/meetingDestruction.js b/bigbluebutton-html5/imports/api/meetings/server/handlers/meetingDestruction.js index b99b79d8253874f877d83c43f1dd851cf373cfc0..35548fbfbd126e589ae6cd9e56a1445495723e16 100644 --- a/bigbluebutton-html5/imports/api/meetings/server/handlers/meetingDestruction.js +++ b/bigbluebutton-html5/imports/api/meetings/server/handlers/meetingDestruction.js @@ -1,10 +1,14 @@ import RedisPubSub from '/imports/startup/server/redis'; import { check } from 'meteor/check'; +import destroyExternalVideo from '/imports/api/external-videos/server/methods/destroyExternalVideo'; + export default function handleMeetingDestruction({ body }) { check(body, Object); const { meetingId } = body; check(meetingId, String); + destroyExternalVideo(meetingId); + return RedisPubSub.destroyMeetingQueue(meetingId); }