You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2020/11/23 13:38:07 UTC
[openmeetings] branch master updated: [OPENMEETINGS-2523] refresh
of audio/video seems to work
This is an automated email from the ASF dual-hosted git repository.
solomax pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/openmeetings.git
The following commit(s) were added to refs/heads/master by this push:
new 87fed22 [OPENMEETINGS-2523] refresh of audio/video seems to work
87fed22 is described below
commit 87fed22bbd2f8d900eb618affaa8cffe4afaefcb
Author: Maxim Solodovnik <so...@gmail.com>
AuthorDate: Mon Nov 23 20:37:52 2020 +0700
[OPENMEETINGS-2523] refresh of audio/video seems to work
---
.../apache/openmeetings/core/remote/KStream.java | 25 ++++++++++++++++------
.../openmeetings/core/remote/StreamProcessor.java | 13 +++++++++++
.../apache/openmeetings/web/room/raw-settings.js | 4 ++--
.../openmeetings/web/room/raw-video-manager.js | 5 ++++-
.../org/apache/openmeetings/web/room/raw-video.js | 18 ++++++++++++----
5 files changed, 52 insertions(+), 13 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 650ecbe..d744c18 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
@@ -53,6 +53,7 @@ import org.apache.openmeetings.db.util.ws.RoomMessage;
import org.apache.openmeetings.db.util.ws.TextRoomMessage;
import org.kurento.client.Continuation;
import org.kurento.client.IceCandidate;
+import org.kurento.client.ListenerSubscription;
import org.kurento.client.MediaFlowState;
import org.kurento.client.MediaObject;
import org.kurento.client.MediaPipeline;
@@ -82,6 +83,7 @@ public class KStream extends AbstractStream implements ISipCallbacks {
private Optional<SipStackProcessor> sipProcessor;
private final ConcurrentMap<String, WebRtcEndpoint> listeners = new ConcurrentHashMap<>();
private Optional<CompletableFuture<Object>> flowoutFuture = Optional.empty();
+ private ListenerSubscription flowoutSubscription;
private Long chunkId;
private Type type;
private String sdpOffer;
@@ -154,7 +156,7 @@ public class KStream extends AbstractStream implements ISipCallbacks {
this.sdpOffer = sdpOffer;
outgoingMedia = createEndpoint(sd.getSid(), sd.getUid());
outgoingMedia.addMediaSessionTerminatedListener(evt -> log.warn("Media stream terminated {}", sd));
- outgoingMedia.addMediaFlowOutStateChangeListener(evt -> {
+ flowoutSubscription = outgoingMedia.addMediaFlowOutStateChangeListener(evt -> {
log.info("Media Flow STATE :: {}, type {}, evt {}", evt.getState(), evt.getType(), evt.getMediaType());
if (MediaFlowState.NOT_FLOWING == evt.getState()) {
log.warn("FlowOut Future is created");
@@ -167,11 +169,7 @@ public class KStream extends AbstractStream implements ISipCallbacks {
return null;
}, delayedExecutor(getFlowoutTimeout(), TimeUnit.SECONDS)));
} else {
- flowoutFuture.ifPresent(f -> {
- log.warn("FlowOut Future is canceled");
- f.cancel(true);
- flowoutFuture = Optional.empty();
- });
+ dropFlowoutFuture();
}
});
outgoingMedia.addMediaFlowInStateChangeListener(evt -> log.warn("Media FlowIn :: {}", evt));
@@ -194,6 +192,21 @@ public class KStream extends AbstractStream implements ISipCallbacks {
}
}
+ public void broadcastRestarted() {
+ if (outgoingMedia != null && flowoutSubscription != null) {
+ outgoingMedia.removeMediaFlowOutStateChangeListener(flowoutSubscription);
+ }
+ dropFlowoutFuture();
+ }
+
+ private void dropFlowoutFuture() {
+ flowoutFuture.ifPresent(f -> {
+ log.warn("FlowOut Future is canceled");
+ f.cancel(true);
+ flowoutFuture = Optional.empty();
+ });
+ }
+
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());
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/StreamProcessor.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/StreamProcessor.java
index 60c0030..be483e0 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/StreamProcessor.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/StreamProcessor.java
@@ -109,6 +109,9 @@ public class StreamProcessor implements IStreamProcessor {
case "broadcastStarted":
handleBroadcastStarted(c, uid, msg);
break;
+ case "broadcastRestarted":
+ handleBroadcastRestarted(c, uid);
+ break;
case "onIceCandidate":
sender = getByUid(uid);
if (sender != null) {
@@ -173,6 +176,16 @@ public class StreamProcessor implements IStreamProcessor {
}
}
+ private void handleBroadcastRestarted(Client c, final String uid) {
+ if (!kHandler.isConnected()) {
+ return;
+ }
+ KStream sender = getByUid(uid);
+ if (sender != null) {
+ sender.broadcastRestarted();
+ }
+ }
+
private void handleBroadcastStarted(Client c, final String uid, JSONObject msg) {
if (!kHandler.isConnected()) {
return;
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-settings.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-settings.js
index 614e26b..c3b2be0 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-settings.js
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-settings.js
@@ -240,8 +240,8 @@ var VideoSettings = (function() {
});
cnts.video.width = width < 1281 ? width : 1280;
} else {
- cnts.video.width = s.video.width;
- cnts.video.height = s.video.height;
+ cnts.video.width = o.interview ? 320 : s.video.width;
+ cnts.video.height = o.interview ? 260 : s.video.height;
}
}
//each bool OR https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraints
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video-manager.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video-manager.js
index 491d5d0..af5b889 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video-manager.js
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video-manager.js
@@ -36,7 +36,7 @@ var VideoManager = (function() {
}
function _onReceive(msg) {
const uid = msg.stream.uid;
- $('#' + VideoUtil.getVid(uid)).remove();
+ _closeV($('#' + VideoUtil.getVid(uid)));
Video().init(msg);
OmUtil.log(uid + ' receiving video');
}
@@ -148,6 +148,9 @@ var VideoManager = (function() {
});
}
function _closeV(v) {
+ if (!v || v.length < 1) {
+ return;
+ }
if (v.dialog('instance') !== undefined) {
v.dialog('destroy');
}
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video.js
index f600b83..089306f 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video.js
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video.js
@@ -456,7 +456,16 @@ var Video = (function() {
}
}
function _refresh(_msg) {
- const msg = _msg || {iceServers: iceServers};
+ const msg = _msg || {
+ iceServers: iceServers
+ , instanceUid: v.length > 0 ? v.data('instance-uid') : undefined
+ };
+ if (sd.self) {
+ VideoManager.sendMessage({
+ id : 'broadcastRestarted'
+ , uid: sd.uid
+ });
+ }
_cleanup();
const hasAudio = VideoUtil.hasMic(sd)
, state = {
@@ -567,9 +576,10 @@ var Video = (function() {
function _reattachStream() {
states.forEach(state => {
if (state.video && state.video.length > 0) {
- const data = state.data;
- if (data.rtcPeer) {
- state.video[0].srcObject = sd.self ? data.rtcPeer.getLocalStream() : data.rtcPeer.getRemoteStream();
+ const data = state.data
+ , videoEl = state.video[0];
+ if (data.rtcPeer && (!videoEl.srcObject || !videoEl.srcObject.active)) {
+ videoEl.srcObject = sd.self ? data.rtcPeer.getLocalStream() : data.rtcPeer.getRemoteStream();
}
}
});