Остановите 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
}
Если это действительно важное приложение, вам также придется учитывать состояние ошибки при завершении поиска.
// 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];
}