4

AVPlayerアプリがバックグラウンドモードのときにiOSがアイドリングしているため、ギャップのない再生を実現しようとしています。

答える前に、はい、私はplistを変更し、オーディオセッションを適切に設定し、すべてがうまくてダンディですが、私の質問は本質的に異なっていると思います。

そのため、最初は、トラックのURLが変更されるたびに新しいAVPlayerを初期化するメソッドがクラスにありましたが、それはうまくいきましたが、バックグラウンドではそれほどうまくいきませんでしたが、AVPlayer毎回新しいインスタンスを作成することはできませんでした。 replaceCurrentItemWithPlayerItemAVPlayerインスタンスを存続させるなど、他のいくつかのパラダイム、またはAVQueuePlayer

私が直面している問題は、iOS 6では、オーディオが停止した瞬間に、一方のトラックが終了し、もう一方のトラックをロードする必要があるため、iPhoneがアプリをバックグラウンドでフリーズすることです。アプリを再びフォアグラウンドにすると、再生は正常に再開されます。

私は連続ストリームを持っていませんが、ストリーミングを開始するためにヒットする個々のURLを持っていないので、アプリをバックグラウンドでフリーズするために最小限のオーディオ中断をさせないように、戦略を使用することについて考えましAVPlayerQueueた。insertItem:nextadvanceToNextItem

ただし、オンデマンドでキューに新しいトラックを追加する必要があり、iOSがバッファリングするまでに、アプリを停止する価値があるとすでに判断しているため、問題は残ります。そのため、アプリのライフサイクルで適切な時間を必要としますinsertItem

次に、このKVO通知を聴こうとしていました。

[self.player.currentItem addObserver:self forKeyPath:@"playbackBufferFull" options:0 context:MyPlayerItemContext];

しかし、それは決して呼ばれません。アイデアは、currentItemのバッファがいっぱいになったことを追跡し、プレイリストに次のバッファを追加して、AVQueuePlayerそれをプリバッファリングしようとするようにすることでした。

別のアイデアが呼び出されることはないのでplaybackBufferFull、現在の時間/期間を取得しようとすることです。再生の90%がどこにあるかを計算し、適切な時間にイベントを発生させて、次のトラックのバッファリングを開始します。

オブジェクトの期間プロパティがプログレッシブ受信データに基づいて変更される可能性があることを考えると、それは悪い音ですか?

他にどのような戦略を取ることができますか?

ありがとう。

4

1 に答える 1

-1

AVQueuePlayerとの組み合わせで解決しましたAVPlayerActionAtItemEndAdvance

トリッキーですが、機能します。

于 2013-01-02T07:38:01.607 に答える