diff --git a/application-server/java/README.md b/application-server/java/README.md
index b320817e..770521c9 100644
--- a/application-server/java/README.md
+++ b/application-server/java/README.md
@@ -1,12 +1,12 @@
-# Basic Java
+# OpenVidu Java
-Basic server application built for Java with Spring Boot. It internally uses [livekit-server-sdk-kotlin](https://github.com/livekit/server-sdk-kotlin).
+OpenVidu server application built for Java with Spring Boot. It internally uses [livekit-server-sdk-kotlin](https://github.com/livekit/server-sdk-kotlin).
For further information, check the [tutorial documentation](https://livekit-tutorials.openvidu.io/tutorials/application-server/java/).
## Prerequisites
-- [Java >=17](https://www.java.com/en/download/)
+- [Java >=21](https://www.java.com/en/download/)
- [Maven](https://maven.apache.org/download.cgi)
## Run
diff --git a/application-server/java/pom.xml b/application-server/java/pom.xml
index c67d6d41..2348a7fc 100644
--- a/application-server/java/pom.xml
+++ b/application-server/java/pom.xml
@@ -6,18 +6,18 @@
org.springframework.boot
spring-boot-starter-parent
- 3.3.4
+ 3.4.3
io.openvidu
- basic-java
+ openvidu-java
0.0.1-SNAPSHOT
basic-java
- Basic server application built for Java with Spring Boot
+ OpenVidu server application built for Java with Spring Boot
- 17
+ 21
@@ -28,7 +28,7 @@
io.livekit
livekit-server
- 0.8.2
+ 0.8.5
org.springframework.boot
diff --git a/application-server/java/src/main/java/io/openvidu/basic/java/BasicJavaApplication.java b/application-server/java/src/main/java/io/openvidu/java/OpenViduJavaApplication.java
similarity index 60%
rename from application-server/java/src/main/java/io/openvidu/basic/java/BasicJavaApplication.java
rename to application-server/java/src/main/java/io/openvidu/java/OpenViduJavaApplication.java
index eb29f11b..bf3e49f4 100644
--- a/application-server/java/src/main/java/io/openvidu/basic/java/BasicJavaApplication.java
+++ b/application-server/java/src/main/java/io/openvidu/java/OpenViduJavaApplication.java
@@ -1,13 +1,13 @@
-package io.openvidu.basic.java;
+package io.openvidu.java;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
-public class BasicJavaApplication {
+public class OpenViduJavaApplication {
public static void main(String[] args) {
- SpringApplication.run(BasicJavaApplication.class, args);
+ SpringApplication.run(OpenViduJavaApplication.class, args);
}
}
diff --git a/application-server/java/src/main/java/io/openvidu/java/controllers/EgressController.java b/application-server/java/src/main/java/io/openvidu/java/controllers/EgressController.java
new file mode 100644
index 00000000..68054186
--- /dev/null
+++ b/application-server/java/src/main/java/io/openvidu/java/controllers/EgressController.java
@@ -0,0 +1,397 @@
+package io.openvidu.java.controllers;
+
+import java.util.List;
+import java.util.Map;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.JsonMappingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.protobuf.InvalidProtocolBufferException;
+import com.google.protobuf.util.JsonFormat;
+
+import io.livekit.server.EgressServiceClient;
+import io.livekit.server.EncodedOutputs;
+import jakarta.annotation.PostConstruct;
+import livekit.LivekitEgress.DirectFileOutput;
+import livekit.LivekitEgress.EgressInfo;
+import livekit.LivekitEgress.EncodedFileOutput;
+import livekit.LivekitEgress.EncodedFileType;
+import livekit.LivekitEgress.StreamOutput;
+import livekit.LivekitEgress.StreamProtocol;
+
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestParam;
+
+@CrossOrigin(origins = "*")
+@RestController
+@RequestMapping("/egresses")
+public class EgressController {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(EgressController.class);
+
+ @Value("${livekit.url}")
+ private String LIVEKIT_URL;
+
+ @Value("${livekit.api.key}")
+ private String LIVEKIT_API_KEY;
+
+ @Value("${livekit.api.secret}")
+ private String LIVEKIT_API_SECRET;
+
+ private EgressServiceClient egressClient;
+
+ @PostConstruct
+ public void init() {
+ egressClient = EgressServiceClient.createClient(LIVEKIT_URL, LIVEKIT_API_KEY, LIVEKIT_API_SECRET);
+ }
+
+ /**
+ * Create a new RoomComposite egress
+ *
+ * @param params JSON object with roomName
+ * @return JSON object with the created egress
+ */
+ @PostMapping("/room-composite")
+ public ResponseEntity