투케이2K

173. (Aws/Amazon) [Aws Kinesis Video Streams] WebRTC PeerConnection 피어 연결 상태 정리 및 세션 유효성 확인 본문

Aws (Amazon)

173. (Aws/Amazon) [Aws Kinesis Video Streams] WebRTC PeerConnection 피어 연결 상태 정리 및 세션 유효성 확인

투케이2K 2026. 1. 20. 19:38
728x90

[개발 환경 설정]

개발 환경 : Aws / Amazon Web Services

 

[설명 정리]

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

- 인프라 : Aws / Amazon Web Services


- 기술 구분 : Aws / Aws Kinesis Video Streams / KVS / 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. ✅ PeerConnection 자체 상태 확인 방법 : connectionState

  >> 자바스크립트 코드 소스 코드 예시 : 
  
    pc.onconnectionstatechange = () => {
      console.log("connectionState:", pc.connectionState);
    };

  >> connectionState 상태 정리 : 

    - new : 시그널링/ICE 시작 전

    - connecting : ICE/DTLS handshake 중

    - connected : WebRTC 연결 정상

    - disconnected일시적 끊김 (재연결 가능)

    - failed : 완전히 실패한 상태

    - closed : PeerConnection 종료

  >> 연결 유효성 판단 기준 : 

    - connected 상태 이면 정상
    
    - disconnected 는 지연·네트워크 문제일 가능성 → 재연결 로직 필요

    - failed 는 완전 종료 필요


2. ✅ ICE 연결 상태 확인 방법 : iceConnectionState

  >> 자바스크립트 코드 소스 코드 예시 : 
  
    pc.oniceconnectionstatechange = () => {
      console.log("iceConnectionState:", pc.iceConnectionState);
    };

  >> iceConnectionState 상태 정리 : 

    - checking : ICE 연결 설정 중

    - connected : ICE 연결 성공

    - completed : 모든 ICE 후보 확인 완료

    - disconnected : 네트워크 이슈/일시적 손실

    - failedICE : 실패 → 연결 전체 실패

  >> 연결 유효성 판단 기준 : 

    - ICE 가 failed 면 PeerConnection도 거의 100% 실패한 상태입니다


3. ✅ DTLS 상태 확인 (보안 채널) 방법 : dtlsState

  >> 자바스크립트 코드 소스 코드 예시 : 
  
    pc.ondtlsstatechange = () => {
      console.log("dtlsState:", pc.dtlsState);
    };

  >> dtlsState 상태 정리 : 

    - connecting : 핸드셰이크 중

    - connected : 보안 세션 정상

    - closed : 종료

    - failed : DTLS 실패 = 미디어 전달 불가


4. ✅ Media Tracks 상태 체크 방법 : 미디어가 정상적으로 전송되고 있는지 확인

  >> 자바스크립트 코드 소스 코드 예시 :

    pc.getStats().then(stats => {
      stats.forEach(report => {
        if (report.type === "inbound-rtp" || report.type === "outbound-rtp") {
          console.log(report.bytesReceived, report.bytesSent);
        }
      });
    });

  >> 연결 유효성 판단 기준 : 

    - bytesSent/bytesReceived 증가 → 정상 동작 중

    - 증가하지 않으면 → 연결 문제 or 네트워크 단절


5. ✅ connectionState 와 iceConnectionState 를 사용해 PeerConnection 연결 상태 체크 함수

  function isPeerConnectionValid(pc) {
    const state = pc.connectionState;
    const ice = pc.iceConnectionState;
    
    if (state === "connected" && 
        (ice === "connected" || ice === "completed")) {
      return true;
    }

    return false;
  }

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






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

[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 Kvs WebRTC 실시간 영상 재생 관련 구성 요소 및 용어 정리]

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


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

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


[업무 이슈] 안드로이드 웹뷰에서 AWS WebRTC 웹 뷰어 영상 재생 중 앱 화면 종료 시 마스터에서 뷰어 close 상태가 늦게 감지 되는 이슈

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


[Aws] WebRTC Viewer 뷰어 기기에서 실시간 디바이스 기기 해상도 확인 로직

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

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