web-dev-qa-db-ja.com

AVAudioPlayer AVPlayer AVQueuePlayer MPMusicPlayerController MPRemoteCommandCenter MPNowPlayingInfoCenter for iOS 13+アプリの違い

このトピックのスレッドはすべて非常に古く(5以上)、明確なMODERNアプローチを形成しているようには見えないので、2020年についてまとめることができれば幸いです(Swift 5、 Xcode 11)。

iOS 1を使用して、iPhone向けの(音楽だけでなく)オーディオプレーヤーアプリを前向きに構築する場合(iOS 14をサポートしないものについては気にしないでください)。 8)未満の場合、要件が次の場合にどのキット/クラスを使用しますか...

  • アプリはダウンロードしたMP3ファイルをローカルに保存および再生できます(必ずしもストリーミングまたは埋め込まれているとは限りません)。
  • ユーザーは、オーディオに対する基本的なプレーヤーコントロール(再生/一時停止/スクラブ/ボリューム)を持っています。
  • アプリには、アプリでいつでも調整できるオーディオキュー(トラック再生の順序)があります。
  • ユーザーは、キューをトラバース(逆方向/順方向シーク)できます。
  • ユーザーは、携帯電話がペアリングされているBluetoothオーディオデバイスでの再生を選択できます。
  • オーディオは再生できますバックグラウンドで(画面がオフのとき、または別のアプリで)。
  • アプリはトラックをトリガーしてキューを調整できますバックグラウンドで(ユーザーの操作なしで)。
  • オーディオは、ネイティブiOSコントロール(RemoteControlEvents)と統合されます。
  • このアプリは、Appleのガイドラインによる「現在再生可能なアプリ」です。ボーナス(可能であれば):
  • アプリの音声は、ルートアプリと同じように音楽の再生をオーバーレイできます(これにより、バックグラウンドと「現在再生中」の機能が無効になる可能性がありますが、アプリ開発者がメソッドを選択する理由を明確にするための説明に役立つ場合があります)。

それでは、AVAudioPlayerまたはAVPlayerまたはMPMusicPlayerControllerを使用しますか? MPRemoteCommandCenterまたはMPNowPlayingInfoCenter?

おそらくいくつかの要件は相互に排他的であるか、不可能でさえあるかもしれませんが、オーディオ再生を制御する方法が多くあり、ユースケース間に明確な説明がないため、なぜオーディオが音楽か音声かが重要である理由を理解できません、ダウンロードまたはストリーミング。オーディオは明らかにAppleのビデオ、特にスピーチの2番目のクラスの市民ですが、プレイリスト、ポッドキャスト、その他のタイプのオーディオアプリケーションなどの特定のタイプの基本的なアプリケーションには、今のところ方向性があると思います。

3
Rogi I.

私の知る限り、あなたの質問に答えてみます。

アプリはダウンロードされたMP3ファイルをローカルに保存および再生できます(必ずしもストリーミングまたは埋め込まれているとは限りません)。

  • AVPlayerまたはAVAudioPlayerを使用できます。 AVPlayerにはより多くの機能があります。 Appleのドキュメント hereAVPlayerを確認してください。そして here for AVAudioPlayer

ユーザーはオーディオ(再生/一時停止/スクラブ/音量)の基本的なプレーヤーコントロールを持っています

  • AVAudioPlayerには、再生されるサウンドファイルに対して必要なすべてのコントロールがあります。

アプリには、アプリによっていつでも調整できるオーディオキュー(トラック再生の順序)があります。

  • AVQueuePlayerを継承するAVPlayerを使用する必要があります。 Appleのドキュメント here を確認してください。

ユーザーは、携帯電話がペアリングされているBluetoothオーディオデバイスでの再生を選択できます。

  • 上記のどれを選択してもかまいません。このAVAudioSessionオプション。ドキュメントをチェック ここ

オーディオはバックグラウンドで再生できます(画面がオフのとき、または別のアプリで)。

  • アプリにBackgroundMode機能を追加し、オーディオ、エアプレイオプションを確認する必要があります。

オーディオはトラックをトリガーし、バックグラウンドでキューを調整できます(ユーザーの操作なし)。

  • QueuePlayerを操作するには、アプリ拡張機能を追加する必要があります。

オーディオはネイティブiOSコントロール(RemoteControlEvents)と統合されます。

  • MPNowPlayingInfoCenterを使用して情報を更新し、曲のタイトル、アーティスト、アートワークなどを更新できるようにします... Appleのドキュメント here

MPRemoteCommandCenterに加えて、イベントをリッスンし、それに応じてプレーヤーを更新します docs

アプリのオーディオは、ルートアプリと同じように音楽の再生をオーバーレイできます(これにより、バックグラウンドと「現在再生中」の機能が無効になることを理解していますが、より明確な理由でディスカッションに役立ちますアプリ開発者向けのメソッドを選択する方法

  • また、AVAudioSession'sカテゴリオプションで、.mixWithOthersオプションを追加します。

では、AVAudioPlayerまたはAVPlayerまたはMPMusicPlayerControllerを使用しますか? MPRemoteCommandCenterまたはMPNowPlayingInfoCenter?

デバイスライブラリから再生する場合は、MPMusicPlayerControllerを使用します。

上記はそのハイライトをまとめたものだと思います。たとえば、これらすべてを一緒に使用するときに気を付けなければならないことがたくさんあります。たとえば、すべてのオプションがすべてのAVAudioSession'sモードで機能するわけではありません。プレーヤーには多くのプロパティがあり、間違ったセットを設定するとプレーヤーが機能しなくなる可能性があります。

1
Ahmed Fathi