3

AVPlayerViewControllerアプリで短いビデオを再生するために使用します。

ユーザーがアプリでビデオを再生する前に、バックグラウンドでオーディオを再生しているアプリがある場合、ビデオ プレーヤーを閉じた後に、他のアプリのバックグラウンド オーディオ再生を再開したいと考えています。私は現在それを行うために使用AVAudioSession.setActive(false, with: .notifyOthersOnDeactivation)します。

Apple の Music アプリと Podcasts アプリは、通話後に再生を再開しますAVAudioSession.setActive(false, with: .notifyOthersOnDeactivation)が (通話なしでは再開されないため、この通話は有効であることを意味します)、私がテストしたサードパーティの音楽アプリやポッドキャスト アプリ (Spotify、SoundCloud、Amazon Music 、曇り)する。

これが私のコードです:

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)
}

最初は、これらのサード パーティ製アプリのせいではないかと思いました。しかし、公式の Twitter アプリでテストしたところ、Twitter アプリでビデオを再生した後にオーディオの再生を再開できることがわかりました。

それで、私は何を逃したのですか?Twitter アプリと同じように、これらのサードパーティ製アプリで動画再生後に音声再生を再開するにはどうすればよいですか?

PS: ここに完全なプロジェクトがあるので、興味のある人は誰でも試すことができます。

4

3 に答える 3

3

動画プレーヤーを閉じた後、他のアプリのバックグラウンド オーディオ再生を再開したい

それはあなた次第ではないことを受け入れる必要があります。できることは、オーディオ セッションを適切に管理することだけです他のアプリが「ヒントを取得」してオーディオを再開するかどうかは、あなたのコントロールではありません。

ただし、オーディオ セッションを適切に管理できていません。あなたがすべき:

  • 一般的に干渉しないカテゴリを使用します (Ambient など)。

  • Playback カテゴリに変更し、 必要な場合にのみ有効にします(つまり、実際にプレイしようとしているときのみ)。

  • 演奏が終わったら、 を非アクティブにしてから、非干渉オーディオ カテゴリ(アンビエントなど)notifyOthersOnDeactivationに切り替えてアクティブにします。

これらのことを実行したら、できることはすべて実行したことになります。再開するアプリもあれば、再開しないアプリもあります。

于 2017-02-23T15:37:03.960 に答える
0

AVAudioSession 通知を実装する必要があります。. 中断するたびに、またはアプリがメディア ファイルの再生を完了すると、通知が発生し、そこからデバイス ライブラリから既に一時停止されているメディア ファイルを再開できます。

于 2017-02-23T05:50:34.893 に答える