DX노트
생각 iPhone Safari / 크롬(=Safari WebView)에서 동작이 안 되는 핵심 원인들
페이지 정보
본문
iPhone Safari / 크롬(=Safari WebView)에서 동작이 안 되는 핵심 원인들
아이폰에서는 안드로이드/PC와 달리 WebRTC·오디오·WS 규칙이 매우 엄격합니다.
1. 아이폰은 <audio autoplay> + Web Audio 동시 사용이 매우 제한적
remoteAudio.autoplay = true;
audioCtx = new AudioContext();iOS Safari는 사용자 제스처가 없으면 오디오 재생·AudioContext 생성 자체가 불가능합니다.
- btnJoin 클릭 전에는 AudioContext 생성 불가
- remoteAudio.play()도 사용자 제스처 전에는 실패
- 심지어 getDisplayMedia도 사용자 제스처 필요
- 하지만 현재 구조는 소켓 연결 → 시각화 초기화 → 스트림 수신 시 자동 재생 → iOS 금지
2. iOS는 createMediaStreamSource() 를 <audio srcObject> 와 함께 사용할 때 문제가 많음
<audio>.srcObject → 재생
AudioContext.createMediaStreamSource(stream) → 시각화이 조합이 있을 경우 소리는 나오지만 Visualizer는 동작하지 않거나, 반대로 소리가 소멸되고 무음 상태가 되어버리는 버그가 있습니다.
“소스 스트림을 AudioContext로 두 번 연결하면 무음이 되거나 재생 실패” 이는 WebKit의 알려진 버그입니다.
3. iPhone에서는 system audio 공유(캡처) 제한
navigator.mediaDevices.getDisplayMedia({
video: true,
audio: { ... }
})iOS Safari는 system audio capture 자체를 지원하지 않습니다.
| 기능 | iOS Safari | 지원 여부 |
| 화면 캡처 | ⭕ | 지원 |
| 탭 오디오 캡처 | ❌ | 불가 |
| 시스템 전체 오디오 캡처 | ❌ | 불가 |
| getDisplayMedia audio: true | ❌ | 무조건 audio 없음 |
그래서 DJ 기능은 아이폰에서는 절대 작동할 수 없습니다.
4. AudioContext + silent oscillator(1Hz tone) iOS 정책과 충돌
silenceOsc.frequency.setValueAtTime(1);
gainNode.gain.value = 0.0001;
gainNode.connect(audioCtx.destination);- 아주 작은 gain의 oscillator는 “유해한 오디오 패턴”으로 분류
- 절전방지 오디오 트릭 자체를 대부분 차단
- AudioContext가 “silent → active” 상태로 유지되는 것도 일부 차단
- 따라서 절전 방지용 오실레이터가 iOS에서 소리 재생을 방해하는 경우가 매우 많습니다.
5. WebRTC 자체가 iOS에서 오디오 트랙만 송출할 경우 문제가 많음
여러 콘텐츠 제약 때문에 iOS는:
- 오디오 단독 트랙 WebRTC → 불안정
- PeerConnection이 트랙을 받았어도 audio 태그 재생 실패
- 특히 offer.sdp 수정(stereo, bitrate 변경)이 Safari와 충돌
결론
댓글목록
등록된 댓글이 없습니다.
