tim*_*son 6 cocoa objective-c avfoundation nsnotificationcenter avplayer
我试图循环一段视频,给定两个帧标记(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
*/
];
}
];
Run Code Online (Sandbox Code Playgroud)
当然,稍后您必须使用removeTimeObserver:告诉AVPlayer停止此观察.你给它你得到的对象addBoundaryTimeObserver…:::.
currentTime与您提供的任何时间完全相同.| 归档时间: |
|
| 查看次数: |
2439 次 |
| 最近记录: |