首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重新加载AVMutableComposition

重新加载AVMutableComposition
EN

Stack Overflow用户
提问于 2012-01-25 05:38:15
回答 2查看 2.3K关注 0票数 5

我有一个与AVPlayer关联的AVMutableComposition。似乎如果我将曲目添加到这个乐曲中,AVPlayer不会播放添加的曲目,除非我在播放器上再次设置乐曲。现在,我只需用已经设置的相同构图替换当前项。在此之后,它会拾取新的曲目。

我还不能确定这是否是正确的方法,但这样做似乎有点奇怪。

有什么想法吗?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-29 19:23:46

基本上,虽然它是可变的组合,但苹果建议创建一个不可变的组合,并创建用于回放的AVPlayerItem。这有点烦人,但你可以绕过它。当你想刷新视频时,只需采样时间,创建另一个AVPlayerItem并将其加载到正确的时间。

下面是来自apple的AVMutableComposition文档的代码片段

AVMutableComposition是要从现有资源创建新合成时使用的AVComposition的可变子类。可以添加和移除轨迹,还可以添加、移除和缩放时间范围。

您可以制作可变组合的不可变快照,用于回放或检查,如下所示:

代码语言:javascript
复制
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];

更多信息:Full Document

票数 5
EN

Stack Overflow用户

发布于 2019-10-10 16:40:56

如果只是从与playerItem关联的可变组合中移除一个曲目,则可以使用完成处理程序将AVPlayer对象上的seeking方法调用到当前时间,以强制播放器清除加载的缓冲区。

代码语言:javascript
复制
// refresh player
player.seek(to: playerItem.currentTime()) { _ in }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8994560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档