본문 바로가기
개발

[트러블슈팅] Zoom 오디오 꺼짐 시 이벤트 처리

by 양현정 2023. 9. 14.

🎯 구현 목표

말하고 있는 사용자의 카드 컴포넌트에 테두리 깜빡이는 효과추가하고자 했습니다. 사용자가 말을 시작하면 효과가 적용되고, 말을 멈추면 효과가 사라지는 형태입니다.

문제 상황

Zoom SDK사용하던 중, 사용자가 말을 멈췄을 때를 감지하는 이벤트가 발생하지 않는 문제에 직면했습니다.
Zoom SDKisSpeakingtrue되는 시점은 감지할 있지만, false바뀌는 시점은 자동으로 감지해주지 않습니다.
관련 이벤트나 API제공되지 않아, 클라이언트 측에서 직접 처리해야 하는 상황이었습니다.

🔧 해결 방법

사용자가 말을 멈췄다고 판단할 있는 조건을 타이머 기반으로 구현했습니다.
즉, isSpeakingtrue바뀐 일정 시간이 지나면 자동으로 false바꾸는 방식입니다.

timer.current = setTimeout(() => {
  // 나 자신
  dispatch(
    updateVideoChatLocalUser({
      isSpeaking: false,
    }),
  );

  // 나를 제외한 참여자들
  dispatch(updateVideoChatRemoteUsersStopSpeaking());
}, 1500); // 1.5초 후 자동으로 종료 처리

 

setTimeout사용하여 사용자가 말을 시작한 1.5초가 지나면 자동으로 isSpeaking 값을 false설정말하기가 종료되었다고 간주하는 로직을 구현했습니다.

참고 사항

  • 타이머 초기화 처리를 적절히 해주지 않으면 debounce제대로 되지 않아, 연속 말하기 isSpeaking끊길 있으므로 주의가 필요합니다.
  • Zoom SDK한계로 인해 프론트엔드에서 임의의 타이밍을 기준으로 판단하는 방식이지만, 사용자 경험상 크게 무리가 없는 수준에서 작동합니다.