diff --git a/bbb-video/src/main/java/org/bigbluebutton/app/video/VideoApplication.java b/bbb-video/src/main/java/org/bigbluebutton/app/video/VideoApplication.java index 7ccf8171d6eca0c7d05c4b81a77119279276b431..a983cbfb03449cba3183c09f256df084f8448fe3 100755 --- a/bbb-video/src/main/java/org/bigbluebutton/app/video/VideoApplication.java +++ b/bbb-video/src/main/java/org/bigbluebutton/app/video/VideoApplication.java @@ -214,7 +214,8 @@ public class VideoApplication extends MultiThreadedApplicationAdapter { IStreamListener listener = streamListeners.remove(scopeName + "-" + stream.getPublishedName()); if (listener != null) { - stream.removeStreamListener(listener); + ((VideoStreamListener) listener).streamStopped(); + stream.removeStreamListener(listener); } if (recordVideoStream) { diff --git a/bbb-video/src/main/java/org/bigbluebutton/app/video/VideoStreamListener.java b/bbb-video/src/main/java/org/bigbluebutton/app/video/VideoStreamListener.java index 0e28e5d685a14a42194b68aa6b2dcf4e2f64f037..eefd27a4837c800742da319072b1116790c8aeb4 100755 --- a/bbb-video/src/main/java/org/bigbluebutton/app/video/VideoStreamListener.java +++ b/bbb-video/src/main/java/org/bigbluebutton/app/video/VideoStreamListener.java @@ -75,6 +75,8 @@ public class VideoStreamListener implements IStreamListener { // Event queue worker job name private String timeoutJobName; + private volatile boolean publishing = false; + private IScope scope; public VideoStreamListener(IScope scope, IBroadcastStream stream, Boolean record) { @@ -107,6 +109,7 @@ public class VideoStreamListener implements IStreamListener { if (! firstPacketReceived) { firstPacketReceived = true; + publishing = true; // start the worker to monitor if we are still receiving video packets timeoutJobName = scheduler.addScheduledJob(videoTimeout, new TimeoutJob()); @@ -129,6 +132,10 @@ public class VideoStreamListener implements IStreamListener { recordingService = s; } + public void streamStopped() { + this.publishing = false; + } + private class TimeoutJob implements IScheduledJob { private boolean streamStopped = false; @@ -141,9 +148,11 @@ public class VideoStreamListener implements IStreamListener { // remove the scheduled job scheduler.removeScheduledJob(timeoutJobName); // stop / clean up - stream.stop(); + if (publishing) { + stream.stop(); + } + } - } }