openvidu-basic-java to Livekit

This commit is contained in:
Carlos Santos 2023-10-16 10:56:30 +02:00
parent dc1edc5b5b
commit a154f555b3
3 changed files with 42 additions and 49 deletions

View File

@ -31,9 +31,14 @@
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>io.openvidu</groupId>
<artifactId>openvidu-java-client</artifactId>
<version>2.27.0</version>
<groupId>io.livekit</groupId>
<artifactId>livekit-server</artifactId>
<version>0.5.7</version>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20231013</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>

View File

@ -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<String> initializeSession(@RequestBody(required = false) Map<String, Object> 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<String> getToken(@RequestBody(required = true) Map<String, String> 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<String> createConnection(@PathVariable("sessionId") String sessionId,
@RequestBody(required = false) Map<String, Object> 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);
}
}

View File

@ -1,5 +1,6 @@
server.port: 5000
server.ssl.enabled: false
OPENVIDU_URL: http://localhost:4443/
OPENVIDU_SECRET: MY_SECRET
LIVEKIT_URL: ws://localhost:7880/
LIVEKIT_API_KEY: http://localhost:4443/
LIVEKIT_API_SECRET: MY_SECRET