Стоит ли останавливать текущий экземпляр AVPlayer при воспроизведении музыки с другого URL? - PullRequest
2 голосов
/ 13 января 2012

Я только что создал AVPlayer, и он хорошо играет музыку. У меня два вопроса

  1. Как воспроизвести другую музыку с другого URL (следует ли остановить текущий проигрыватель?)
  2. Как показать текущее время песни в UISlider (на самом деле это метод, который вызывается во время воспроизведения песни?)

Ответы [ 2 ]

6 голосов
/ 13 января 2012

Используйте -[AVPlayer replaceCurrentItemWithPlayerItem] для замены текущего элемента воспроизведения, повторно используя экземпляр игрока.Вы можете создать элемент с URL-адресом или с активом.

Чтобы узнать, когда заканчивается воспроизведение данного элемента, используйте уведомление AVPlayerItemDidPlayToEndTimeNotification.

. Используйте -[AVPlayer addPeriodicTimeObserverForInterval] для выполнения некоторых действийпериодически, пока игрок играет.Смотрите этот пример:

[self.player addPeriodicTimeObserverForInterval:CMTimeMakeWithSeconds(0.1, 100) 
                                          queue:nil 
                                     usingBlock:^(CMTime time) { 
                                     <# your code will be called each 1/10th second #> 
 }];
3 голосов
/ 13 января 2012

1) Если вы использовали - (id) initWithURL: (NSURL *) URL, тогда вы должны остановить игрока с помощью pause, освободить его и создать новый экземпляр.

    AVPlayer *player = [AVPlayer alloc] initWithURL:[NSURL URLWithString:@"http:/someurl.com"]];
    [player play];
    [player pause];
    [player release];

    player = [AVPlayer alloc] initWithURL:[NSURL URLWithString:@"http:/someurl2.com"]];
    [player pause];
    [player release];

Если вы использовали playerWithURL, просто снова вызовите ту же линию.

2).Самым простым является получение длительности текущего элемента https://stackoverflow.com/a/3999238/619434, а затем обновление UISlider с этим значением.Вы можете использовать NSTimer для периодической проверки продолжительности.

      self.player.currentItem.asset.duration
...