투케이2K

111. (Aws/Amazon) [Aws Kinesis Video Streams] Aws Kvs WebRTC 최대 시청 시간 및 세션 유지 시간 , Idle Timeout 정리 본문

Aws (Amazon)

111. (Aws/Amazon) [Aws Kinesis Video Streams] Aws Kvs WebRTC 최대 시청 시간 및 세션 유지 시간 , Idle Timeout 정리

투케이2K 2025. 9. 9. 20:23
728x90

[개발 환경 설정]

개발 환경 : Aws / Amazon Web Services

 

[설명 정리]

// --------------------------------------------------------------------------------------
[개발 및 환경]
// --------------------------------------------------------------------------------------

- 인프라 : Aws / Amazon Web Services


- 기술 구분 : Aws / Aws Kinesis Video Streams / WebRTC


- 사전) AWS KVS WebRTC 설명 : 

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

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

  >> WebRTC 주요 용어 : 

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

  >> WebRTC [ICE] 연결 형태 : 

    - Relayed Address : TURN 서버가 패킷 릴레이를 위해 할당하는 주소
    - Server Reflexive Address : NAT 가 매핑한 클라이언트의 공인망 (Public IP, Port)
    - Local Address : 클라이언트의 사설주소 (Private IP, Port)

  >> WebRTC STUN 및 TURN 서버 설명 : 

    - (같은 와이파이 망) STUN 서버는 HOST 를 거쳐 >> Server Reflexive Address 만을 응답하지만,
      (릴레이서버 사용) TURN 서버는 Relayed Address와 Server Reflexive Address 를 모두 응답한다
    - STUN, TURN 서버를 이용해 SDP Answer IP주소 를 취득 >> RTCPeerConnection Remote 연결 수행

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

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

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

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

// --------------------------------------------------------------------------------------






// --------------------------------------------------------------------------------------
[설 명]
// --------------------------------------------------------------------------------------

1. AWS Kvs WebRTC 하나의 신호 채널에는 하나의 마스터 (Master) 와 하나 이상의 뷰어 (Viewer) 만 연결할 수 있습니다

  >> 여러 개의 마스터를 하나의 신호 채널에 연결하는 것은 불가능합니다

  >> ConnectAsMaster : 한 채널당 1명만 연결 가능 (동시 마스터 연결 불가)

  >> ConnectAsViewer : 한 채널당 최대 10명까지 동시 시청 가능


2. 세션 유지 및 스트리밍 시간 제한 설명 : 

  >> 최대 연결 시간 (Connection Duration) : Master와 Viewer 모두 최대 1시간까지 연결 유지 가능

  >> Idle Timeout (유휴 연결 시간 제한) : 연결 후 아무 활동이 없을 경우 10분 후 자동 종료

  >> TURN 서버 Credential 유효 시간 : TURN 서버를 통한 릴레이 연결 시, 인증 정보는 5분간 유효

    - TURN 서버를 사용하는 경우, 비용이 추가될 수 있으며, 릴레이 연결 수는 채널당 최대 50개로 제한됩니다

  >> WebRTC 스트리밍 세션 제한 :

    - 스트리밍 세션 최대 지속 시간 : 1시간 (각 Viewer가 최대 1시간까지 스트리밍 시청 가능)
      : Viewer가 1시간이 지나면 세션이 자동 종료되며, 다시 연결을 시도해야 합니다
      : Viewer가 중간에 연결을 끊거나 유휴 상태가 되면 Idle Timeout (약 3~10분) 에 따라 더 빨리 세션이 종료될 수 있습니다

    - Idle Timeout : 3분 (스트리밍 중단 시 자동 종료)


3. WebRTC 최대 유휴 연결 시간 (Idle Timeout) 설명 : 최대 유휴 연결 시간	약 10분

  >> Idle Timeout 은 클라이언트 (Viewer 또는 Master) 가 아무런 signaling 활동이나 미디어 전송 없이 유휴 상태로 있을 경우, AWS가 자동으로 연결을 종료하는 시간입니다

  >> 유휴 상태가 지속되면 서비스가 연결을 종료하고 클라이언트를 오프라인으로 표시합니다

  >> 유휴 상태 기준	: signaling 메시지 없음, 미디어 전송 없음

  >> 자동 종료 메시지	: GO_AWAY, RECONNECT_ICE_SERVER


