【问题标题】:Reloading AVMutableComposition重新加载 AVMutableComposition
【发布时间】:2012-02-18 03:44:24
【问题描述】:

我有一个与 AVPlayer 关联的 AVMutableComposition。 似乎如果我将曲目添加到此合成中,除非我再次在播放器上设置合成,否则 AVPlayer 不会播放添加的曲目。现在,我只需将当前项目替换为已设置的相同组合即可。之后,它会拾取新曲目。

我一直无法弄清楚这是否是正确的做法,这样做似乎有点奇怪。

有什么想法吗?

谢谢

【问题讨论】:

    标签: iphone objective-c ios avfoundation avcomposition


    【解决方案1】:

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

    这是苹果 AVMutableComposition 文档中的 sn-p

    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];
    

    更多信息:Full Document

    【讨论】:

    • 感谢您的回复,这基本上就是我现在正在做的事情,但这证明了这是这样做的方式。
    【解决方案2】:

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

    // refresh player
    player.seek(to: playerItem.currentTime()) { _ in }
    

    【讨论】:

      猜你喜欢
      • 2012-06-15
      • 1970-01-01
      • 2012-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-05
      相关资源
      最近更新 更多