투케이2K

195. (TWOK/WORK) [업무 이슈] 자바스크립트 AWS WebRTC 뷰어 비디오 재생 전용에서 Audio True 잘못 된 Offer 전송으로 Answer 미응답 이슈 본문

투케이2K 업무정리

195. (TWOK/WORK) [업무 이슈] 자바스크립트 AWS WebRTC 뷰어 비디오 재생 전용에서 Audio True 잘못 된 Offer 전송으로 Answer 미응답 이슈

투케이2K 2025. 12. 21. 11:28
728x90

[제 목]

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

제목 : [업무 이슈] 자바스크립트 AWS WebRTC 뷰어 비디오 재생 전용에서 Audio True 잘못 된 Offer 전송으로 Answer 미응답 이슈

 

[내 용]

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

- 제 목 : [업무 이슈] 자바스크립트 AWS WebRTC 뷰어 비디오 재생 전용에서 Audio True 잘못 된 Offer 전송으로 Answer 미응답 이슈


- 테스트 환경 : 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 연결 수행 시 오디오 객체를 사용하지 않지만 SDP Offer 전송 시 audio 사용 true 설정으로

   SDP Answer 응답을 받지 못하는 이슈 발생 (SDP 메시지 요청 에러)

  >> SDP 메시지 송수신 교환 시 올바르지 않은 offer 전송 시 answer 응답을 받지 못하는 이슈


2. 자바스크립트 SDP Offer 전송 코드 첨부 (AS-IS) : WebRTC 비디오 재생 전용 이며, 오디오는 사용하지 않음

  >> Body 비디오 객체 소스 코드 : <video autoplay="true" id="remoteView"></video>

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

  // -----------------------------------------
  // [시그널링 클라이언트 이벤트 리스너 추가]
  // -----------------------------------------
  signalingClient.on('open', async () => {
      console.log("[setSystem] : [로컬 <-> 원격 연결 신호 확인] : [signalingClient] : [open] : [Start]");


      // -----------------------------------------
      // [SDP 오퍼 생성 및 마스터에게 전송]
      // -----------------------------------------
      // 오디오 출력 될 객체 없고, 스트림 지정 없는데 true 설정 시 answer 응답 못받음
      // -----------------------------------------
      const offer = await peerConnection.createOffer({
          offerToReceiveAudio: true, // ❌ 실제로 오디오 객체를 사용하는 것이 없는데 true 잘못 설정
          offerToReceiveVideo: true,
      });

      await peerConnection.setLocalDescription(offer);

      signalingClient.sendSdpOffer(peerConnection.localDescription);

  });

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





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

1. 자바스크립트에서 뷰어 역할 WebRTC 연결 수행 (signalingClient 초기화 및 peerConnection 생성)


2. 자바스크립트에서 SDP 메시지 송수신 교환 signalingClient open 수행 실시


3. 자바스크립트에서 signalingClient open 이 완료 된 경우 peerConnection.createOffer 전송 수행

  >> 실제로 오디오 객체를 사용하는 것이 없는데 offerToReceiveAudio 값을 true 로 설정

  const offer = await peerConnection.createOffer({
      offerToReceiveAudio: true, // ❌ 실제로 오디오 객체를 사용하는 것이 없는데 true 잘못 설정
      offerToReceiveVideo: true,
  });


4. 디바이스 마스터 기기로부터 Answer 응답을 받지 못하는 이슈 확인

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





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

1. 실제로 오디오 객체를 사용하는 것이 없는 경우 peerConnection.createOffer 생성에서 offerToReceiveAudio 값을 false 로 설정하도록 소스 코드 변경


2. 변경 된 자바스크립트 소스 코드 예시 : 

  // -----------------------------------------
  // [시그널링 클라이언트 이벤트 리스너 추가]
  // -----------------------------------------
  signalingClient.on('open', async () => {
      console.log("[setSystem] : [로컬 <-> 원격 연결 신호 확인] : [signalingClient] : [open] : [Start]");


      // -----------------------------------------
      // [SDP 오퍼 생성 및 마스터에게 전송]
      // -----------------------------------------
      // 오디오 출력 될 객체 없고, 스트림 지정 없는데 true 설정 시 answer 응답 못받음
      // -----------------------------------------
      const offer = await peerConnection.createOffer({
          offerToReceiveAudio: false, // ✅ 실제로 오디오 객체를 사용하는 것이 없으므로 false 설정
          offerToReceiveVideo: true,
      });

      await peerConnection.setLocalDescription(offer);

      signalingClient.sendSdpOffer(peerConnection.localDescription);

  });

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





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

[업무 이슈] 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