Devlog

ICE_GATHER_CANDIDATES_ERROR 본문

기타

ICE_GATHER_CANDIDATES_ERROR

ehdrb92 2023. 8. 11. 11:06

Kurento 미디어 서버를 사용하여 그룹 화상 채팅을 테스트하는 중 아래와 같은 에러가 발생했다.

특정 채팅 방에 참여한 참여자가 5명을 초과할 때마다 계속해서 에러가 발생했다. 이외에도 서버를 이용하는 둘 이상의 방이 있을 때도 특정한 기준 없이 여러 명이 참여하는 순간에 계속해서 에러가 발생했다.

 

원인은 내가 미디어 서버를 열었을 때 지정한 RTP 포트의 범위가 문제였다. 도커 컨테이너를 통해 미디어 서버를 사용했는데, Kurento 설치 가이드가 제시해 준 대로 컨테이너를 생성하여 사용하였다.

// 설치 가이드가 제시한 방법

docker run --rm \
    -p 8888:8888/tcp \
    -p 5000-5050:5000-5050/udp \
    -e KMS_MIN_PORT=5000 \
    -e KMS_MAX_PORT=5050 \
    kurento/kurento-media-server:7.0.0

위의 명령줄을 확인하면 KMS_MIN_PORT와 KMS_MAX_PORT를 설정해준다. 여기서는 5000 - 5050 포트를 사용해 주는 것으로 되어있다. 그러면 가용한 포트가 총 50개가 있다는 말이 된다.

https://doc-kurento.readthedocs.io/en/latest/user/configuration.html#rtp-ports

 

Configuration — Kurento 7.0-dev documentation

» Configuration Edit on GitHub <!-- "admonition" is the class of Warning messages with the current RTD theme. Obtained by directly checking the HTML sources of an already existing block. --> Warning Kurento is a low-level platform to create WebRTC applica

doc-kurento.readthedocs.io

여기서 화상 채팅을 할 때 참여자가 5명이라면 각 참여자 마다 오디오, 비디오 스트림을 전송할 포트들이 필요한데 WebRTC의 경우 기본적으로 RTCP Multiplexing (rtcp-mux)을 사용한다고 한다.

 

RTCP Multiplexing(rtcp-mux) RTP (Real-time Transport Protocol) RTCP (Real-time Transport Control Protocol) 트래픽을 동일한 포트와 전송 경로를 사용하여 전송하는 기술이다. 일반적으로 RTP RTCP 서로 다른 포트(일반적으로 RTP 짝수 포트, RTCP 다음 홀수 포트) 사용하여 전송한다. 그러나 rtcp-mux 사용하면, 같은 포트를 사용하여 전송할  있는 것이다. 그러면 결국 각 참여자마다 오디오, 미디어 2개의 포트가 필요하다는 것이고, 5명이면 총 10개의 포트를 사용하게 된다.

처음에 설정해 준 50개의 포트에 비하면 아직 가용한 포트가 많이 남아있는데, 왜 문제가 생겼을까?

 

이론적으로는 문제가 없지만 실제 환경에서는 다양한 변수가 존재한다고 한다. 아래는 ChatGPT의 관련 답변이다.

포트 설정관련 CharGPT 답변

다양한 원인이 있는 것으로 보인다. 이 이상은 너무 깊은 내용으로 갈 것 같아 이 정도까지만 알아 두는 것으로 하였다.

 

만약 Kurento 사용 중 같은 ICE_GATHER_CANDIDATES_ERROR 에러를 마주한다면 포트 범위를 고려해 보도록 하자.