如何在播放同一个本地视频时同步多个 AVPlayer

How to sync multiple AVPlayer while play the same local video

我必须同时使用AVPlayer播放同一个本地视频文件,我创建了4个AVPlayer实例,并将AVPlayerLayers添加到同一层。但问题是 4 名球员不是同时开始的。如何让他们同时开始?这是我的代码:

self.players = @[].mutableCopy;
    CMAudioClockCreate(kCFAllocatorDefault, &_syncClock);
    AVPlayerItem *item = [[AVPlayerItem alloc] initWithURL:self.url];
    for (NSInteger i = 0; i<playerNum; i++) {
        AVPlayer *avPlayer = [AVPlayer playerWithPlayerItem:item.copy];
        AVPlayerLayer *playerLayer = [AVPlayerLayer playerLayerWithPlayer:avPlayer];
        //设置模式
        playerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
        playerLayer.contentsScale = [UIScreen mainScreen].scale;
        CGPoint pos = [playerOriginArr[i] CGPointValue];
        playerLayer.frame = CGRectMake(pos.x, pos.y, playerSize.width, playerSize.height);
        [self.playBackBgView.layer addSublayer:playerLayer];
        avPlayer.masterClock = _syncClock;
        [avPlayer.currentItem addObserver:self forKeyPath:@"status" options:NSKeyValueObservingOptionNew context:nil];
        [avPlayer play];
        [self.players addObject:avPlayer];
    }

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object
                    change:(NSDictionary *)change context:(void *)context {
if ([keyPath isEqualToString:@"status"] && [object isKindOfClass:[AVPlayerItem class]]) {
    AVPlayerItem *playerItem = (AVPlayerItem *)object;
    if (playerItem.status == AVPlayerStatusReadyToPlay) {
        for (AVPlayer *player in self.players) {
            if (player.currentItem == playerItem) {
                [player prerollAtRate:1.0 completionHandler:^(BOOL finished) {
                    if (finished) {
                    }
                }];
                player.automaticallyWaitsToMinimizeStalling = NO;//如果是
                NSLog(@"setRate");
                [player setRate:1.0 time:kCMTimeInvalid atHostTime:CMClockGetTime(_syncClock)];
            }
        }
    }
}

}

仅创建一个 AVPlayer 并从中创建多个 AVPlayerLayer

图层将同步。