1

する必要がある:

  • 音を出す
  • ループ
  • バックグラウンドで再生を続ける

ですべて正常に動作しますが、iPodライブラリの音楽曲も再生AVAudioPlayerするために使用する必要があります。AVPlayerしかし、大きな問題があります。AVPlayerにはのnumberOfLoopsようなプロパティがありませんAVAudioPlayer

さて、あなたはNSNotificationCenterforに通知を登録することができAVPlayerItemDidPlayToEndTimeNotificationます(またはaddBoundaryTimeObserverForTimes、曲の長さに等しい指定された時間でメソッドを使用することもできます)、曲が最後まで再生されたときに通知されます。ただし、これはアプリがフォアグラウンドにあり、バックグラウンドで曲が再生され続けている場合にのみ機能しますが、最後に停止します。

通知はバックグラウンドでも受信されます(NSLogでチェックされます)が、セレクターのコードは次のとおりです。

AVPlayerItem *playerItem = [notification object];  
[playerItem seekToTime:kCMTimeZero];

...効果はありません。曲はループしません。

助言がありますか?

4

2 に答える 2

3

あなたが抱えている問題は、アプリがオーディオの再生を完了したように見えるために、プレーヤーが2番目にシークタイムを実行することです。そのため、アプリは焚き火に投げ込まれます。:)

私はこの回避策を作成するのに何日も費やしました:

  1. info.plistの「必要なバックグラウンドモード」に「アプリがオーディオを再生します」を追加します

  2. 1秒のmp3ファイルを0.00000001fレート(silentMp3Player.rate = 0.000000001f)で再生する別のAVplayerを作成します。これは、アプリがバックグラウンドに入ると開始し、フォアグラウンドに再び入ると停止します。

于 2011-12-18T21:40:28.157 に答える
0

このコードを追加してみてください:

try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
try AVAudioSession.sharedInstance().setActive(true)
于 2018-07-24T08:30:45.433 に答える