[ios] MediaPlayerUI 프레임워크와 네트워크 연결 관리

iOS 앱을 개발하는 동안 MediaPlayerUI 프레임워크를 사용하여 오디오 또는 비디오를 스트리밍하고 재생하는 기능을 구현할 수 있습니다. 그러나 사용자가 네트워크에서 스트리밍한 미디어 콘텐츠를 재생하는 경우, 네트워크 연결 상태의 변화에 대비해야 합니다. 사용자의 네트워크 연결 상태에 따라 미디어 재생을 일시 중지하거나 다시 시작할 필요가 있을 수 있기 때문입니다.

네트워크 연결 감지 및 처리

iOS 앱은 네트워크 연결 상태를 감지하기 위해 Reachability 라이브러리를 사용할 수 있습니다. 또한, 네트워크로의 연결이 끊기면 미디어 재생을 일시 중지하고, 다시 연결되면 이어서 재생을 계속하도록 구현할 수 있습니다.

import Reachability

let reachability = try! Reachability()

reachability.whenReachable = { _ in
    // 네트워크에 연결되었을 때의 처리
}

reachability.whenUnreachable = { _ in
    // 네트워크 연결이 끊겼을 때의 처리
}

do {
    try reachability.startNotifier()
} catch {
    print("Could not start reachability notifier")
}

대리자(delegates)를 활용한 처리

AVPlayerViewControllerAVPlayer 를 사용하여 미디어를 재생할 때, 해당 클래스들의 대리자를 활용해 네트워크 연결 상태와 관련된 처리를 할 수 있습니다.

import MediaPlayer

class ViewController: UIViewController, AVPlayerViewControllerDelegate {
    var playerViewController: AVPlayerViewController!

    override func viewDidLoad() {
        super.viewDidLoad()

        // 미디어 플레이어를 초기화
        let player = AVPlayer(url: mediaURL)
        playerViewController = AVPlayerViewController()
        playerViewController.player = player
        playerViewController.delegate = self
        playerViewController.showsPlaybackControls = true

        // 미디어 플레이어 뷰를 화면에 추가
        addChild(playerViewController)
        view.addSubview(playerViewController.view)
        playerViewController.view.frame = view.frame
    }

    func playerViewController(_ playerViewController: AVPlayerViewController, willBeginFullScreenPresentationWithAnimationCoordinator coordinator: UIViewControllerTransitionCoordinator) {
        if reachability.connection != .unavailable {
            // 네트워크에 연결되었을 때의 처리
        } else {
            // 네트워크 연결이 끊겼을 때의 처리
        }
    }
}

AVPlayerViewControllerDelegate를 채택하여 playerViewController(_:willBeginFullScreenPresentationWithAnimationCoordinator:) 메서드를 구현하면, 미디어 재생 화면이 풀스크린으로 전환되는 시점에서 네트워크 연결 상태를 확인하고 처리할 수 있습니다.

따라서, MediaPlayerUI를 사용하는 iOS 앱을 개발할 때 네트워크 연결 상태의 변화에 대비하는 방법과 관련된 코드 예시를 살펴보았습니다. 네트워크 연결에 대응하여 사용자가 지속적으로 미디어를 재생할 수 있도록 하는 것은 사용자 경험을 향상시키는 데 중요한 요소입니다.

References