在AVFoundation中是否有相对简单的循环视频的方法?
我已经如下创建了我的AVPlayer和AVPlayerLayer:
avPlayer = [[AVPlayer playerWithURL:videoUrl] retain]; avPlayerLayer = [[AVPlayerLayer playerLayerWithPlayer:avPlayer] retain]; avPlayerLayer.frame = contentView.layer.bounds; [contentView.layer addSublayer: avPlayerLayer];
然后播放以下视频:
[avPlayer play];
视频播放正常,但在最后停止。使用MPMoviePlayerController,您所要做的就是将其repeatMode属性设置为正确的值。在AVPlayer上似乎没有类似的属性。似乎也没有回调可以告诉我电影何时结束,因此我可以寻找开始并再次播放。
repeatMode
我没有使用MPMoviePlayerController,因为它有一些严重的限制。我希望能够一次播放多个视频流。
播放器结束时,您会收到通知。检查一下AVPlayerItemDidPlayToEndTimeNotification
AVPlayerItemDidPlayToEndTimeNotification
设置播放器时:
对象
avPlayer.actionAtItemEnd = AVPlayerActionAtItemEndNone; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playerItemDidReachEnd:) name:AVPlayerItemDidPlayToEndTimeNotification object:[avPlayer currentItem]];
这样可以防止播放器在结尾处暂停。
在通知中:
- (void)playerItemDidReachEnd:(NSNotification *)notification { AVPlayerItem *p = [notification object]; [p seekToTime:kCMTimeZero]; }
这将倒带电影。
释放播放器时,请不要忘记取消注销通知。
迅速
avPlayer?.actionAtItemEnd = .none NotificationCenter.default.addObserver(self, selector: #selector(playerItemDidReachEnd(notification:)), name: .AVPlayerItemDidPlayToEndTime, object: avPlayer?.currentItem) @objc func playerItemDidReachEnd(notification: Notification) { if let playerItem = notification.object as? AVPlayerItem { playerItem.seek(to: kCMTimeZero) } }
迅捷4+
@objc func playerItemDidReachEnd(notification: Notification) { if let playerItem = notification.object as? AVPlayerItem { playerItem.seek(to: CMTime.zero, completionHandler: nil) } }