4

アプリ内で2 つの異なるAVQueuePlayerオブジェクトを使用しようとしています。最初のプレーヤーは、ネット上でストリーミングされた一連の短いビデオ クリップを再生します。2 番目のオブジェクトはビデオを 1 つだけ再生しますが、長さがはるかに長くなります。ストリーミングもされています。すべてのクリップが適切にオーディオ/ビデオ同期されていることを確認しました。

私が気付いたのは、AVPlayer事前に別のオブジェクトを作成した後で 1 つのオブジェクトを作成すると、2 番目のプレーヤーのオーディオ/ビデオ同期が失われることです。音声が約 800ms から 1500ms の間で再生されるのが早すぎます。

AudioSession最初のプレーヤーのクリーンアップと 2 番目のプレーヤーの割り当ての間に遅延を追加する、コードへのすべての呼び出しを削除するなど、さまざまなことを試しましたが、どれも役に立たないようです。音声が同期することは非常にまれですが、実際には 30 回に 1 回程度しか発生しません。

他の誰かが同じ動作を見たことがありますか? これを修正する方法を知っている人はいますか?

助けてくれる人に感謝します!

4

1 に答える 1

3

私自身も同じ問題に直面しています。AVPlayerLayer のドキュメントでいくつかの情報を見つけました。

再生中、AVPlayer は、関連付けられているプレーヤー レイヤーのタイミングを調整することにより、1 つまたは複数の個別にクロックされたオーディオ出力デバイスへのビジュアル出力とオーディオ出力の間の一時的なずれを補正する場合があります。これらの調整の影響は通常非常に小さいです。ただし、そのような調整による影響をまったく受けないようにしたいクライアントは、タイミングが重要な他のレイヤーをレイヤー ツリーの独立したタイミングのサブツリーに配置することを希望する場合があります。

同じ AVPlayer オブジェクトを使用して、任意の数のプレーヤー レイヤーを作成できます。最後に作成されたプレーヤー レイヤーだけが実際にビデオ コンテンツを画面に表示します。

残念ながら、これを実際のコードに解読することはできませんでしたが、正しい方向に導くのに役立つかもしれないと考えました. 解決策を思いついた場合は、ここに投稿してください。私も同じことをします。

于 2011-04-01T13:47:03.870 に答える