iPad Pro 영상 오디오 감쇠 원인 분석
마지막 업데이트 2026-07-22
요약
현재 확인된 증상은 iPad Pro 11-inch (M5) 내장 스피커와 내장 마이크를 동시에 사용하는 경우에 재현된다.
코드상 apps/web/shared/ui/meet-video.tsx가 비디오 엘리먼트의 volume을 낮추는 직접 로직은 없다.
가장 유력한 원인은 iPadOS Safari/WebKit의 마이크 캡처 세션과 echo cancellation/AEC가 iPad Pro의 내장 스피커 출력과 내장 마이크 입력 사이의 되먹임을 줄이기 위해 시스템 레벨로 재생음을 감쇠시키는 동작이다.
따라서 이 문제는 Blob URL 자체보다 내장 스피커 출력, 내장 마이크 캡처, WebRTC/Realtime VAD/외부 STT, echo cancellation 조합의 기기 특성 문제로 보는 것이 타당하다.
증상
- iPad Pro에서
MeetVideo가 Blob URL 기반 MP4 영상을 재생한다. - 영상 재생 중 대화인식 이벤트가 발생하면 재생 중인 영상의 오디오 출력이 작아진다.
- 재현 환경은 iPad Pro 내장 스피커 + 내장 마이크 조합이다.
원인 판단
| 항목 | 판단 | 근거 |
|---|---|---|
MeetVideo 볼륨 제어 |
직접 원인 아님 |
apps/web/shared/ui/meet-video.tsx는 muted, play(), pause(), setSinkId()를 다루지만 video.volume을 낮추지 않는다.
중간 재생 중 직접 음량을 줄이는 코드도 확인되지 않았다.
|
| 마이크 캡처와 음성 처리 | 유력 원인 |
apps/web/hooks/local-media-constraints.ts:10에서 echoCancellation: true, noiseSuppression: true, autoGainControl: true를 사용한다.
apps/web/hooks/use-local-media-stream.ts:53에서 getUserMedia()로 마이크 스트림을 연다.
|
| Realtime VAD 대화인식 | 트리거 경로 |
apps/web/entities/guest-session/model/use-ai-session.ts:2413의 input_audio_buffer.speech_started는 사용자 발화 상태를 갱신하고 필요 시 AI 응답을 취소한다.
이 이벤트 자체가 비디오 볼륨을 바꾸지는 않지만, 이벤트가 발생한다는 것은 마이크 캡처와 VAD가 활성 상태라는 뜻이다.
|
| 외부 STT | 증폭 요인 |
apps/web/entities/guest-page-session/model/use-guest-page-session.ts:763에서 외부 STT가 켜지고 로컬 마이크 스트림이 있으면 STT observer를 시작한다.
같은 파일 :2406에서는 외부 STT를 켤 때 마이크도 함께 켜도록 구현되어 있다.
|
| iPad Pro 내장 입출력 | 재현 조건 | iPad Pro 11-inch (M5)는 4 speaker audio와 studio-quality four-mic array를 갖고 있어, 내장 스피커 재생음이 내장 마이크에 강하게 유입될 수 있다. WebRTC echo cancellation이 이 조합에서 적극 개입할 가능성이 높다. |
코드 경로
1. 영상 재생
apps/web/shared/ui/meet-video.tsx가 리소스 캐시에서 Blob URL을 받아<video src={videoUrl}>로 재생한다.setSinkId()는 지원되는 브라우저에서 출력 장치를 지정할 때만 사용된다. iPadOS Safari에서는 출력 장치 선택 제어가 제한될 수 있으므로 내장 스피커 경로가 유지될 가능성이 높다.
2. 마이크 캡처
apps/web/hooks/use-local-media-stream.ts:53에서navigator.mediaDevices.getUserMedia(constraints)를 호출한다.apps/web/hooks/local-media-constraints.ts:10에서 echo cancellation, noise suppression, auto gain control을 켠다.
3. Realtime/대화인식
apps/web/entities/guest-session/model/use-ai-session.ts:1937에서 로컬 마이크 스트림에 오디오 처리 체인을 적용한다.apps/web/entities/guest-session/model/use-ai-session.ts:1964에서 처리된 오디오 트랙을 OpenAI Realtime용RTCPeerConnection에 추가한다.apps/web/lib/openai-create-call.ts:46에서 기본 turn detection은server_vad이며,:102에서noise_reduction도 설정된다.
4. 비AI 영상 스텝에서의 세션 유지
apps/web/entities/guest-page-session/model/use-step-transition.ts:122주석처럼 비AI 스텝에서는 세션을 유지하고 마이크만 끈다.- 이 방식은 데스크톱에서는 효율적이지만, iPadOS에서는
track.enabled = false만으로 시스템의 캡처 오디오 세션이 완전히 해제되지 않을 수 있다.
iPad Pro 기기 특성과의 관련성
iPad Pro 11-inch (M5)는 4 speaker audio와 studio-quality four-mic array를 갖는다. 같은 물리 장치에서 스피커 출력과 마이크 입력을 동시에 사용하면, 대화 시스템 관점에서는 강한 acoustic echo 상황이 된다. 이때 Safari/WebKit의 WebRTC 캡처 세션은 마이크 입력에서 재생음을 제거하려고 하고, iPadOS 오디오 세션은 통화형 또는 캡처형 처리로 전환될 수 있다.
이 때문에 DOM의 video.volume 값이 그대로여도 사용자가 듣는 실제 스피커 출력은 작아질 수 있다.
증상이 iPad Pro 내장 스피커 + 내장 마이크에서 재현되고 헤드셋이나 외부 오디오 장치에서는 줄어든다면, 이 가설은 더 강해진다.
검증 절차
- iPad Pro 내장 스피커 + 내장 마이크에서 외부 STT OFF, 마이크 OFF, 영상 단독 재생 상태를 확인한다.
- 같은 영상에서 외부 STT ON 또는 마이크 ON 상태로 전환하고 음량 감쇠 발생 시점을 기록한다.
- 같은 iPad Pro에 유선 또는 Bluetooth 헤드셋을 연결해 같은 절차를 반복한다. 헤드셋에서 사라지면 acoustic echo/AEC 영향으로 볼 수 있다.
- 임시 빌드에서
echoCancellation: false,noiseSuppression: false,autoGainControl: false조합을 테스트한다. speech_started전후로video.volume,video.muted,audioTrack.enabled,audioTrack.readyState,navigator.userAgent,navigator.platform,navigator.maxTouchPoints를 로그로 남긴다.
대응 방안
운영 회피
- iPad Pro 내장 스피커 + 내장 마이크 조합에서는 영상 오디오 재생 중 대화인식 또는 외부 STT를 끄도록 안내한다.
- 영상 오디오와 대화인식을 동시에 써야 하면 헤드셋 사용을 권장한다.
- 모니터 UI에서 iPad Pro 감지 시 "헤드셋 권장" 또는 "영상 중 대화인식 비활성 권장" 안내를 노출한다.
제품 수정 후보
- iPadOS Safari로 추정되는 환경에서
full:video재생 중에는 마이크 트랙의enabled만 끄지 말고 캡처 트랙을 실제로stop()한다. - 영상 종료 후 AI 또는 STT 스텝으로 돌아갈 때 마이크 권한과 스트림을 재획득한다.
- 비AI 스텝에서 Realtime 세션을 유지해야 한다면, iPad Pro 내장 오디오 환경에서는 별도 플래그로만 예외 처리한다.
- 외부 STT 토글이 켜질 때 현재 스텝이 영상이면 마이크 활성화를 지연한다.
- 헤드셋 모드(
noise_reduction: near_field)가 완화에 도움이 되는지 확인하고, 내장 스피커 환경에서는 자동 적용하지 않는다. near-field는 헤드셋/근접 마이크 전제이므로 내장 스피커 echo 상황의 근본 해결책은 아니다.
참조
- Apple: iPad Pro technical specifications - iPad Pro 11-inch (M5): 4 speaker audio, studio-quality four-mic array.
- WebKit: A Closer Look Into WebRTC - Safari media capture behavior and capturing state.
- MDN: MediaDevices.getUserMedia() - media input stream acquisition.
- MDN: MediaTrackConstraints.echoCancellation - echo cancellation behavior.
- MDN: HTMLMediaElement.setSinkId() - audio output device selection API.
관련 문서
- 사운드 이슈 종합 분석 - PPI 사운드 문제 전반의 진입점.
- setSinkId 시스템볼륨 우회 분석 - 오디오 출력 장치 라우팅과 시스템 볼륨 이슈.
- 영상종료 자동전환 미발생 watchdog 분석 - full:video 스텝과
MeetVideo동작 관련 통합 분석. - OpenAI Realtime 세션매니저 코드레벨 동작 흐름 - Realtime VAD와 마이크 스트림 연결 경로.
- External STT 클라이언트 WS/prebuffer 코드레벨 동작 흐름 - 외부 STT와 마이크 활성화 경로.
- 오디오 처리 체인 코드레벨 동작 흐름 - 마이크 입력 처리 체인.