🎯 구현 목표
말하고 있는 사용자의 카드 컴포넌트에 테두리 깜빡이는 효과를 추가하고자 했습니다. 사용자가 말을 시작하면 효과가 적용되고, 말을 멈추면 효과가 사라지는 형태입니다.
❗ 문제 상황
Zoom SDK를 사용하던 중, 사용자가 말을 멈췄을 때를 감지하는 이벤트가 발생하지 않는 문제에 직면했습니다.
Zoom SDK는 isSpeaking이 true가 되는 시점은 감지할 수 있지만, false로 바뀌는 시점은 자동으로 감지해주지 않습니다.
관련 이벤트나 API도 제공되지 않아, 클라이언트 측에서 직접 처리해야 하는 상황이었습니다.
🔧 해결 방법
사용자가 말을 멈췄다고 판단할 수 있는 조건을 타이머 기반으로 구현했습니다.
즉, isSpeaking이 true로 바뀐 뒤 일정 시간이 지나면 자동으로 false로 바꾸는 방식입니다.
timer.current = setTimeout(() => {
// 나 자신
dispatch(
updateVideoChatLocalUser({
isSpeaking: false,
}),
);
// 나를 제외한 참여자들
dispatch(updateVideoChatRemoteUsersStopSpeaking());
}, 1500); // 1.5초 후 자동으로 종료 처리
setTimeout을 사용하여 사용자가 말을 시작한 후 1.5초가 지나면 자동으로 isSpeaking 값을 false로 설정해 말하기가 종료되었다고 간주하는 로직을 구현했습니다.
✅ 참고 사항
- 타이머 초기화 처리를 적절히 해주지 않으면 debounce가 제대로 되지 않아, 연속 말하기 시 isSpeaking이 끊길 수 있으므로 주의가 필요합니다.
- Zoom SDK의 한계로 인해 프론트엔드에서 임의의 타이밍을 기준으로 판단하는 방식이지만, 사용자 경험상 크게 무리가 없는 수준에서 작동합니다.
'개발' 카테고리의 다른 글
[페이지 이동] window.location 메서드 정리 (reload, href, assign, replace) (0) | 2023.11.28 |
---|---|
화살표 함수: () vs {} (0) | 2023.10.13 |
[트러블슈팅] 여러 페이지에서 중복된 쿼리 사용 시 에러 발생 (0) | 2023.09.10 |
Early Return 하는 코드를 작성하자 (0) | 2023.08.19 |
forEach는 함수입니다 (0) | 2023.08.18 |