4. WebRTC 최대 유휴 연결 시간 (Idle Timeout) 방지 방법 : 

  >> 미디어 스트림 유지 (영상/음성 전송) : 

    - Viewer 가 Master 로 부터 실시간 영상 또는 음성 스트림을 계속 수신하고 있어야 합니다

    - 스트리밍이 중단되면 유휴 상태로 간주되어 Timeout이 발생할 수 있습니다

  >> Signaling 활동 유지 : 

    - WebRTC는 signaling channel을 통해 연결 상태를 관리합니다

    - Viewer 가 주기적으로 signaling 메시지(예: ICE candidate 교환, ping 등)를 보내면 유휴 상태로 간주되지 않습니다

  >> TURN 서버 사용 시 인증 갱신 : 

    - TURN 서버를 사용하는 경우, 인증 정보가 5분마다 만료되므로 Viewer는 재인증 또는 ICE 재협상을 통해 연결을 유지해야 합니다

  >> 클라이언트 측 Ping 또는 Keep-Alive 구현 : 

    - Viewer 클라이언트에서 WebSocket signaling channel에 ping 메시지를 주기적으로 전송하면 유휴 상태를 방지할 수 있습니다

    - 예 : 1~2분 간격으로 ping 메시지 전송

    - JavaScript 기반 뷰어 Ping 유지 코드

      const signalingSocket = new WebSocket(signalingChannelUrl);

      setInterval(() => {
        if (signalingSocket.readyState === WebSocket.OPEN) {
          signalingSocket.send(JSON.stringify({ action: "PING" }));
        }
      }, 60000); // 60초마다 ping 전송


5. TURN 서버 Credential 유효 시간 설명 : 기본적으로 약 300초 (5분)

  >> TURN 서버 인증 정보 (TURN credentials) 는 AWS 의 GetIceServerConfig API를 통해 발급되며, 이 정보에는 TTL (Time-To-Live) 값이 포함되어 있습니다

  >> Viewer 가 TURN 서버를 통해 연결되더라도 세션 자체는 최대 1시간까지 유지될 수 있습니다. 단, TURN 서버 인증 정보가 5분마다 만료되므로, 클라이언트는 인증 정보를 갱신하는 로직을 포함해야할 수 있습니다

    setInterval(() => {
      
      // 5분마다 TURN 인증 정보 재요청
      fetchNewTurnCredentials();
      
      // ICE Restart 수행
      peerConnection.restartIce();

    }, 300000); // 300,000ms = 5분

  >> Viewer 의 지속 시청 하기 위한 조건 : TURN Credential 이 만료되더라도 기존 연결은 유지됩니다

    - TURN 서버를 통해 연결된 이후, ICE 연결이 성공적으로 설정된 경우

    - 중간에 ICE 연결이 끊기지 않고 유지되는 경우

    - 미디어 스트림이 계속 흐르고, Viewer 가 유휴 상태가 아닌 경우

  >> 재협상 및 재연결이 필요한 경우 : WebRTC 연결 재설정 및 스트리밍 재시작

    - 네트워크 변화 (예 : Wi-Fi → LTE 전환) 등으로 ICE 연결이 끊긴 경우 (만료된 TURN Credential 로는 재연결이 불가능합니다)

    - ICE 연결은 네트워크 환경에 따라 달라지며, 네트워크 환경이 변경 되는 경우 기존 ICE 연결은 무효화되고 새로운 ICE 연결을 재협상(ICE Restart) 해야 합니다

      : IP 주소 변경 (Wi-Fi → LTE 전환 시 발생)
      : NAT 환경 변화
      : TURN 서버 연결이 끊김

  >> Viewer WebRTC 연결 재설정 및 스트리밍 재시작 방법 : 

    - signaling channel 을 통해 다시 연결 요청

    - 새로운 ICE candidate 교환

    - 필요 시 TURN credential 재요청

    - Viewer 는 Master 에게 다시 연결 요청을 보내고, Master 는 새로운 PeerConnection 을 생성해 스트림을 다시 전송

    - 즉, 네트워크 변경 감지 후 GetIceServerConfig → createOffer → setLocalDescription → signaling 전송 → setRemoteDescription 순으로 재연결을 수행합니다

// --------------------------------------------------------------------------------------






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

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

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


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

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


[Aws KVS WebRTC 채널 생성 및 삭제에 관한 요금 정책 정리]

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


[신호 API 서비스 할당량]

https://docs.aws.amazon.com/kinesisvideostreams-webrtc-dg/latest/devguide/kvswebrtc-limits.html

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