투케이2K

198. (TWOK/WORK) [업무 이슈] AWS WebRTC 마스터 GetIceServerConfig ICE 서버 사용 유효 기간 만료 TURN 릴레이 서버 연결 불가능 이슈 본문

투케이2K 업무정리

198. (TWOK/WORK) [업무 이슈] AWS WebRTC 마스터 GetIceServerConfig ICE 서버 사용 유효 기간 만료 TURN 릴레이 서버 연결 불가능 이슈

투케이2K 2026. 1. 13. 21:40
728x90

[제 목]

타이틀 : 투케이 / 2k / 업무 정리

제목 : [업무 이슈] AWS WebRTC 마스터 GetIceServerConfig ICE 서버 사용 유효 기간 만료 TURN 릴레이 서버 연결 불가능 이슈

 

[내 용]

------------------------------------------------------------------------------
[개발 및 테스트 환경]
------------------------------------------------------------------------------

- 제 목 : [업무 이슈] AWS WebRTC 마스터 GetIceServerConfig ICE 서버 사용 유효 기간 만료 TURN 릴레이 서버 연결 불가능 이슈


- 테스트 환경 : Web / Chrome / JavaScript / Aws / WebRTC


- 사전) WebRTC 설명 : 

  >> WebRTC 란 웹, 애플리케이션, 디바이스 간 중간자 없이 오디오나 영상 미디어를 포착하고 실시간 스트림할 뿐 아니라, 임의의 데이터도 교환할 수 있도록 하는 기술입니다

  >> WebRTC 는 간단한 API 를 통해 웹 브라우저, 모바일 애플리케이션 및 커넥티드 디바이스 간에 실시간 통신을 활성화할 수 있습니다

  >> WebRTC 주요 용어 : 

    - SDP (Session Description Protocol) : 오디오/비디오 코덱, 해상도, 포트 등 스트리밍 정보를 담은 텍스트 포맷
    - Offer / Answer : 통신 연결을 협상하기 위한 SDP 메시지 (초기 연결 설정)
    - ICE (Interactive Connectivity Establishment) : NAT/P2P 환경에서도 연결 가능한 경로(IP, 포트 등)를 찾기 위한 기술
    - Candidate : 가능한 연결 경로 (IP + Port 조합)

  >> WebRTC SDP 오퍼 생성 (뷰어) 및 응답 (마스터) 스트리밍 플로우 : 

    [Viewer → Signaling Server] -- SDP Offer --> [Master] : 뷰어는 마스터로 스트리밍 오퍼 신호 보낸다
    [Master] -- SDP Answer --> [Viewer] : 마스터는 특정 뷰어의 오퍼 신호 확인 후 응답을 보낸다

    [Viewer] -- ICE Candidate --> [Master] : 스트리밍을 할 수 있는 경로 확인
    [Master] -- ICE Candidate --> [Viewer] : 스트리밍을 할 수 있는 경로 확인

    P2P 연결 성립 → 스트리밍 시작

------------------------------------------------------------------------------





------------------------------------------------------------------------------
[이슈 사항]
------------------------------------------------------------------------------

1. 자바스크립트에서 마스터 역할 AWS WebRTC 스트리밍 재생에 필요한 GetIceServerConfig ICE 서버 리스트 확인 후 반복 재사용 관련으로

   ICE 서버 주소 유효 기간 만료 및 TURN 릴레이 서버 연결 불가능 이슈


2. ✅ ICE 서버 정보는 임시 자격 증명을 기반으로 하며, 유효 기간은 일반적으로 300초 (5분) 입니다.

  >> 이 값은 AWS 에서 기본적으로 설정한 TTL(Time To Live) 로, 보안 강화를 위해 짧게 유지됩니다


3. ✅ ICE 서버 정보 유효 기간 만료 시 이슈 발생 증상 정리 : 

  >> SDP Answer 자체는 생성 가능 (시그널링은 별개)

  >> 하지만 실제 미디어 스트림 전송은 실패할 가능성이 크다

  >> STUN만으로 연결 가능한 경우는 제한적이므로, ICE 서버 정보 유효 기간 만료 시 대부분의 환경에서 문제가 발생

------------------------------------------------------------------------------





