gpt4 book ai didi

iphone - 使用 AVPlayer 循环播放一小段视频,然后向后播放

转载 作者:行者123 更新时间:2023-11-29 13:35:17 27 4
gpt4 key购买 nike

在我的应用程序中,我有一个 AVPlayer 用于播放、删除等视频文件。我正在尝试实现以下功能,但还没有想出一个好的解决方案......

假设视频文件长 3000 帧,播放头位于第 1000 帧。当用户按下“播放”按钮时,我希望视频以第 1000 帧为中心播放视频的 10 帧部分,即,帧 995-1005。当播放器到达第 995 帧或第 1005 帧时,我希望播放反转。换句话说,帧顺序将是:

1000-1001-1002-1003-1004-1005-1004-1003-1002-1001-1000-999-998-997-996-995-996-997-998-999-1000

并无限期地重复。

我首先尝试使用 -addBoundaryTimeObserverForTimes:queue:usingBlock: 来定义视频部分的起点和终点,并在 block 中切换播放器速率的符号。这有时有效,但当视频部分较小时,最终会“错过”其中一个边界,视频只会继续朝该方向播放,直到到达文件的开头或结尾。

我试图通过使用 –addPeriodicTimeObserverForInterval:queue:usingBlock: 添加另一个时间观察器来缓解这种情况,它会检查是否错过了边界并在错过时重置循环播放。同样,这有时有效,但如果播放区域的开始或结束也恰好是视频文件的第一帧或最后一帧(分别),则会失败。

然后尝试为 AVPlayerItemDidPlayToEndTimeNotification 设置回调,以便在它到达视频文件的边界时再次重置播放。再一次,这有时有效,但最终会停止播放或导致播放在远离文件末尾的方向无限期播放。

我在这里不知所措。我可能会创建一个 AVMutableComposition 来模拟效果,但是还有很多其他对象取决于视频播放器的确切时间,需要对应用程序进行大修才能实现整个单独的处理系统,用于从合成中模拟适当的视频播放器时间(此时我不太愿意这样做)。有什么想法吗?

最佳答案

我想在你的情况下我会做的是选择你的第二个选项:

使用 addPeriodicTimeObserverForInterval:queue:usingBlock,但要缓解您描述的问题,请在剪辑的前面和结尾添加一秒钟的空白视频(如果您可以控制剪辑资源)——或者在源.

如果你不能这样做,我认为查看 AVMutableComposition 可能是有意义的(在合成的前面和后面添加一个空剪辑),然后像你指示的那样再次使用 addPeriodicTimeObserverForInterval:queue:usingBlock。

关于iphone - 使用 AVPlayer 循环播放一小段视频,然后向后播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10726469/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com