Два AV-плеера в задержке воспроизведения scrollView - PullRequest
0 голосов
/ 25 октября 2011

У меня два AVPlayer, играющих две половины фильма шириной 2048 пикселей.Мне нужно, чтобы они были синхронизированы, потому что есть объекты, движущиеся от одного к другому.Однако я всегда получаю небольшую задержку (я не могу придумать, как измерить эту задержку) между AVPlayers, начинающими играть.Вот код, который я использую.

-(void) addMovieToViewWithTag:(NSInteger)tag{
    NSBundle *bundle = [NSBundle mainBundle];
    NSURL *theMovieLeftURL = nil;
    NSURL *theMovieRightURL = nil;

if (bundle) 
 {
  NSString *movieLeftPath = [bundle pathForResource:@"left_video" ofType:@"mp4"];

  if (movieLeftPath)
  {   
    theMovieLeftURL = [NSURL fileURLWithPath:movieLeftPath];
  }
 }      

if (bundle) 
{
    NSString *movieRightPath = [bundle pathForResource:@"right_video" ofType:@"mp4"];

    if (movieRightPath)
    {   
        theMovieRightURL = [NSURL fileURLWithPath:movieRightPath];
    }
}    

AVPlayer* player = [[AVPlayer alloc]initWithURL:theMovieLeftURL];
AVPlayer* rightPlayer = [[AVPlayer alloc]initWithURL:theMovieRightURL];


AVPlayerLayer* layerLeft = [AVPlayerLayer playerLayerWithPlayer:player];
AVPlayerLayer* layerRight = [AVPlayerLayer playerLayerWithPlayer:rightPlayer];

[layerLeft setFrame:CGRectMake(0, 0, 1024, 768)];
[layerRight setFrame:CGRectMake(0, 0, 1024, 768)];

//layerLeft.frame = [self.scrollView viewWithTag:tag].bounds;
NSInteger ntag = tag+1;

[[self.scrollView viewWithTag:tag].layer addSublayer:layerLeft];
[[self.scrollView viewWithTag:ntag].layer addSublayer:layerRight];


//[self.view.layer addSublayer:layer];
CMTime delay= CMTimeMakeWithSeconds(10, 1);
[rightPlayer play];

    [player play];
[self.scrollView setContentOffset:CGPointMake(1024, 0 ) animated:NO];




self.timeObserver = [player addBoundaryTimeObserverForTimes:[NSArray arrayWithObject:[NSValue valueWithCMTime:delay]]   queue:NULL usingBlock:^{
    [self setTimeObserver:nil];
    [self doAnimatedScrollTo:CGPointMake(0, 0)];


}];

}

Интересно, я что-то не так делаю?Я предполагаю, что есть задержка между RightPlayer и игроком, но я не могу понять, как ее устранить.Я попытался использовать seekToTime: с небольшой задержкой, но действительно трудно найти правильную задержку.Можно ли вообще их играть одновременно?Большое спасибо.

1 Ответ

0 голосов
/ 25 октября 2011

Боюсь, что вы, вероятно, никогда не сможете заставить их точно синхронизироваться. Если вам требуется абсолютная совершенная точность, вам нужно подойти к этому с гораздо более низкого уровня. Класс AVPlayer просто не предназначен для идеальной синхронизации при воспроизведении.

...