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 对象上的 seek 方法到当前时间,以强制播放器清除加载的缓冲区。

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