MPMoviePlayerViewController останавливается через несколько секунд - PullRequest
0 голосов
/ 29 июня 2011

У меня есть приложение, в котором я транслирую прямой телеканал на одной из вкладок.Я использую MPMoviePlayerViewController.Я объявил мой MPMoviePlayerViewController в своем заголовочном файле и синтезировал его в своем файле реализации.

Вот мой viewDidAppear:

- (void)viewDidAppear:(BOOL)animated   
{
    NSURL *movieURL = [[NSURL alloc]initWithString:@"http://mysuperURL"];
    moviePlayerController = [[MPMoviePlayerViewController alloc] initWithContentURL:movieURL];
    [self checkIt];
}

И моя функция checkIt

- (void) checkIt {
    if ([[moviePlayerController moviePlayer] loadState] == MPMovieLoadStateUnknown) { // before you wreck yourself
        [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(checkIt) userInfo:nil repeats:NO];
    } else {
        [moviePlayerController setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
        [self presentModalViewController:moviePlayerController animated:YES];
    }
}

Однако через две секунды видео останавливается и приложение перестает отвечать.*

Ответы [ 2 ]

2 голосов
/ 30 июня 2011

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

Например - где-то в вас инициализирующий код:

[[NSNotificationCenter defaultCenter] addObserver:self 
                                             selector:@selector(MPMoviePlayerLoadStateDidChange:) 
                                                 name:MPMoviePlayerLoadStateDidChangeNotification 
                                               object:nil];

Теперь реализуем обработчик уведомлений:

- (void)MPMoviePlayerLoadStateDidChange:(NSNotification *)notification
{
    NSLog(@"loadstate change: %Xh", movieController_.loadState);    
}

И где-то в вашем деинициализирующем коде:

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

Также обратите внимание, что MPMoviePlayerController.loadState является растровым изображением -> вам нужно замаскировать значение, которое вы хотите проверить.

Например:

if ((movieController_.loadState & MPMovieLoadStatePlayable) == MPMovieLoadStatePlayable)
{
    NSLog(@"yay, it became playable");
}
0 голосов
/ 29 июня 2011

Поскольку мои знания касаются использования таймера, он замораживается, и для этого также требуется время.

...