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 2023/10/09 06:24:55 UTC

[openmeetings] 23/27: [OPENMEETINGS-2756] audio/video is fixed; version is bumped

This is an automated email from the ASF dual-hosted git repository.

solomax pushed a commit to branch jakarta-spring-6
in repository https://gitbox.apache.org/repos/asf/openmeetings.git

commit 335d616486bf00eb30995c9f6a194f06edd8901f
Author: Maxim Solodovnik <so...@apache.org>
AuthorDate: Wed Sep 27 18:54:43 2023 +0700

    [OPENMEETINGS-2756] audio/video is fixed; version is bumped
---
 openmeetings-core/pom.xml                          |  2 +-
 openmeetings-db/pom.xml                            |  2 +-
 openmeetings-install/pom.xml                       |  2 +-
 openmeetings-mediaserver/pom.xml                   |  2 +-
 .../src/main/java/module-info.java                 |  1 +
 .../openmeetings/mediaserver/IStreamProcessor.java | 24 ------------
 .../org/apache/openmeetings/mediaserver/KRoom.java |  2 +-
 .../openmeetings/mediaserver/KurentoHandler.java   | 44 ++++++++++++++++------
 .../openmeetings/mediaserver/StreamProcessor.java  | 18 +++++----
 .../mediaserver/StreamProcessorActions.java        |  7 ++--
 .../mediaserver/TestStreamProcessor.java           | 11 +++---
 .../src/test/java/module-info.test                 |  1 +
 openmeetings-screenshare/pom.xml                   |  2 +-
 openmeetings-server/pom.xml                        |  2 +-
 openmeetings-service/pom.xml                       |  2 +-
 openmeetings-util/pom.xml                          |  2 +-
 openmeetings-web/pom.xml                           |  2 +-
 openmeetings-webservice/pom.xml                    |  2 +-
 pom.xml                                            |  4 +-
 19 files changed, 67 insertions(+), 65 deletions(-)

diff --git a/openmeetings-core/pom.xml b/openmeetings-core/pom.xml
index 7b3e47fa1..54a96621f 100644
--- a/openmeetings-core/pom.xml
+++ b/openmeetings-core/pom.xml
@@ -22,7 +22,7 @@
 	<parent>
 		<groupId>org.apache.openmeetings</groupId>
 		<artifactId>openmeetings-parent</artifactId>
-		<version>7.2.0-SNAPSHOT</version>
+		<version>8.0.0-SNAPSHOT</version>
 		<relativePath>..</relativePath>
 	</parent>
 	<artifactId>openmeetings-core</artifactId>
diff --git a/openmeetings-db/pom.xml b/openmeetings-db/pom.xml
index 416b02239..3ba12399c 100644
--- a/openmeetings-db/pom.xml
+++ b/openmeetings-db/pom.xml
@@ -22,7 +22,7 @@
 	<parent>
 		<groupId>org.apache.openmeetings</groupId>
 		<artifactId>openmeetings-parent</artifactId>
-		<version>7.2.0-SNAPSHOT</version>
+		<version>8.0.0-SNAPSHOT</version>
 		<relativePath>..</relativePath>
 	</parent>
 	<artifactId>openmeetings-db</artifactId>
diff --git a/openmeetings-install/pom.xml b/openmeetings-install/pom.xml
index f01dd5faa..3e37d0ed7 100644
--- a/openmeetings-install/pom.xml
+++ b/openmeetings-install/pom.xml
@@ -22,7 +22,7 @@
 	<parent>
 		<groupId>org.apache.openmeetings</groupId>
 		<artifactId>openmeetings-parent</artifactId>
-		<version>7.2.0-SNAPSHOT</version>
+		<version>8.0.0-SNAPSHOT</version>
 		<relativePath>..</relativePath>
 	</parent>
 	<artifactId>openmeetings-install</artifactId>
