iOS 4 で MPMusicPlayerController を使用したバックグラウンド オーディオとリモート コントロールのサポート。これも可能でしょうか?

StackOverflow https://stackoverflow.com/questions/3175974

質問

これに2日間費やしましたが、何も進みませんでした。[MPMusicPlayerController applicationMusicPlayer] を使用して、ユーザーの iPod ライブラリから選択したオーディオを再生し、バックグラウンドで実行し、リモート イベントをサポートしようとしています。実際に音楽を再生するのは簡単です。インスタンスを取得し、曲を選択し、音楽キューを割り当てて再生します。終わって、終わった。しかし...a) バックグラウンドで再生できません。b) フォアグラウンドにあるときでも、リモート コントロール イベントをまったく機能させることができません。

そして、質問される前に、はい、私は plist エントリ、オーディオ セッション カテゴリ、リモート イベントの取得に興味があることを示す呼び出しを設定し、それらをリッスンするファーストレスポンダを設定しましたので、知っておいてください、はい、'このテーマに関する、見つけることができるすべてのドキュメントを読みました* (* このトピックについてまったく明確でなく、サンプルコードもまったくないため、Apple を非難する作業です!)、すべてのドキュメントを見ました。これに関連する WWDC ビデオ (例からコードを正確にコピーするために画面をフリーズすることも...) なので、何かを見逃していない限り、 このリストにない, 、これらの回答のいずれかを返信しても役に立ちません。

もう一つ...私は、ドキュメントによると、アプリケーションセッションを決して使用しない MPMusicPlayerController の使用について明示的に話しています。常にシステムセッションを使用します。(おそらくそれ自体が私の質問の答えになりますが、ドキュメントにはそれが明確に記載されていないため、確信が持てないため、この質問です。)

とはいえ、2日経った私の感想は次のとおりです。

  1. MPMusicPlayerController を使用する場合、どのメソッドを呼び出したり、どの plist エントリを設定したりしても、アプリがバックグラウンドで実行されることはありません。期間。ipodMusicPlayer インスタンスを使用すると、音楽は再生され続けますが、それは再生しているのはアプリではなく iPod であるためです。代わりに applicationMusicPlayer インスタンスを使用すると、バックグラウンドに移行すると音楽が停止します。どちらの場合も、アプリは一時停止されます。

  2. ipodMusicPlayer インスタンスまたは applicationMusicPlayer インスタンスの使用に関係なく、すべてのリモート イベントは、明示的に要求した場合でも、ユーザーのイベントではなく iPod アプリケーション自体に送られます。applicationMusicPlayer インスタンスを使用していて、リモコンを使用して「再生」を選択すると、iPod アプリがコマンドを受信するため、オーディオが途切れて中断され、iPod アプリで再生が始まります。代わりに ipodMusicPlayer を選択した場合は、基本的には iPod アプリをリモートで制御することだけに興味があると明示的に述べているので、もちろん問題ありません。これもまた、実際にリモート イベントを受信するものです。

  3. 下部のクイックスイッチ コントロールのアイコンは、アプリのアイコンに変更されることはありません。これは、アプリが実際にイベントを受信するように設定されていないためです。iPod アプリケーションはそのため、そのアイコンがそこに表示されます。

それで私が知りたいのは...ここで私は間違っていますか?MPMusicPlayerController を使用してリモート イベントを傍受できた人はいますか?ユーザーの iPod をいじらないように、バックグラウンド ミュージックをサポートする applicationMusicPlayer を使用したいと考えていますが、より重要なのはリモート コントロール通知です。つまり、通知を傍受するために ipodMusicControl を使用し、アプリをフォアグラウンドに維持する必要がある場合です。メッセージ、それでいいです。それは醜いですが、少なくともそれは何かです。

コード例、または少なくとも組み込みアプリ テンプレートの 1 つに対する明示的な手順をいただければ幸いです。(実装すら必要ないのですが…手順だけ。これで、人々が質問に答え続ける避けられない「まだ NDA の下にある」という考えが和らげられることを願っています。)

マーク

役に立ちましたか?

解決

解決しました。情報は私の他の質問にあります...

スタックオーバーフロー:リモコンイベントを受信しながらiPodの音楽を再生する

...しかし、簡単に言うと、AVPlayer を使用する必要があります (AVAudioPlayer ではありません)。その理由はわかりません!) ライブラリから取得した MPMediaItem のアセット URL を使用して、オーディオ セッションのカテゴリを Playable に設定し (ミックス可能を有効にしないでください!)、適切なキーを info.plist ファイルに追加して、OS にその旨を伝えます。アプリはバックグラウンドオーディオをサポートしたいと考えています。

これにより、iPod ライブラリ (何らかの理由で Audible.com ファイルを除く) からアイテムを再生しながら、リモート イベントを取得できるようになります。確かに、もっと作業が必要です。また、これは iPod アプリとは別のオーディオ プレーヤーであり、iPod アプリを中断することになります (これは望ましい場合とそうでない場合があります)。繰り返しになりますが、ミキシングを有効にしないでください。有効にしないと、iPod アプリがリモート コントロール イベントをハイジャックします)。しかし、ここで休憩です。

他のヒント

知りたい人のために説明すると、オーディオをバックグラウンドで再生するには、オーディオ セッションのカテゴリを [再生可能] に設定する必要があり、そうすればバックグラウンド オーディオが正常に動作することがわかりました。同時に独自のサウンドも再生したい場合は、カテゴリをミックス可能としてマークする必要があります。これでBGM部分は解決しました。しかし、私が発見したのは、iPod が再生されているときは、リモート通知を受け取ることはできないようです。

更新されたスレッドはこちらです...

アプリでリモート コントロール イベントを受信しながら、iPod アプリから音楽を再生するにはどうすればよいでしょうか?

M

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top