6

AVPlayerに関連付けたAVMutableCompositionがあります。このコンポジションにトラックを追加すると、プレーヤーでコンポジションを再度設定しない限り、AVPlayerは追加されたトラックを再生しないようです。今、私は現在のアイテムをすでに設定されている同じ構成に置き換えるだけでこれを行っています。その後、新しいトラックをピックアップします。

これが正しいやり方かどうかはわかりませんが、どういうわけか、そのようにしなければならないのは少し奇妙に思えます。

何か案は?

ありがとう

4

2 に答える 2

6

基本的には可変コンポジションですが、アップルは不変コンポジションを作成し、再生用にAVPlayerItemを作成することをお勧めします。少し面倒ですが、回避できます。ビデオを更新したい場合は、時間をサンプリングし、別のAVPlayerItemを作成して、適切な時間にロードします。

これがアップルのAVMutableCompositionドキュメントからの抜粋です

AVMutableCompositionは、既存のアセットから新しいコンポジションを作成するときに使用するAVCompositionの可変サブクラスです。トラックを追加および削除したり、時間範囲を追加、削除、およびスケーリングしたりできます。

次のようにして、再生または検査のために可変コンポジションの不変スナップショットを作成できます。

AVMutableComposition *myMutableComposition =
    <#a mutable composition you want to inspect or play in its current state#>;

AVComposition *immutableSnapshotOfMyComposition = [myMutableComposition copy];

// Create a player to inspect and play the composition.
AVPlayerItem *playerItemForSnapshottedComposition =
    [[AVPlayerItem alloc] initWithAsset:immutableSnapshotOfMyComposition];

詳細情報:完全なドキュメント

于 2012-01-29T11:23:46.213 に答える
2

playerItemに関連付けられている可変コンポジションからトラックを削除するだけの場合は、完了ハンドラーを使用してAVPlayerオブジェクトのシークメソッドを現在の時刻に呼び出し、プレーヤーにロードされたバッファーを強制的にクリアさせることができます。

// refresh player
player.seek(to: playerItem.currentTime()) { _ in }
于 2019-10-10T08:40:56.253 に答える