116 votes

Vérifier l'état de lecture de AVPlayer

Existe-t-il un moyen de savoir si un AVPlayer jeu a stagné ou atteint la fin?

351voto

maz Points 1766

Vous pouvez dire qu'il joue en utilisant:

if ([AVPlayer rate] != 0.0)

59voto

Todd Hopkinson Points 4084

Pour obtenir de notification pour atteindre la fin d'un article (par Apple):

[[NSNotificationCenter defaultCenter] 
      addObserver:<self>
      selector:@selector(<#The selector name#>)
      name:AVPlayerItemDidPlayToEndTimeNotification 
      object:<#A player item#>];

Et pour suivre la lecture, vous pouvez:

"suivre les changements dans la position de la tête de lecture dans un AVPlayer objet" en utilisant addPeriodicTimeObserverForInterval:file d'attente:usingBlock: ou addBoundaryTimeObserverForTimes:file d'attente:usingBlock:.

Exemple d'Apple:

// Assume a property: @property (retain) id playerObserver;

Float64 durationSeconds = CMTimeGetSeconds([<#An asset#> duration]);
CMTime firstThird = CMTimeMakeWithSeconds(durationSeconds/3.0, 1);
CMTime secondThird = CMTimeMakeWithSeconds(durationSeconds*2.0/3.0, 1);
NSArray *times = [NSArray arrayWithObjects:[NSValue valueWithCMTime:firstThird], [NSValue valueWithCMTime:secondThird], nil];

self.playerObserver = [<#A player#> addBoundaryTimeObserverForTimes:times queue:NULL usingBlock:^{
    // Passing NULL for the queue specifies the main queue.

    NSString *timeDescription = (NSString *)CMTimeCopyDescription(NULL, [self.player currentTime]);
    NSLog(@"Passed a boundary at %@", timeDescription);
    [timeDescription release];
}];

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X