Узнайте, играет ли сейчас MPMoviePlayerController

У меня есть одна небольшая проблема с MPMoviePlayerController, у меня есть ссылка, которая воспроизводит фильм, когда я нажимаю на эту кнопку, однако, когда я нажимаю на другую кнопку, приложение терпит крах, мне нужно найти, как определить, что фильм играет или получение какого-либо ответа

Ответ 1

Чтобы расширить ответ на @Saurabh, вы можете проверить, воспроизводится ли видео с помощью

if(player.playbackState == MPMoviePlaybackStatePlaying)
{
// is Playing
}

где MPMoviePlaybackState определяется как

enum {
   MPMoviePlaybackStateStopped,
   MPMoviePlaybackStatePlaying,
   MPMoviePlaybackStatePaused,
   MPMoviePlaybackStateInterrupted,
   MPMoviePlaybackStateSeekingForward,
   MPMoviePlaybackStateSeekingBackward
};
typedef NSInteger MPMoviePlaybackState;

Ответ 2

Есть две части, обычно используемые в комбинации;

Зарегистрировать для MPMoviePlayerPlaybackStateDidChangeNotification например. например:

[[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(MPMoviePlayerPlaybackStateDidChange:) 
                                                 name:MPMoviePlayerPlaybackStateDidChangeNotification 
                                               object:nil];

Внутри обработчика уведомлений вы можете затем подробно проверить фактическое состояние - например, например:

- (void)MPMoviePlayerPlaybackStateDidChange:(NSNotification *)notification
{
  //are we currently playing?
  if (movieController_.playbackState == MPMoviePlaybackStatePlaying)
  { //yes->do something as we are playing...
  }
  else 
  { //nope->do something else since we are not playing
  }
}

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

При удалении/убийстве воспроизведения фильма не забудьте удалить обработчик уведомлений, например. например:

[[NSNotificationCenter defaultCenter] removeObserver:self 
                                                name:MPMoviePlayerPlaybackDidFinishNotification
                                              object:nil];

Ответ 4

В быстром способе реализовать ответ @ZKV7:

if(player.playbackState == MPMoviePlaybackState.Playing)
{
  // is Playing
}

где перечисление MPMoviePlaybackState:

enum MPMoviePlaybackState : Int {
   case Stopped
   case Playing
   case Paused
   case Interrupted
   case SeekingForward
   case SeekingBackward
}

Подробнее о MPMoviePlayerController см. apple docs.

Ответ 5

, чтобы проверить, что видеопроигрыватель находится в состоянии воспроизведения или нет в SWIFT

@IBAction func btnPressPlay(sender: AnyObject) {
        if videoPlayerViewController.moviePlayer.playbackState == MPMoviePlaybackState.Playing
        {
            self.videoPlayerViewController.moviePlayer.stop()
        }
        else {
            self.videoPlayerViewController.moviePlayer.play()
        }
    }

Ответ 6

typedef NS_ENUM(NSInteger, AVPlayerTimeControlStatus) {
    AVPlayerTimeControlStatusPaused,
    AVPlayerTimeControlStatusWaitingToPlayAtSpecifiedRate,
    AVPlayerTimeControlStatusPlaying
} NS_ENUM_AVAILABLE(10_12, 10_0);


if(self.player.timeControlStatus == AVPlayerTimeControlStatusPlaying)
{
  // is Playing
}