[swift] MediaPlayer 오디오 출력 장치 선택하기

iOS 앱을 개발하다보면 MediaPlayer를 사용해 오디오를 재생하는 경우가 많습니다. 디바이스에는 여러 종류의 오디오 출력 장치가 연결될 수 있으므로 사용자가 출력 장치를 선택할 수 있도록 하는 기능이 필요할 수 있습니다. 이번 글에서는 Swift를 사용하여 MediaPlayer로 연결된 오디오 출력 장치를 선택하는 방법에 대해 알아보겠습니다.

MPVolumeView를 사용하여 출력 장치 선택하기

MPVolumeView를 사용하면 시스템에서 제공하는 기본 오디오 출력 장치 선택 화면을 간편하게 사용할 수 있습니다. 다음은 MPVolumeView를 사용하여 오디오 출력 장치를 선택하는 예제 코드입니다.

import MediaPlayer

func showAirPlayPicker() {
    let volumeView = MPVolumeView(frame: .zero)
    if let airPlayButton = volumeView.subviews.first(where: { $0 is UIButton }) as? UIButton {
        airPlayButton.sendActions(for: .touchUpInside)
    }
}

위 예제 코드는 MPVolumeView를 이용하여 오디오 출력 장치 선택을 위한 화면을 표시하는 함수를 보여줍니다. MPVolumeView를 생성한 후에는 해당 view에서 UIButton을 찾아 해당 버튼을 터치하는 방식으로 사용자가 출력 장치를 선택할 수 있도록 할 수 있습니다.

AVAudioSession을 이용한 출력 장치 선택

AVAudioSession을 사용하여 더 세밀한 출력 장치 선택을 구현할 수도 있습니다. 다음은 AVAudioSession을 이용하여 출력 장치 선택을 제어하는 예제 코드입니다.

import AVFoundation

func setAudioOutputToDevice(deviceID: String) {
    let session = AVAudioSession.sharedInstance()
    do {
        try session.setPreferredOutputDeviceID(deviceID)
        try session.setCategory(.playback)
        try session.setMode(.default)
        try session.setActive(true)
    } catch {
        print("Failed to set preferred output device: \(error.localizedDescription)")
    }
}

위의 예제 코드는 AVAudioSession을 이용하여 특정 출력 장치로 설정하는 함수를 보여줍니다. 사용자가 선택한 장치의 ID를 전달하여 해당 장치로 출력을 설정할 수 있습니다.

결론

이렇게 MPVolumeView나 AVAudioSession을 사용하여 MediaPlayer 오디오 출력 장치를 선택하는 방법을 알아보았습니다. 각각의 방법은 각각의 장단점을 가지고 있으므로 상황에 맞게 적절히 선택하여 사용하면 됩니다.

참고 문헌:

이상으로 해당 기능을 구현하는 데 도움이 되었으면 합니다. 감사합니다.