브라우저 오디오 캡처 제약 (W3C 보안 모델)

concept updated 2026-04-13

브라우저 오디오 캡처 제약

한 줄 정의

브라우저는 W3C 보안 모델상 스피커 출력에 직접 접근 불가. 상대방 음성 캡처는 getDisplayMedia 필수.

핵심 제약 (API별)

API캡처 대상화면공유 팝업제약
getUserMedia({ audio })마이크 입력만없음스피커 출력 접근 불가
getDisplayMedia({ audio })선택한 탭/화면 오디오필수video: true 필수
getDisplayMedia({ audio: { systemAudio: 'include' } })시스템 전체 오디오필수Chrome/Edge + macOS 14.2+ only

왜 스피커에 직접 접근 안 되는가: 스피커 출력은 “컴퓨터의 모든 소리”라 도청 위험 → W3C가 화면공유 UI 강제로 사용자가 직접 범위 선택하게 함. AudioOutputContext 제안 있었으나 보안 이유로 미채택.

이어폰 사용 시 주의

  • getUserMedia만 쓰면 이어폰 사용자의 상대방 음성 캡처 불가 (이어폰으로 나가서 마이크에 안 잡힘)
  • getDisplayMedia 필수: 음소거해도 오디오 스트림은 캡처됨

채택된 패턴 (lattice AI 회의록)

// 마이크 + 시스템 오디오 합성
getUserMedia({ audio: true })        // 마이크
getDisplayMedia({
  video: true,                        // API 제약상 필수
  audio: { systemAudio: 'include' }   // 시스템 오디오
})
// → 비디오 트랙은 즉시 stop()

대안 (화면공유 팝업이 불편할 때)

  • Chrome Extension (chrome.tabCapture) — 팝업 없이 탭 오디오, 별도 배포 필요
  • Electron 앱 — OS 레벨 CoreAudio/WASAPI 접근 가능
  • 봇 참가 방식 (Otter.ai 등) — 서버에서 수신, 클라이언트 무관

Relationships

related_to ../concepts/stt-pipeline-design
applies_to ../entities/lattice