Узнайте, воспроизводится ли MPMoviePlayerController в данный момент

#iphone #ios #objective-c #mpmovieplayercontroller

#iPhone #iOS #objective-c #mpmovieplayercontroller

Вопрос:

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

Комментарии:

1. Код и / или журналы сбоев могли бы помочь.

2. хорошо, позвольте мне изменить вопрос: у меня запущен фильм на симуляторе iPhone, мне нужно найти в другой функции, воспроизводится фильм wheater или нет

Ответ №1:

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

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

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

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

Комментарии:

1. В Swift для доступа к перечислению, упомянутому выше, используйте 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];
  

Ответ №3:

Вы можете проверить playbackState свойство MPMoviePlayerController. Обратитесь по этой ссылке —

http://developer.apple.com/library/ios/#documentation/mediaplayer/reference/MPMoviePlayerController_Class/Reference/Reference.html

Ответ №4:

В swift способ реализации ответа @ ZKV7 таков:

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

где MPMoviePlaybackState находится перечисление:

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

Смотрите документы Apple для получения дополнительной информации о MPMoviePlayerController.

Ответ №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
}