------------------------------------------------------------------------------
[원인 파악 및 증상 재현]
------------------------------------------------------------------------------

1. 자바스크립트에서 마스터 역할 AWS WebRTC SDK 초기화 수행

  >> SDK 초기화는 AWS IAM 계정을 사용해 초기화 수행


2. 자바스크립트에서 SDP 메시지 교환을 위한 SignalingChannelEndpoint 확인 수행


3. 자바스크립트에서 채널 ARN 정보를 사용해 getIceServerConfig ICE 서버 주소 리스트 확인


4. 자바스크립트에서 signalingClient open 및 뷰어 접속 요청 sdpOffer 이벤트 감지 수행


5. 자바스크립트에서 뷰어 접속 요청이 sdpOffer 로 들어온 경우 RTCPeerConnection 생성 및 sendSdpAnswer 응답 반환, 스트림 전송 수행


6. 뷰어에서 정상적으로 영상이 재생 중인 상태 확인


7. 일정 시간 [A] 뷰어가 연결 된 상태로 지속 시청 후 (ex : 5분 ~ 7분 사이) 또 다른 [B] 뷰어가 접속 시도 수행


8. ❌ [B] 뷰어는 SDP Answer 응답까지는 받았지만, 실시간 스트림 데이터가 들어오지 않는 것 확인

------------------------------------------------------------------------------






------------------------------------------------------------------------------
[조치 내용]
------------------------------------------------------------------------------

1. 마스터 입장에서 ICE 서버 주소 주기적으로 갱신하는 로직 추가 적용

  >> GetIceServerConfig 로 받은 ICE 서버 정보는 5분 정도만 유효하므로, 마스터는 4~5분 마다 ICE 서버를 갱신하고 필요 시 재협상하는 로직 추가 구현

  >> ✅ ICE 서버 자격 증명의 TTL(기본 300초) 는 AWS 에서 고정된 정책으로, 사용자가 직접 연장할 방법이 없으므로 주기적 갱신 처리 로직 필요


2. ✅ ICE 서버 주고 생신 주요 로직 정리 : 

  >> GetIceServerConfig 로 받은 iceServers는 약 5분(TTL) 유효 → 4~5분 주기로 갱신

  >> ICE 서버 주소를 갱신 하더라도, 기존 연결은 계속 유지되지만, 재협상/ICE 재시작 시에는 최신 iceServers 적용 필요

    - 일부 브라우저는 pc.setConfiguration({iceServers})로 런타임 변경을 지원하지만, 보다 확실한 방법은 createOffer({iceRestart:true}) 로 ICE 재시작

------------------------------------------------------------------------------





------------------------------------------------------------------------------
[참고 사이트]
------------------------------------------------------------------------------

[Web/JavaScript] AWS Kvs WebRtc 마스터 비디오 스트림 다중 뷰어 영상 송출

https://kkh0977.tistory.com/8058

https://blog.naver.com/kkh0977/223899701921


[업무 이슈] AWS WebRTC 뷰어에서 동일한 clientId 사용해 스트리밍 시청 시 AWS 세션 초기화 이슈로 60 초내외 재사용 필요 이슈

https://kkh0977.tistory.com/8442

https://blog.naver.com/kkh0977/224094606649


[Aws Kvs WebRTC 실시간 영상 재생 관련 구성 요소 및 용어 정리]

https://blog.naver.com/kkh0977/223858189791


[Aws Kinesis Video Streams] WebRTC remote sender clientId 클라이언트 아이디 설명, 규격 및 제한 정리

https://kkh0977.tistory.com/8415

https://blog.naver.com/kkh0977/224083731976


[Aws Kinesis Video Streams] WebRTC SDP 협상 과정 프로세스 정리 정리

https://blog.naver.com/kkh0977/224030054470


[자바스크립트 AWS WebRTC 실시간 동영상 재생 수행]

https://blog.naver.com/kkh0977/223170500993?trackingCode=blog_bloghome_searchlist


[업무 이슈] AWS WebRTC 실시간 비디오 재생 시 Client 클라이언트 연결 접속 및 해제 상태 확인 이슈

https://blog.naver.com/kkh0977/223966952222

------------------------------------------------------------------------------
 
728x90
반응형
Comments