Skip to content

openvidu ICE 후보 관련 오류

simjaesung edited this page Dec 1, 2024 · 2 revisions

문제

현재 게임 시작을 누를 경우 해당 방에 있는 참가자의 카메라가 모두 켜지지않고 아래 오류들이 발생합니다.

오류

image
  • [ICE_CONNECTION_DISCONNECTED] Handling ICE_CONNECTION_DISCONNECTED event. Waiting for ICE to be restored and reconnect stream str_CAM_YJkr_con_HBtgeAZML5 (Publisher) if not possible

  • [ICE_CONNECTION_DISCONNECTED] ICE connection of stream str_CAM_YJkr_con_HBtgeAZML5 (Publisher) couldn't be restored after ICE_CONNECTION_DISCONNECTED event. Current ICE connection state after 4000 ms: disconnected

  • [ICE_CONNECTION_DISCONNECTED] Stream str_CAM_YJkr_con_HBtgeAZML5 (Publisher) failed to reconnect after ICE_CONNECTION_DISCONNECTED. Current ICE connection state: checking

    image

환경

운영체제, 브라우저, 의존성 목록 등

예)

  • MacOS Sequoia 15.0
  • Chrome
  • openvidu-server:2.30.0

설명

게임시작 버튼을 누르면 openvidu와 연동이 시작되고, 해당 방에 참가하고있는 사람들의 모습이 보여야합니다.

하지만 현재 게임 시작 버튼을 누르면 본인 카메라 모습만 보이고, 다른 사람들의 모습은 등장하고 있지 않는 상황입니다.

상단 오류들로 보아, 아무래도 ICE 후보를 잘 찾지 못하고있는 상황인 것 같습니다.


해결 과정

문제 해결 과정을 기록합니다.

1. docker-compose.yml 파일의 ICE 서버 구성

기존 docker-compose 파일에 stun/turn 서버에 대한 설정 옵션이 없었습니다.

이에대해 아래와 같이 docker-compose.yml 파일을 수정했습니다.

openvidu-server

openvidu-server:
    # 기존 설정 유지
    environment:
        - SERVER_SSL_ENABLED=false
        - SERVER_PORT=5443
        - KMS_URIS=["ws://kms:8888/kurento"]
        - COTURN_IP=${COTURN_IP:-auto-ipv4}
        - COTURN_PORT=${COTURN_PORT:-3478}
        
        # >> 추가한 부분
        # WebRTC ICE 설정
        - OPENVIDU_WEBRTC_ICE_SERVERS=[{"urls": ["stun:stun.l.google.com:19302"]}]  # STUN 서버 설정 (Google의 공개 STUN 서버 사용)
        - OPENVIDU_WEBRTC_ICE_TRANSPORT_POLICY=all   # ICE 프로토콜 정책 (all: 모든 후보 사용)
        
        # 비디오 스트림 설정
        - OPENVIDU_STREAMS_FORCED_VIDEO_CODEC=VP8    # 강제 비디오 코덱 설정 (VP8: 웹브라우저 호환성 좋음)
        - OPENVIDU_STREAMS_ALLOW_TRANSCODING=true    # 비디오 트랜스코딩 허용 (다른 코덱 간 변환 가능)

kms(Kurento Media Server)

kms:
    environment:
        # WebRTC 포트 범위 설정
        - KMS_MIN_PORT=40000          # WebRTC 연결에 사용할 최소 포트
        - KMS_MAX_PORT=57000          # WebRTC 연결에 사용할 최대 포트
        
        # STUN 서버 설정
        - KMS_STUN_IP=stun.l.google.com     # STUN 서버 주소
        - KMS_STUN_PORT=19302               # STUN 서버 포트
        
        # 디버깅 로그 설정
        - GST_DEBUG=Kurento*:4,kms*:4,sdp*:4,webrtc*:4,*rtpendpoint:4    # 각 모듈별 로그 레벨 설정
        # - Kurento*:4     : Kurento 전반적인 로그
        # - kms*:4         : Kurento Media Server 로그
        # - sdp*:4         : SDP 협상 관련 로그
        # - webrtc*:4      : WebRTC 연결 관련 로그
        # - *rtpendpoint:4 : RTP 스트리밍 관련 로그
        
        # Kurento 로그 관리 설정
        - KURENTO_LOG_FILE_SIZE=100              # 로그 파일 최대 크기 (MB)
        - KURENTO_LOGS_PATH=/opt/openvidu/kurento-logs  # 로그 저장 경로

coturn

coturn:
    command:
        # 기본 TURN 서버 설정
        - --log-file=stdout           # 로그 출력 위치
        - --listening-port=${COTURN_PORT:-3478}  # TURN 서버 리스닝 포트
        - --fingerprint              # 보안을 위한 fingerprint 사용
        - --min-port=${COTURN_MIN_PORT:-57001}  # TURN 릴레이에 사용할 최소 포트
        - --max-port=${COTURN_MAX_PORT:-65535}  # TURN 릴레이에 사용할 최대 포트
        - --realm=openvidu           # TURN 서버의 realm 설정
        - --verbose                  # 상세 로그 출력
        
        # 인증 설정
        - --use-auth-secret          # 인증 방식 설정
        - --static-auth-secret=$${COTURN_SHARED_SECRET_KEY}  # 인증 키
        
        # NAT 통과 및 최적화 설정
        - --external-ip=$$(detect-external-ip)   # 외부 IP 자동 감지
        - --allowed-peer-ip=auto                 # 허용할 peer IP 자동 설정
        - --no-multicast-peers                   # 멀티캐스트 비활성화 (성능 최적화)
        - --no-cli                               # CLI 인터페이스 비활성화 (보안)
#       - --no-tls                               # TLS 비활성화 (HTTP 사용 시)
#       - --no-dtls                              # DTLS 비활성화 (HTTP 사용 시)

이 설정들의 주요 목적은 아래와 같습니다.

  1. WebRTC 연결의 안정성 향상
  2. NAT/방화벽 통과 지원
  3. 비디오/오디오 스트리밍 최적화
  4. 문제 발생 시 디버깅 용이성 제공
  5. 보안 설정 강화

중요한 설정

  • OPENVIDU_WEBRTC_ICE_SERVERS: WebRTC 연결을 위한 STUN 서버 설정
  • KMS_STUN_IP, KMS_STUN_PORT: 미디어 서버의 STUN 설정
  • external-ip: TURN 서버의 외부 IP 자동 감지
  • GST_DEBUG: 문제 해결을 위한 상세 로그 설정

해결

image

conturn 서버와 관련된 - 3478/udp, 5349/tcp, 5349/udp 포트들을 열어주지 않아서 발생했던 문제였습니다.


MafiaCamp

📔소개
🎯프로젝트 규칙
💻프로젝트 기획
🍀기술 스택
📚그룹 회고
🌈개발 일지
🍀문제 해결 경험
🔧트러블 슈팅
Clone this wiki locally