Spring에서 WebRTC 구현 feat. OpenVidu (2)

Jongmyung Choi·2023년 9월 5일
1
post-custom-banner

이전글에 이어서 이번 게시물에선 OpenVidu에 대해 직접 실습하며 어떤식으로 동작하는지에 대해 알아보고자 한다.

실습하기

서버를 다 띄우고 localhost:8080에 접속하게 되면

다음과 같은 창이 뜬다.

JOIN 버튼을 누르면


localhost:5000/api/sessions 에 요청 바디에 { “customSessionId : “SessionA” } 를 담아 POST 요청을 한것을 알 수 있다.

그리고 바로 이어서

localhost:5000/api/sessions/SessionA/connections 에 POST 요청을 한다.

그리고 새로운 창으로 이동하는데 여기서 Join session을 누르면

이렇게 localhost:4443과 웹소켓 통신을 하게 되고

방에 접속하게된다.

여러개로 접속 했을때도 잘 연결된다.

실습 설명

POST localhost:5000/api/sessions

JOIN 버튼을 눌렀을때 localhost:5000/api/sessions 에 POST 요청을 하는데 localhost:5000은 우리의 스프링 서버이다.

/api/sessions로의 POST 요청에 대한 코드를 살펴보면

@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);
	}

SessionProperties.fromJson(params).build() 를 통해

요청 바디의 customSessionId를 가지고와서

builder를 만들고 return 해준다.

이후에 Session session = openvidu.createSession(properties) 를 통해 Session을 만들고 activeSessions에 추가한다.
activeSessions는 Map 이고 sessionId를 key값으로 가지고 있다.
(이걸통해 나중에 이 sessionId를 통해 방에 입장할 수 있다)

protected Map<String, Session> activeSessions = new ConcurrentHashMap();

POST localhost:5000/api/sessions/SessionA/connections

api/sessions 에 POST요청을 하고 곧바로 /api/sessions/{sessionId}/connections 에 POST요청을 보낸다.

@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);
		}
		ConnectionProperties properties = ConnectionProperties.fromJson(params).build();
		Connection connection = session.createConnection(properties);
		return new ResponseEntity<>(connection.getToken(), HttpStatus.OK);
	}

먼저 openvidu.getActiveSession(sessionId); 를 통해 만들어진 세션을 가지고 온다.

Connection connection = session.createConnection(properties);
이후에 connection을 생성해준다.

createConnection 메소드의 동작과정을 살펴보면
1. HttpClientResponseHandler 를 사용하여 익명 내부 클래스를 정의하고, 이 클래스는 OpenVidu서버(미디어서버) 로부터의 응답을 처리하고 연결 객체 Connection을 생성하여 반환한다.
2. HTTP POST 요청을 생성하고 OpenVidu 서버의 세션 엔드포인트로 요청을 보낸다.
다음과 같은 과정을 거치게 된다.

이렇게 해서 Connection이 만들어지게 되고 클라이언트에게 Connection의 토큰값을 반환해준다.

ws:localhost:4443/openvidu?sessionId~

반환 받은 토큰값을 가지고 미디어 서버와 웹 소켓 통신을 하게 된다.

참고

https://github.com/OpenVidu/openvidu-tutorials.git

profile
총명한 개발자
post-custom-banner

0개의 댓글