objective-c – 使用AVPlayer循环视频片段

objective-c – 使用AVPlayer循环视频片段,第1张

概述我试图循环一段视频,给定两个帧标记(markIn和markOut).当选择循环选项时,播放器将循环播放该视频片段.我目前有一个循环用于整个视频设置使用Apple的建议,一旦到达结束发送AVPlayerItemDidPlayToEndTimeNotification. 我认为实现这一目标的一种简洁方法是在达到markOut点时发送通知,如果激活循环,​​则会将播放器移回markIn点.那么有没有办法 我试图循环一段视频,给定两个帧标记(markIn和markOut).当选择循环选项时,播放器将循环播放该视频片段.我目前有一个循环用于整个视频设置使用Apple的建议,一旦到达结束发送AVPlayerItemDidplayToEndTimeNotification.

我认为实现这一目标的一种简洁方法是在达到markOut点时发送通知,如果激活循环,​​则会将播放器移回markIn点.那么有没有办法按照playerItemDIDReachMarkOut的方式创建通知?

我对通知和AVPlayer相当新,所以请原谅我,如果我错过了什么.

解决方法 您正在寻找的是一个边界时间观察者.你给你的AVPlayer一个CMTimes列表,当玩家的currentTime大约是那些时候的任何时候它会通知你.

它的工作原理如下:

//Use an unretained reference in the block to break the retain cycle of the player retaining the block retaining the player retaining…__unsafe_unretained AVPlayer *weakPlayer = _myPlayer;_myObserver = [_myPlayer addBoundaryTimeObserverForTimes:@[ [NSValue valueWithCMTime:markOutTime] ]    queue:dispatch_get_main_queue()    usingBlock:^{        [weakPlayer seektotime:markInTime            /*optional:            toleranceBefore:kCMTimeZero            toleranceAfter:kCMTimeZero            */            ];    }];

当然,稍后您必须使用removeTimeObserver:告诉AVPlayer停止此观察.你给它从addBoundaryTimeObserver … :::得到的对象.

备注/注意事项/警告

>尽管有这个名字,但它们并不一定是“边界”时代.您可以只有一次,即使不这样做,AVPlayer也不会推断出任何时间是开始时间,结束时间,中点还是其他任何时间.>对于相同的“边界”,可以多次调用相同的块.确保你妥善处理(在我的情况下,我必须确保不要两次显示相同的字幕).>在寻找时不会调用边界时间观察者(同样,在开始和结束的意义上,时间并不真正被解释为“边界”).如果你直接寻找边界时间(或多或少 – 见下一点),你应该得到通知,但是寻找两个边界之间或许多边界之间的点不会引起观察.>我大约说,我的意思是.我多次看到AVPlayer通知的主要情况是AVPlayer稍早通知,然后在(或至少更接近)确切时间再次通知.不要认为currentTime将完全等于您提供的任何时间.

总结

以上是内存溢出为你收集整理的objective-c – 使用AVPlayer循环视频片段全部内容,希望文章能够帮你解决objective-c – 使用AVPlayer循环视频片段所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1018243.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存