iOS Media Framework - PullRequest
       3

iOS Media Framework

0 голосов
/ 20 декабря 2011

Я внедряю видео в приложение для iPad, и оно отлично работает.Но проблема, с которой я сталкиваюсь, заключается в том, что, когда я покидаю вид, чтобы перемещаться куда-то еще, видео аудио продолжает воспроизводиться в фоновом режиме.Есть ли способ полностью остановить видео и удалить его из представления перед закрытием представления?

Я пытался:

[moviePlayerController stop];- Но это, похоже, не останавливает фильм, а просто вылетает из приложения.

[moviePlayerController.view removeFromSuperview];- Это удаляет видео из вида, но не останавливает звук.

Это то, что у меня есть для кода:

- (IBAction)PlayMediaButton:(id)sender
{   

[moviePlayerController stop];

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayBackDidFinish:) 
                                             name:MPMoviePlayerPlaybackDidFinishNotification object:nil];

NSString *movpath = [[NSBundle mainBundle] pathForResource:@"albert" ofType:@"mp4"];
MPMoviePlayerViewController* mpviewController = [[MPMoviePlayerViewController alloc] 
                                                 initWithContentURL:[NSURL fileURLWithPath:movpath]];

if ([[NSFileManager defaultManager] fileExistsAtPath:movpath])      //Does file exist?
{
    moviePlayerController = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL fileURLWithPath:movpath]];

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(moviePlaybackComplete:)
                                                 name:MPMoviePlayerPlaybackDidFinishNotification
                                               object:moviePlayerController];  

    moviePlayerController.view.frame = CGRectMake(38, 37, 986, 618);
    [self.view addSubview:moviePlayerController.view];
    [moviePlayerController play];

    if ([moviePlayerController respondsToSelector:@selector(setAllowsAirPlay:)])    //Allow airplay if availabe
        [moviePlayerController setAllowsAirPlay:YES];

    [moviePlayerController play];

}            
}



- (void)moviePlaybackComplete:(NSNotification *)notification
{
    MPMoviePlayerController *moviePlayerController = [notification object];
    [[NSNotificationCenter defaultCenter] removeObserver:self
                                                    name:MPMoviePlayerPlaybackDidFinishNotification
                                                  object:moviePlayerController];

    [moviePlayerController.view removeFromSuperview];
    [moviePlayerController release];
}

1 Ответ

2 голосов
/ 20 декабря 2011

Если я правильно следую за вами, вы должны остановить контроллер видеоплеера в -viewWillDisappear:.

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    [moviePlayerController stop];
}

Редактировать Только что заметил, что вы создаете MPMoviePlayerViewControllerвместо MPMoviePlayerController.Первый предназначен для модального отображения, поскольку он является подклассом UIViewController.Это объясняет сбой, потому что MPMoviePlayerViewController не отвечает на сообщение -stop.Так что, либо отобразите moviePlayerController с помощью -presentModalViewController:animated:, либо измените его тип на MPMoviePlayerController и добавьте его в свой вид, как вы делаете сейчас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...