Search code examples
iosaudioavfoundationavplayerviewcontrolleravkit

How to resume audio playing of other apps after dismissing AVPlayerViewController?


I use AVPlayerViewController to play short videos in my app.

If there is an app playing audio in background before user plays a video in my app, I want the background audio playing of the other app to resume after my video player is dismissed. I currently use AVAudioSession.setActive(false, with: .notifyOthersOnDeactivation) to do that.

Even though Apple's Music app and Podcasts app do resume playing after I call AVAudioSession.setActive(false, with: .notifyOthersOnDeactivation)—won't resume without the call so it means this call does have effect—none of the 3rd party music or podcast apps that I tested(Spotify, SoundCloud, Amazon Music, Overcast) do.

Here is my code:

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    // I know it's not the best place to call setActive nor it covers all the cases. It's just a convenient place to put the code to test its effect after dismissing the video player.
    do {
        try AVAudioSession.sharedInstance().setActive(false, with: .notifyOthersOnDeactivation)
    } catch {
        print(error)
    }
}

@IBAction func play(_ sender: Any) {
    do {
        try AVAudioSession.sharedInstance().setActive(true)
    } catch {
        print(error)
    }

    let playerController = AVPlayerViewController()
    playerController.player = AVPlayer(url: URL(string: "http://gslb.miaopai.com/stream/UkjiD45ddxZFQ79I2bLaGg__.mp4")!)
    playerController.player?.play()
    present(playerController, animated: true)
}

At first I thought it might be these 3rd party apps' fault. But then I tested them with the official Twitter app and found they can resume audio playback after video playing in Twitter app.

So what did I miss? What should I do to make these 3rd party apps resume audio playback after video playing in my app, just as Twitter app does?

PS: here is the complete project so anyone interested can try it.


Solution

  • Now I can confirm it is a bug: https://openradar.appspot.com/31733529. And this bug is fixed in iOS 11.