OPWS Developers

실시간 MIC

broadcast.mic.start()로 WebRTC 기반 실시간 마이크 방송을 시작합니다. 준비된 안내로 부족한 긴급 상황에, 브라우저에서 바로 말하면 현장 스피커로 나갑니다.

지원 확인은 mount 시 1회

WebRTC 지원 여부(isSupported())는 컴포넌트 장착 시 한 번 확인합니다. 매 start()마다 확인하지 않습니다. 미지원이면 비활성 안내 UI를 표시합니다.

ts
if (!oe.broadcast.mic.isSupported()) {
  showUnsupportedNotice();   // WebRTC 미지원 — start UI 미렌더
  return;
}

선택적 프리로드

MIC 청크(livekit 포함)는 start() 시 동적 로드됩니다. 버튼 마우스오버 등 적절한 시점에 preload()로 미리 받아 start() 지연을 줄일 수 있습니다(중복 호출 안전).

ts
await oe.broadcast.mic.preload();

시작과 종료

ts
const session = await oe.broadcast.mic.start({
  targetHandle: "grp_main",
  idempotencyKey: crypto.randomUUID(),
});
// session.sessionId — ON AIR

// 페이지 이탈/종료 전 반드시 정리
await session.stop();

start()는 마이크 권한 요청과 LiveKit 방 연결을 마친 뒤 MicSession을 반환합니다. stop()이 실패해도 서버 세션은 이미 정리되므로 UI만 종료 처리하면 됩니다.

CSP 요구사항

MIC를 쓰는 사이트의 Content-Security-Policy가 다음을 허용해야 합니다. 미설정 시 청크 로드가 차단돼 MicChunkLoadFailed가 발생합니다.

yaml
script-src:  'self' https://cdn.openecho
connect-src: 'self' https://your-openecho-api.example.com wss://*.livekit.cloud
worker-src:  blob:

주의사항

  • 한 번에 하나의 세션만 활성화됩니다. 진행 중 방송이 있으면 BroadcastIneligible(409).
  • 페이지 이탈 전 반드시 session.stop() — unmount 핸들러에서 자동 종료를 구현하세요.
  • MIC capability가 없으면 CapabilityDenied(403).