From a154f555b3832bf8a0c6fa41d59b9bc47d97e2e2 Mon Sep 17 00:00:00 2001
From: Carlos Santos <4a.santos@gmail.com>
Date: Mon, 16 Oct 2023 10:56:30 +0200
Subject: [PATCH] openvidu-basic-java to Livekit
---
openvidu-basic-java/pom.xml | 11 ++-
.../io/openvidu/basic/java/Controller.java | 75 ++++++++-----------
.../src/main/resources/application.properties | 5 +-
3 files changed, 42 insertions(+), 49 deletions(-)
diff --git a/openvidu-basic-java/pom.xml b/openvidu-basic-java/pom.xml
index c6afb014..0501a77e 100644
--- a/openvidu-basic-java/pom.xml
+++ b/openvidu-basic-java/pom.xml
@@ -31,9 +31,14 @@
spring-boot-starter-web
- io.openvidu
- openvidu-java-client
- 2.27.0
+ io.livekit
+ livekit-server
+ 0.5.7
+
+
+ org.json
+ json
+ 20231013
org.springframework.boot
diff --git a/openvidu-basic-java/src/main/java/io/openvidu/basic/java/Controller.java b/openvidu-basic-java/src/main/java/io/openvidu/basic/java/Controller.java
index 2f04042a..8c03cd76 100644
--- a/openvidu-basic-java/src/main/java/io/openvidu/basic/java/Controller.java
+++ b/openvidu-basic-java/src/main/java/io/openvidu/basic/java/Controller.java
@@ -2,70 +2,57 @@ package io.openvidu.basic.java;
import java.util.Map;
-import javax.annotation.PostConstruct;
-
+import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.CrossOrigin;
-import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
-import io.openvidu.java.client.Connection;
-import io.openvidu.java.client.ConnectionProperties;
-import io.openvidu.java.client.OpenVidu;
-import io.openvidu.java.client.OpenViduHttpException;
-import io.openvidu.java.client.OpenViduJavaClientException;
-import io.openvidu.java.client.Session;
-import io.openvidu.java.client.SessionProperties;
+import io.livekit.server.*;
@CrossOrigin(origins = "*")
@RestController
public class Controller {
- @Value("${OPENVIDU_URL}")
- private String OPENVIDU_URL;
+ @Value("${LIVEKIT_URL}")
+ private String LIVEKIT_URL;
- @Value("${OPENVIDU_SECRET}")
- private String OPENVIDU_SECRET;
+ @Value("${LIVEKIT_API_KEY}")
+ private String LIVEKIT_API_KEY;
- private OpenVidu openvidu;
-
- @PostConstruct
- public void init() {
- this.openvidu = new OpenVidu(OPENVIDU_URL, OPENVIDU_SECRET);
- }
+ @Value("${LIVEKIT_API_SECRET}")
+ private String LIVEKIT_API_SECRET;
/**
- * @param params The Session properties
- * @return The Session ID
+ * @param params The JSON object with roomName and participantName
+ * @return The JWT token
*/
- @PostMapping("/api/sessions")
- public ResponseEntity initializeSession(@RequestBody(required = false) Map params)
- throws OpenViduJavaClientException, OpenViduHttpException {
- SessionProperties properties = SessionProperties.fromJson(params).build();
- Session session = openvidu.createSession(properties);
- return new ResponseEntity<>(session.getSessionId(), HttpStatus.OK);
- }
+ @PostMapping("/token")
+ public ResponseEntity getToken(@RequestBody(required = true) Map params) {
+ String roomName = params.get("roomName");
+ String participantName = params.get("participantName");
- /**
- * @param sessionId The Session in which to create the Connection
- * @param params The Connection properties
- * @return The Token associated to the Connection
- */
- @PostMapping("/api/sessions/{sessionId}/connections")
- public ResponseEntity createConnection(@PathVariable("sessionId") String sessionId,
- @RequestBody(required = false) Map params)
- throws OpenViduJavaClientException, OpenViduHttpException {
- Session session = openvidu.getActiveSession(sessionId);
- if (session == null) {
- return new ResponseEntity<>(HttpStatus.NOT_FOUND);
+ if(roomName == null || participantName == null) {
+ return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
}
- ConnectionProperties properties = ConnectionProperties.fromJson(params).build();
- Connection connection = session.createConnection(properties);
- return new ResponseEntity<>(connection.getToken(), HttpStatus.OK);
+
+ // By default, tokens expire 6 hours after generation.
+ // You may override this by using token.setTtl(long millis).
+ AccessToken token = new AccessToken(LIVEKIT_API_KEY, LIVEKIT_API_SECRET);
+ token.setName(participantName);
+ token.setIdentity(participantName);
+
+
+ JSONObject metadata = new JSONObject();
+ metadata.put("livekitUrl", LIVEKIT_URL);
+ // add metadata to the token, which will be available in the participant's metadata
+ token.setMetadata(metadata.toString());
+ token.addGrants(new RoomJoin(true), new RoomName(roomName));
+
+ return new ResponseEntity<>(token.toJwt(), HttpStatus.OK);
}
}
diff --git a/openvidu-basic-java/src/main/resources/application.properties b/openvidu-basic-java/src/main/resources/application.properties
index f0e091eb..b0619b41 100644
--- a/openvidu-basic-java/src/main/resources/application.properties
+++ b/openvidu-basic-java/src/main/resources/application.properties
@@ -1,5 +1,6 @@
server.port: 5000
server.ssl.enabled: false
-OPENVIDU_URL: http://localhost:4443/
-OPENVIDU_SECRET: MY_SECRET
\ No newline at end of file
+LIVEKIT_URL: ws://localhost:7880/
+LIVEKIT_API_KEY: http://localhost:4443/
+LIVEKIT_API_SECRET: MY_SECRET
\ No newline at end of file