diff --git a/openmeetings-mediaserver/pom.xml b/openmeetings-mediaserver/pom.xml
index 017679e2f..a38173417 100644
--- a/openmeetings-mediaserver/pom.xml
+++ b/openmeetings-mediaserver/pom.xml
@@ -22,7 +22,7 @@
 	<parent>
 		<groupId>org.apache.openmeetings</groupId>
 		<artifactId>openmeetings-parent</artifactId>
-		<version>7.2.0-SNAPSHOT</version>
+		<version>8.0.0-SNAPSHOT</version>
 		<relativePath>..</relativePath>
 	</parent>
 	<artifactId>openmeetings-mediaserver</artifactId>
diff --git a/openmeetings-mediaserver/src/main/java/module-info.java b/openmeetings-mediaserver/src/main/java/module-info.java
index 42f766fac..45dee43fb 100644
--- a/openmeetings-mediaserver/src/main/java/module-info.java
+++ b/openmeetings-mediaserver/src/main/java/module-info.java
@@ -36,6 +36,7 @@ module org.apache.openmeetings.mediaserver {
 
 	requires spring.beans;
 	requires spring.context;
+	requires spring.core;
 
 	requires kurento.client;
 	requires kurento.jsonrpc.client;
diff --git a/openmeetings-mediaserver/src/main/java/org/apache/openmeetings/mediaserver/IStreamProcessor.java b/openmeetings-mediaserver/src/main/java/org/apache/openmeetings/mediaserver/IStreamProcessor.java
deleted file mode 100644
index 6d6e65f96..000000000
--- a/openmeetings-mediaserver/src/main/java/org/apache/openmeetings/mediaserver/IStreamProcessor.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.mediaserver;
-
-public interface IStreamProcessor {
-	void release(AbstractStream stream, boolean releaseStream);
-	void destroy();
-}
diff --git a/openmeetings-mediaserver/src/main/java/org/apache/openmeetings/mediaserver/KRoom.java b/openmeetings-mediaserver/src/main/java/org/apache/openmeetings/mediaserver/KRoom.java
index abffc893a..e7edc4771 100644
--- a/openmeetings-mediaserver/src/main/java/org/apache/openmeetings/mediaserver/KRoom.java
+++ b/openmeetings-mediaserver/src/main/java/org/apache/openmeetings/mediaserver/KRoom.java
@@ -76,7 +76,7 @@ public class KRoom {
 	private JSONObject recordingUser = new JSONObject();
 	private JSONObject sharingUser = new JSONObject();
 
-	public KRoom(Room r) {
+	KRoom(Room r) {
 		this.room = r;
 		Injector.get().inject(this);
 		log.info("ROOM {} has been created", room.getId());
diff --git a/openmeetings-mediaserver/src/main/java/org/apache/openmeetings/mediaserver/KurentoHandler.java b/openmeetings-mediaserver/src/main/java/org/apache/openmeetings/mediaserver/KurentoHandler.java
index 957d33abe..d3989f7fe 100644
--- a/openmeetings-mediaserver/src/main/java/org/apache/openmeetings/mediaserver/KurentoHandler.java
+++ b/openmeetings-mediaserver/src/main/java/org/apache/openmeetings/mediaserver/KurentoHandler.java
@@ -57,6 +57,7 @@ import org.kurento.client.Continuation;
 import org.kurento.client.Endpoint;
 import org.kurento.client.EventListener;
 import org.kurento.client.KurentoClient;
+import org.kurento.client.ListenerSubscription;
 import org.kurento.client.MediaObject;
 import org.kurento.client.MediaPipeline;
 import org.kurento.client.ObjectCreatedEvent;
@@ -69,16 +70,17 @@ import org.kurento.client.WebRtcEndpoint;
 import org.kurento.jsonrpc.client.JsonRpcClientNettyWebSocket;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-
 import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Component;
 
 import com.github.openjson.JSONArray;
 import com.github.openjson.JSONObject;
 
 import jakarta.inject.Inject;
+import jakarta.inject.Named;
+import jakarta.inject.Singleton;
 
-@Component
+@Singleton
+@Named
 public class KurentoHandler {
 	private static final Logger log = LoggerFactory.getLogger(KurentoHandler.class);
 	public static final String PARAM_ICE = "iceServers";
@@ -115,6 +117,8 @@ public class KurentoHandler {
 	private String kuid;
 	private CertificateKeyType certificateType;
 	private KurentoClient client;
+	private ListenerSubscription objectCreatedListener;
+	private ListenerSubscription objectDestroyedListener;
 	private final AtomicBoolean connected = new AtomicBoolean(false);
 	private final Map<Long, KRoom> rooms = new ConcurrentHashMap<>();
 	private final Set<String> ignoredKuids = new HashSet<>();
@@ -138,6 +142,7 @@ public class KurentoHandler {
 
 	@PostConstruct
 	public void init() {
+		log.trace("KurentoHandler::PostConstruct");
 		Runnable check = () -> {
 			try {
 				if (client != null) {
@@ -178,8 +183,8 @@ public class KurentoHandler {
 							notifyRooms(true);
 						}
 					});
-				client.getServerManager().addObjectCreatedListener(new KWatchDogCreate());
-				client.getServerManager().addObjectDestroyedListener(event ->
+				objectCreatedListener = client.getServerManager().addObjectCreatedListener(new KWatchDogCreate());
+				objectDestroyedListener = client.getServerManager().addObjectDestroyedListener(event ->
 					log.debug("Kurento::ObjectDestroyedEvent objectId {}, tags {}, source {}", event.getObjectId(), event.getTags(), event.getSource())
 				);
 			} catch (Exception e) {
@@ -204,6 +209,14 @@ public class KurentoHandler {
 				client = null;
 				if (!copy.isClosed()) {
 					log.debug("Client will be destroyed ...");
+					if (objectCreatedListener != null) {
+						copy.getServerManager().removeObjectCreatedListener(objectCreatedListener);
+						objectCreatedListener = null;
+					}
+					if (objectDestroyedListener != null) {
+						copy.getServerManager().removeObjectDestroyedListener(objectDestroyedListener);
+						objectDestroyedListener = null;
+					}
 					copy.destroy();
 					log.debug(".... Client is destroyed");
 				}
@@ -304,7 +317,8 @@ public class KurentoHandler {
 		return rooms.computeIfAbsent(roomId, k -> {
 			log.debug("Room {} does not exist. Will create now!", roomId);
 			Room r = roomDao.get(roomId);
-			return new KRoom(r);
+			KRoom kRoom = new KRoom(r);
+			return kRoom;
 		});
 	}
 
@@ -382,7 +396,7 @@ public class KurentoHandler {
 		this.certificateType = CertificateKeyType.valueOf(certificateType);
 	}
 
-	public CertificateKeyType getCertificateType() {
+	CertificateKeyType getCertificateType() {
 		return certificateType;
 	}
 
@@ -412,6 +426,7 @@ public class KurentoHandler {
 		private void checkPipeline(String roomOid) {
 			scheduler.schedule(() -> {
 				if (client == null) {
+					log.trace("KWatchDog::checkPipeline Client is NULL");
 					return;
 				}
 				// still alive
@@ -420,17 +435,24 @@ public class KurentoHandler {
 				try {
 					final String inKuid = tags.get(TAG_KUID);
 					if (inKuid != null && ignoredKuids.contains(inKuid)) {
+						log.trace("KWatchDog::checkPipeline KUID in ignore list");
 						return;
 					}
 					if (validTestPipeline(tags)) {
+						log.trace("KWatchDog::checkPipeline test pipeline detected");
 						return;
 					}
 					if (kuid.equals(inKuid)) {
-						KStream stream = streamProcessor.getByUid(tags.get(TAG_STREAM_UID));
+						String streamUId = tags.get(TAG_STREAM_UID);
+						log.trace("KWatchDog::checkPipeline kuid matched, streamId: {}", streamUId);
+						KStream stream = streamProcessor.getByUid(streamUId);
 						if (stream != null) {
-							if (stream.getRoomId().equals(Long.valueOf(tags.get(TAG_ROOM)))
-									&& stream.getPipeline().getId().equals(pipe.getId()))
-							{
+							Long sRoomId = stream.getRoomId();
+							Long tRoomId = Long.valueOf(tags.get(TAG_ROOM));
+							String pipeId = stream.getPipeline().getId();
+							log.trace("KWatchDog::checkPipeline stream found! Room match ? {}, Pipe match ? {}"
+									, sRoomId.equals(tRoomId), pipeId.equals(pipe.getId()));
+							if (sRoomId.equals(tRoomId) && pipeId.equals(pipe.getId())) {
 								return;
 							} else {
 								stream.release();
diff --git a/openmeetings-mediaserver/src/main/java/org/apache/openmeetings/mediaserver/StreamProcessor.java b/openmeetings-mediaserver/src/main/java/org/apache/openmeetings/mediaserver/StreamProcessor.java
index e5116d70c..ee09c7545 100644
--- a/openmeetings-mediaserver/src/main/java/org/apache/openmeetings/mediaserver/StreamProcessor.java
+++ b/openmeetings-mediaserver/src/main/java/org/apache/openmeetings/mediaserver/StreamProcessor.java
@@ -35,11 +35,11 @@ import org.apache.openmeetings.core.converter.RecordingConverter;
 import org.apache.openmeetings.core.util.WebSocketHelper;
 import org.apache.openmeetings.db.dao.record.RecordingDao;
 import org.apache.openmeetings.db.entity.basic.Client;
-import org.apache.openmeetings.db.entity.basic.ScreenStreamDesc;
 import org.apache.openmeetings.db.entity.basic.Client.Activity;
+import org.apache.openmeetings.db.entity.basic.Client.StreamType;
+import org.apache.openmeetings.db.entity.basic.ScreenStreamDesc;
 import org.apache.openmeetings.db.entity.basic.StreamDesc;
 import org.apache.openmeetings.db.entity.basic.WebcamStreamDesc;
-import org.apache.openmeetings.db.entity.basic.Client.StreamType;
 import org.apache.openmeetings.db.entity.record.Recording;
 import org.apache.openmeetings.db.entity.room.Room;
 import org.apache.openmeetings.db.entity.room.Room.Right;
@@ -52,17 +52,19 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import org.springframework.core.task.TaskExecutor;
-import org.springframework.stereotype.Component;
 
 import com.github.openjson.JSONObject;
 
 import jakarta.inject.Inject;
+import jakarta.inject.Named;
+import jakarta.inject.Singleton;
 
-@Component
-public class StreamProcessor implements IStreamProcessor {
+@Singleton
+@Named
+public class StreamProcessor {
 	private static final Logger log = LoggerFactory.getLogger(StreamProcessor.class);
 	/**
-	 * Holds a reference to the current streams available on the server instance
+	 * Holds references to the current streams available on the server instance
 	 */
 	private final Map<String, KStream> streamByUid = new ConcurrentHashMap<>();
 
@@ -465,7 +467,6 @@ public class StreamProcessor implements IStreamProcessor {
 		return recDao;
 	}
 
-	@Override
 	public void release(AbstractStream stream, boolean releaseStream) {
 		final String uid = stream.getUid();
 		if (releaseStream) {
@@ -480,11 +481,12 @@ public class StreamProcessor implements IStreamProcessor {
 				WebSocketHelper.sendRoom(new TextRoomMessage(c.getRoomId(), c, RoomMessage.Type.RIGHT_UPDATED, c.getUid()));
 			}
 		}
+		log.trace("StreamProcessor::release uid: {}", uid);
 		streamByUid.remove(uid);
 	}
 
-	@Override
 	public void destroy() {
+		log.trace("StreamProcessor::destroy !!!!");
 		for (Map.Entry<String, KStream> e : streamByUid.entrySet()) {
 			release(e.getValue(), true);
 		}
diff --git a/openmeetings-mediaserver/src/main/java/org/apache/openmeetings/mediaserver/StreamProcessorActions.java b/openmeetings-mediaserver/src/main/java/org/apache/openmeetings/mediaserver/StreamProcessorActions.java
index ea8f7d63e..d74da8d40 100644
--- a/openmeetings-mediaserver/src/main/java/org/apache/openmeetings/mediaserver/StreamProcessorActions.java
+++ b/openmeetings-mediaserver/src/main/java/org/apache/openmeetings/mediaserver/StreamProcessorActions.java
@@ -35,13 +35,14 @@ import org.kurento.client.internal.server.KurentoServerException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import org.springframework.stereotype.Component;
-
 import com.github.openjson.JSONObject;
 
 import jakarta.inject.Inject;
+import jakarta.inject.Named;
+import jakarta.inject.Singleton;
 
-@Component
+@Singleton
+@Named
 public class StreamProcessorActions {
 	private static final Logger log = LoggerFactory.getLogger(StreamProcessorActions.class);
 
diff --git a/openmeetings-mediaserver/src/main/java/org/apache/openmeetings/mediaserver/TestStreamProcessor.java b/openmeetings-mediaserver/src/main/java/org/apache/openmeetings/mediaserver/TestStreamProcessor.java
index a7309d122..42ce6fd1e 100644
--- a/openmeetings-mediaserver/src/main/java/org/apache/openmeetings/mediaserver/TestStreamProcessor.java
+++ b/openmeetings-mediaserver/src/main/java/org/apache/openmeetings/mediaserver/TestStreamProcessor.java
@@ -32,14 +32,15 @@ import org.apache.openmeetings.core.util.WebSocketHelper;
 import org.apache.openmeetings.db.entity.basic.IWsClient;
 import org.kurento.client.IceCandidate;
 
-import org.springframework.stereotype.Component;
-
 import com.github.openjson.JSONObject;
 
 import jakarta.inject.Inject;
+import jakarta.inject.Named;
+import jakarta.inject.Singleton;
 
-@Component
-class TestStreamProcessor implements IStreamProcessor {
+@Singleton
+@Named
+class TestStreamProcessor {
 	private final Map<String, KTestStream> streamByUid = new ConcurrentHashMap<>();
 
 	@Inject
@@ -101,12 +102,10 @@ class TestStreamProcessor implements IStreamProcessor {
 		}
 	}
 
-	@Override
 	public void release(AbstractStream stream, boolean releaseStream) {
 		streamByUid.remove(stream.getUid());
 	}
 
-	@Override
 	public void destroy() {
 		for (Entry<String, KTestStream> e : streamByUid.entrySet()) {
 			e.getValue().release();
diff --git a/openmeetings-mediaserver/src/test/java/module-info.test b/openmeetings-mediaserver/src/test/java/module-info.test
index deaf32995..5f839623c 100644
--- a/openmeetings-mediaserver/src/test/java/module-info.test
+++ b/openmeetings-mediaserver/src/test/java/module-info.test
@@ -37,6 +37,7 @@ module org.apache.openmeetings.mediaserver {
 
 	requires spring.beans;
 	requires spring.context;
+	requires spring.core;
 
 	requires kurento.client;
 	requires kurento.jsonrpc.client;
diff --git a/openmeetings-screenshare/pom.xml b/openmeetings-screenshare/pom.xml
index c7c819935..05b9e9035 100644
--- a/openmeetings-screenshare/pom.xml
+++ b/openmeetings-screenshare/pom.xml
@@ -22,7 +22,7 @@
 	<parent>
 		<groupId>org.apache.openmeetings</groupId>
 		<artifactId>openmeetings-parent</artifactId>
-		<version>7.2.0-SNAPSHOT</version>
+		<version>8.0.0-SNAPSHOT</version>
 		<relativePath>..</relativePath>
 	</parent>
 	<artifactId>openmeetings-screenshare</artifactId>
diff --git a/openmeetings-server/pom.xml b/openmeetings-server/pom.xml
index e51a40415..696978a04 100644
--- a/openmeetings-server/pom.xml
+++ b/openmeetings-server/pom.xml
@@ -22,7 +22,7 @@
 	<parent>
 		<groupId>org.apache.openmeetings</groupId>
 		<artifactId>openmeetings-parent</artifactId>
-		<version>7.2.0-SNAPSHOT</version>
+		<version>8.0.0-SNAPSHOT</version>
 		<relativePath>..</relativePath>
 	</parent>
 	<artifactId>openmeetings-server</artifactId>
diff --git a/openmeetings-service/pom.xml b/openmeetings-service/pom.xml
index 9d7bece7a..d3524fab7 100644
--- a/openmeetings-service/pom.xml
+++ b/openmeetings-service/pom.xml
@@ -22,7 +22,7 @@
 	<parent>
 		<groupId>org.apache.openmeetings</groupId>
 		<artifactId>openmeetings-parent</artifactId>
-		<version>7.2.0-SNAPSHOT</version>
+		<version>8.0.0-SNAPSHOT</version>
 		<relativePath>..</relativePath>
 	</parent>
 	<artifactId>openmeetings-service</artifactId>
diff --git a/openmeetings-util/pom.xml b/openmeetings-util/pom.xml
index 9989d3894..b4388d9a5 100644
--- a/openmeetings-util/pom.xml
+++ b/openmeetings-util/pom.xml
@@ -22,7 +22,7 @@
 	<parent>
 		<groupId>org.apache.openmeetings</groupId>
 		<artifactId>openmeetings-parent</artifactId>
-		<version>7.2.0-SNAPSHOT</version>
+		<version>8.0.0-SNAPSHOT</version>
 		<relativePath>..</relativePath>
 	</parent>
 	<artifactId>openmeetings-util</artifactId>
diff --git a/openmeetings-web/pom.xml b/openmeetings-web/pom.xml
index ee8ad5190..dda3a619f 100644
--- a/openmeetings-web/pom.xml
+++ b/openmeetings-web/pom.xml
@@ -22,7 +22,7 @@
 	<parent>
 		<groupId>org.apache.openmeetings</groupId>
 		<artifactId>openmeetings-parent</artifactId>
-		<version>7.2.0-SNAPSHOT</version>
+		<version>8.0.0-SNAPSHOT</version>
 		<relativePath>..</relativePath>
 	</parent>
 	<artifactId>openmeetings-web</artifactId>
diff --git a/openmeetings-webservice/pom.xml b/openmeetings-webservice/pom.xml
index d1758e1e7..acb255775 100644
--- a/openmeetings-webservice/pom.xml
+++ b/openmeetings-webservice/pom.xml
@@ -22,7 +22,7 @@
 	<parent>
 		<groupId>org.apache.openmeetings</groupId>
 		<artifactId>openmeetings-parent</artifactId>
-		<version>7.2.0-SNAPSHOT</version>
+		<version>8.0.0-SNAPSHOT</version>
 		<relativePath>..</relativePath>
 	</parent>
 	<artifactId>openmeetings-webservice</artifactId>
diff --git a/pom.xml b/pom.xml
index 7d7c2e20f..1cff9f406 100644
--- a/pom.xml
+++ b/pom.xml
@@ -26,13 +26,13 @@
 	</parent>
 	<groupId>org.apache.openmeetings</groupId>
 	<artifactId>openmeetings-parent</artifactId>
-	<version>7.2.0-SNAPSHOT</version>
+	<version>8.0.0-SNAPSHOT</version>
 	<packaging>pom</packaging>
 	<name>Openmeetings</name>
 	<description>Parent project for all OpenMeetings Maven modules. Required to hold general settings</description>
 	<properties>
 		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-		<project.build.outputTimestamp>2023-05-10T02:44:22Z</project.build.outputTimestamp>
+		<project.build.outputTimestamp>2023-09-27T11:15:33Z</project.build.outputTimestamp>
 		<wicket.configuration>DEPLOYMENT</wicket.configuration>
 		<om.quick.build>false</om.quick.build>
 		<om.notquick.build>true</om.notquick.build>