This is an automated email from the ASF dual-hosted git repository.
sebawagner pushed a commit to branch
OPENMEETINGS-2573/type-audio-events-can-start-flowing-again
in repository https://gitbox.apache.org/repos/asf/openmeetings.git
The following commit(s) were added to
refs/heads/OPENMEETINGS-2573/type-audio-events-can-start-flowing-again by this
push:
new e679edd OPENMEETINGS-2573 filter out audio Type events to only stop
the stream in case its audio-only room.
e679edd is described below
commit e679eddb9bb3eeb22c2d5d72d66860db7fd2d22f
Author: Sebastian Wagner <[email protected]>
AuthorDate: Thu Feb 11 19:25:00 2021 +1300
OPENMEETINGS-2573 filter out audio Type events to only stop the stream in
case its audio-only room.
---
.../apache/openmeetings/core/remote/KStream.java | 44 +++++++++++++++++-----
1 file changed, 34 insertions(+), 10 deletions(-)
diff --git
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KStream.java
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KStream.java
index e311981..6c03fbb 100644
---
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KStream.java
+++
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KStream.java
@@ -115,7 +115,7 @@ public class KStream extends AbstractStream implements
ISipCallbacks {
if ((sdpOffer.indexOf("m=audio") > -1 && !hasAudio)
|| (sdpOffer.indexOf("m=video") > -1 &&
!hasVideo && StreamType.SCREEN != streamType))
{
- log.warn("Broadcast started without enough rights");
+ log.warn("Broadcast started without enough rights, sid
{}, uid {}", sid, uid);
return;
}
if (StreamType.SCREEN == streamType) {
@@ -162,15 +162,39 @@ public class KStream extends AbstractStream implements
ISipCallbacks {
});
}
+ /**
+ * Invoked in case stream stops to decide on if this stream is worth
stopping.
+ *
+ * Stop broadcast in case:
+ * - Audio only stream and audio has been detected as not streaming
anymore
+ * - Video or Data
+ *
+ * @param mediaType the MediaType that stopped flowing
+ * @return true in case this stream should be dropped
+ */
+ private boolean checkFlowOutEventForStopping(MediaType mediaType) {
+ if (MediaType.AUDIO == mediaType) {
+ if (!hasVideo && hasAudio) {
+ // Only stop in case its audio-only
+ return true;
+ } else {
+ return false;
+ }
+ } else {
+ return true;
+ }
+ }
+
private void internalStartBroadcast(final StreamDesc sd, final String
sdpOffer) {
outgoingMedia.addMediaSessionTerminatedListener(evt ->
log.warn("Media stream terminated {}", sd));
flowoutSubscription =
outgoingMedia.addMediaFlowOutStateChangeListener(evt -> {
- log.info("Media Flow OUT STATE :: {}, evt {}, source {}"
- , evt.getState(), evt.getMediaType(),
evt.getSource());
- if (MediaFlowState.NOT_FLOWING == evt.getState()) {
- log.warn("FlowOut Future is created");
+ log.info("Media Flow OUT STATE :: {}, mediaType {},
source {}, sid {}, uid {}"
+ , evt.getState(), evt.getMediaType(),
evt.getSource(), sid, uid);
+ if (MediaFlowState.NOT_FLOWING == evt.getState()
+ &&
checkFlowOutEventForStopping(evt.getMediaType())) {
+ log.warn("FlowOut Future is created, sid {},
uid {}", sid, uid);
flowoutFuture = Optional.of(new
CompletableFuture<>().completeAsync(() -> {
- log.warn("KStream will be dropped {}",
sd);
+ log.warn("KStream will be dropped {},
sid {}, uid {}", sd, sid, uid);
if (StreamType.SCREEN == streamType) {
kHandler.getStreamProcessor().doStopSharing(sid, uid);
}
@@ -181,8 +205,8 @@ public class KStream extends AbstractStream implements
ISipCallbacks {
dropFlowoutFuture();
}
});
- outgoingMedia.addMediaFlowInStateChangeListener(evt ->
log.warn("Media Flow IN :: {}, {}, {}"
- , evt.getState(), evt.getMediaType(),
evt.getSource()));
+ outgoingMedia.addMediaFlowInStateChangeListener(evt ->
log.warn("Media Flow IN :: {}, {}, {}, sid {}, uid {}"
+ , evt.getState(), evt.getMediaType(),
evt.getSource(), sid, uid));
if (!sipClient) {
addListener(sd.getSid(), sd.getUid(), sdpOffer);
addSipProcessor(kRoom.getSipCount());
@@ -220,10 +244,10 @@ public class KStream extends AbstractStream implements
ISipCallbacks {
public void addListener(String sid, String uid, String sdpOffer) {
final boolean self = uid.equals(this.uid);
- log.info("USER {}: have started {} in kRoom {}", uid, self ?
"broadcasting" : "receiving", getRoomId());
+ log.info("USER {}: have started, sid {}, uid {} in kRoom {}",
sid, uid, self ? "broadcasting" : "receiving", getRoomId());
log.trace("USER {}: SdpOffer is {}", uid, sdpOffer);
if (!self && outgoingMedia == null) {
- log.warn("Trying to add listener too early");
+ log.warn("Trying to add listener too early, sid {}, uid
{}", sid, uid);
return;
}