최근 무음모드로 여러가지 시도를 많이 해봤습니다.
현재 나의 기기가 무음모드인지 판단하는거부터 시작해서.. 전화 수신 후의 음원 재생 등등..
이번에는 무음모드에서 WebView 내의 음원 출력하는 문제도 해결해야 했습니다..
먼저 왜 소리가 안나는지 공부해본 결과!
무음모드 일 때 iOS의 웹 오디오 기능이 정상적으로 작동되지 않는 원인이 safari 와 관련되어 있는 것을 확인하였습니다.
해결방안
기존 무음모드를 판단할 때, 무음 음원을 재생시켜 소리 음량으로 비교했던 방식을 기반으로 WebView 상에서 무음 음원을 재생시키는 방향으로 진행했습니다.
확인 결과, audio 또는 video 요소를 재생시키면 WKWebView 오디오 세션 범주가 Ambient라는 default에서 Playback으로 변경된다는 것을 알게 되었습니다.
재생시키기 위해서는 우선 음원을 인코딩 해야합니다.
https://base64.online/encoders/encode-audio-to-base64
Encode Audio File to Base64 Data (MP3, WAV, OGG, AAC, MIDI, WEBA, OPUS)
Encode Audio File to Base64 Data. Convert Audio file to Base64 Text. Use encoded base64 Audio in HTML
base64.online
위의 주소를 통해 무음 음원을 인코딩하여 data 값을 받아왔습니다.
해당 인코딩 값을 이용하여 무음모드에서도 음성이 나오도록 모드를 변경할 수 있었습니다.
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
let jsInject = "var slience=new Audio('인코딩 값');" +
"slience.id='wkwebviewAudio';" +
"slience.play();" +
"slience.loop=true;" +
"document.body.appendChild(slience);"
webView.evaluateJavaScript(jsInject) { [weak self] (obj, error) in
// 이후 동작할 코드
}
}
위처럼 코드를 작성하면 정상적으로 작동되는 것을 확인했습니다.
'Develop > Swift' 카테고리의 다른 글
[Swift] 토스트(Toast) Message WindowScene 연구 (0) | 2022.05.07 |
---|---|
[SwiftUI] TabView PageStyle 회전 연구 (iPad 기준) (0) | 2022.05.03 |
[SwiftUI] ViewModifier 사용해보기 (0) | 2022.05.03 |
[SwiftUI] fullScreenCover 고찰 (0) | 2022.05.02 |
[iOS] 코드 문서화 도와주는 Jazzy 도전기 (0) | 2022.05.02 |