我有一个与 AVPlayer 关联的 AVMutableComposition。似乎如果我将曲目添加到此合成中,除非我再次在播放器上设置合成,否则 AVPlayer 不会播放添加的曲目。现在,我只需将当前项目替换为已设置的相同组合即可。之后,它会拾取新曲目。
我一直无法弄清楚这是否是正确的做法,这样做似乎有点奇怪。
有任何想法吗?
谢谢
我有一个与 AVPlayer 关联的 AVMutableComposition。似乎如果我将曲目添加到此合成中,除非我再次在播放器上设置合成,否则 AVPlayer 不会播放添加的曲目。现在,我只需将当前项目替换为已设置的相同组合即可。之后,它会拾取新曲目。
我一直无法弄清楚这是否是正确的做法,这样做似乎有点奇怪。
有任何想法吗?
谢谢
基本上虽然它是可变组合,但苹果建议创建一个不可变组合并创建 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];
更多信息:完整文档
如果您只是从与 playerItem 关联的可变组合中删除轨道,则可以使用完成处理程序调用 AVPlayer 对象上的 seek 方法到当前时间,以强制播放器清除加载的缓冲区。
// refresh player
player.seek(to: playerItem.currentTime()) { _ in }