在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上似乎没有类似的属性。似乎也没有回调来告诉我电影什么时候结束,这样我就可以从头开始再放一遍。
我没有使用MPMoviePlayerController,因为它有一些严重的限制。我希望能够一次播放多个视频流。
发布于 2020-06-27 00:12:27
Swift 5:
我对前面的答案做了一些细微的调整,比如在将playerItem添加到playerLayer之前将它添加到队列中。
let playerItem = AVPlayerItem(url: url)
let player = AVQueuePlayer(playerItem: playerItem)
let playerLayer = AVPlayerLayer(player: player)
playerLooper = AVPlayerLooper(player: player, templateItem: playerItem)
playerLayer.frame = cell.eventImage.bounds
playerLayer.videoGravity = AVLayerVideoGravity.resizeAspectFill
// Add the playerLayer to a UIView.layer
player.play()并将playerLooper设置为您的UIViewController的属性,否则视频可能只播放一次。
发布于 2014-04-04 01:35:17
我建议使用AVQueuePlayer来无缝地循环您的视频。添加通知观察者
AVPlayerItemDidPlayToEndTimeNotification在其选择器中,循环播放您的视频
AVPlayerItem *video = [[AVPlayerItem alloc] initWithURL:videoURL];
[self.player insertItem:video afterItem:nil];
[self.player play];发布于 2017-08-22 20:15:22
我在objective-c和AVQueuePlayer中的解决方案-似乎你必须复制AVPlayerItem,并在完成第一个元素的回放后立即添加另一个副本。“某种”是有意义的,对我来说没有任何问题。
NSURL *videoLoopUrl;
// as [[NSBundle mainBundle] URLForResource:@"assets/yourVideo" withExtension:@"mp4"]];
AVQueuePlayer *_loopVideoPlayer;
+(void) nextVideoInstance:(NSNotification*)notif
{
AVPlayerItem *currItem = [AVPlayerItem playerItemWithURL: videoLoopUrl];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(nextVideoInstance:)
name:AVPlayerItemDidPlayToEndTimeNotification
object: currItem];
[_loopVideoPlayer insertItem:currItem afterItem:nil];
[_loopVideoPlayer advanceToNextItem];
}
+(void) initVideoPlayer {
videoCopy1 = [AVPlayerItem playerItemWithURL: videoLoopUrl];
videoCopy2 = [AVPlayerItem playerItemWithURL: videoLoopUrl];
NSArray <AVPlayerItem *> *dummyArray = [NSArray arrayWithObjects: videoCopy1, videoCopy2, nil];
_loopVideoPlayer = [AVQueuePlayer queuePlayerWithItems: dummyArray];
[[NSNotificationCenter defaultCenter] addObserver: self
selector: @selector(nextVideoInstance:)
name: AVPlayerItemDidPlayToEndTimeNotification
object: videoCopy1];
[[NSNotificationCenter defaultCenter] addObserver: self
selector: @selector(nextVideoInstance:)
name: AVPlayerItemDidPlayToEndTimeNotification
object: videoCopy2];
}https://gist.github.com/neonm3/06c3b5c911fdd3ca7c7800dccf7202ad
https://stackoverflow.com/questions/5361145
复制相似问题