Остановите AVPlayer и перезапустите mp3 файл снова

Я хочу запустить, приостановить и остановить (так же, как перезапустить) мой mp3-файл, и я использую AVPlayer. Я получаю файлы с сервера.

Чтобы начать песню я делаю:

[self.player start];

Чтобы сделать паузу, я делаю:

[self.player pause];

но когда я хочу остановить песню и перезагрузить ее, чтобы песня начиналась с начала, когда пользователь в следующий раз нажимает на кнопку "пуск", я понятия не имею, что делать...

я попробовал что-то вроде этого:

[self.player pause];
self.player = nil;

Но тогда, конечно, проигрыватель равен нулю, и я не могу перезапустить файл снова без новой инициализации.... есть идеи, как это остановить?

4 ответа

Решение

Остановить видео с помощью [player pause]

Затем используйте этот код при запуске видео.

[player seekToTime:kCMTimeZero];
[player play];

Мне нравится это лучше, чем комментарий, который решил OP, потому что он устраняет предупреждение и использует константу.

Лучшее решение для этого в Swift < 4:

player.seek(to: kCMTimeZero)
player.play()

Свифт>= 4:

player.seek(to: .zero)
player.play()
  • В Xamarin.ios

player.Seek (CoreMedia.CMTime.Zero);

player.Play ();

seek#to имеет обработчик завершения.

p?.seek(to: .zero)
p?.rate = 1

не совсем правильно. Вы можете получить джиттер звука.

p?.seek(to: .zero) { [weak self] _ in
    self?.p?.rate = 1
}

это, вероятно, то, что вы хотите.

Если он уже воспроизводится, и вы просто выполняете поиск и ничего больше, вы снова можете получить дрожь.

Вам, вероятно, лучше всего

p?.rate = 0
p?.seek(to: .zero) { [weak self] _ in
    self?.p?.rate = 1
}

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

В Swift 4: self.player.seek(to: CMTime.zero)

// If conti. play Video or audio apply this code



 [[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(playerItemDidReachEnd
                                                 :)
                                             name:AVPlayerItemDidPlayToEndTimeNotification
                                           object:[avPlayer currentItem]];
[avPlayer play];




 - (void)playerItemDidReachEnd:(NSNotification *)notification
{

NSLog(@"Replay video in method");
AVPlayerItem *p = [notification object];
[p seekToTime:kCMTimeZero];
  }
Другие вопросы по тегам