rate
- это НЕ способ проверить, воспроизводится ли видео (оно может остановиться).Из документации rate
:
Указывает желаемую скорость воспроизведения;0.0 означает «пауза», 1.0 означает желание играть с естественной скоростью текущего предмета.
Ключевые слова «желание играть» - ставка 1.0
не означаетвидео воспроизводится.
Решение, поскольку в iOS 10.0 используется AVPlayerTimeControlStatus
, которое можно наблюдать в свойстве AVPlayer
timeControlStatus
.
Решение, предшествующее iOS 10.0 (9.0, 8.0 и т. Д.), Заключается в создании собственного решения. Скорость 0.0
означает, что видео приостановлено.Когда rate != 0.0
означает, что видео воспроизводится или остановлено.
Вы можете узнать разницу, наблюдая за временем игрока с помощью: func addPeriodicTimeObserver(forInterval interval: CMTime, queue: DispatchQueue?, using block: @escaping (CMTime) -> Void) -> Any
Блок возвращает текущее время игрока в CMTime
, поэтому сравнение lastTime
(время, которое последний раз было получено из блока) и currentTime
(время, которое блок только что сообщил) покажет, является ли игрокиграет или застопорился.Например, если lastTime == currentTime
и rate != 0.0
, то проигрыватель остановился.
Как отмечали другие, выяснение того, закончилось ли воспроизведение, обозначается AVPlayerItemDidPlayToEndTimeNotification
.