MPMoviePlayerController воспроизводится после отмены в 3.1.2 - PullRequest
2 голосов
/ 12 апреля 2011

Я столкнулся с проблемой с MPMoviePlayerController в 3.1.2.

Если я отменяю игрока , пока все еще загружается, проигрыватель закрывается.Тем не менее, видео начинает воспроизводиться через несколько секунд в фоновом режиме.Единственный способ остановить это - воспроизвести другое видео или закрыть приложение.Похоже, что это хорошо работает в 3.2 +.

Вот что я делаю:

- (void)loadMoviePlayer
{
    // Register to receive a notification when the movie has finished playing. 
    [[NSNotificationCenter defaultCenter] addObserver:self 
                                             selector:@selector(moviePlayBackDidFinish:) 
                                                 name:MPMoviePlayerPlaybackDidFinishNotification 
                                               object:nil];

    if ([NSClassFromString(@"MPMoviePlayerController") instancesRespondToSelector:@selector(view)])
    {

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 30200
        // running iOS 3.2 or better
        MPMoviePlayerViewController *moviePlayer = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:@"http://www.mysite.com/myvideo.m3u8"]];
        [moviePlayer.view setBackgroundColor:[UIColor blackColor]];
        [moviePlayer.moviePlayer setControlStyle:MPMovieControlStyleFullscreen];
        //      [moviePlayer.moviePlayer setControlStyle:MPMovieControlStyleNone];
        [self presentMoviePlayerViewControllerAnimated:moviePlayer];
        [moviePlayer.moviePlayer prepareToPlay];    
        [moviePlayer.moviePlayer play]; 
#endif
    }
    else 
    {
        MPMoviePlayerController *mMPPlayer = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL URLWithString:@"http://www.mysite.com/myvideo.m3u8"]];
        mMPPlayer.scalingMode=MPMovieScalingModeFill;
        mMPPlayer.backgroundColor=[UIColor blackColor];
        [mMPPlayer play];
    } 

}

- (void) moviePlayBackDidFinish:(NSNotification*)notification 
{    
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackOpaque];
    [[UIApplication sharedApplication] setStatusBarHidden:NO];

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

    [self dismissModalViewControllerAnimated:YES];
}

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

Итак, как я могу убедиться, что проигрыватель не играет после нажатия кнопки «Отмена»?

Заранее спасибо.

Ответы [ 2 ]

5 голосов
/ 12 апреля 2011

Возможно, вы столкнулись со старой ошибкой в ​​MPMoviePlayerController. Когда-то нам приходилось играть почти пустой (черный, тишина) M4V после воспроизведения правильного контента, чтобы убедиться, что проигрыватель не пытается продолжить воспроизведение в фоновом режиме при остановке на определенных этапах. Эта ошибка проявляется в слышимом звуке, но нет изображения прерванного / остановленного видео.

Однако есть несколько вещей, которые стоит попробовать при остановке (при условии, что ваш экземпляр MPMoviePlayerController называется moviePlayer);

  • установить текущую позицию воспроизведения на полную продолжительность фильма moviePlayer.currentPlaybackTime = moviePlayer.duration;
  • отправить еще одну остановку в вашем обработчике уведомлений [moviePlayer stop];
4 голосов
/ 15 января 2013

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

moviePlayer.contentURL = nil;

(с moviePlayer ваш экземпляр MPMoviePlayerController).

...