MPMoviePlayerController и HTTP Live Streaming

каждый. Я пытаюсь понять, как играть в реальном времени с помощью MPMoviePlayerController. Для тестирования я использую образец тестового потока Apples http://devimages.apple.com/iphone/samples/bipbopall.html. Он отлично работает в UIWebView, но я не могу заставить его работать с MPMoviePlayerController. Есть мой фрагмент кода:

NSURL *mediaURL = [NSURL URLWithString:@"http://devimages.apple.com/iphone/samples/bipbopall.html"];
MPMoviePlayerController *mp = [[MPMoviePlayerController alloc] initWithContentURL:mediaURL];
[[NSNotificationCenter defaultCenter] addObserver:self 
                                         selector:@selector(moviePlayBackDidFinish:) 
                                             name:MPMoviePlayerPlaybackDidFinishNotification 
                                           object:nil]; 

[mp setControlStyle:MPMovieControlStyleFullscreen];
[mp setMovieSourceType:MPMovieSourceTypeStreaming];
[mp setFullscreen:YES];

[self.view addSubview:[mp view]];

[mp prepareToPlay];
[mp play];

На самом деле контроллер получает MPMoviePlayerPlaybackDidFinishNotification, ничего не играя. В чем проблема?

Ответ 1

Вероятно, ваша проблема связана с URL-адресом. MPMoviePlayerController запрашивает URL-адрес непосредственно для файла, который вы хотите воспроизвести. Вы указываете URL-адрес страницы HTML, которую игрок не понимает. Вот почему он работает в UIWebView, так как веб-браузер понимает HTML. Если вы хотите получить дополнительную информацию о том, что неправильно, вы можете проверить ошибку, выполнив следующие действия, указанные в документации Apple:

Чтобы проверить наличие ошибок в загрузке URL, зарегистрировать MPMoviePlayerContentPreloadDidFinishNotification или MPMoviePlayerPlaybackDidFinishNotification уведомления. При ошибке эти уведомления содержат NSError доступ к объекту с помощью ошибки @" ключ в уведомлении userInfo словарь.

Он будет выглядеть примерно так:

- (void) moviePlayBackDidFinish:(NSNotification*)notification {
    NSError *error = [[notification userInfo] objectForKey:@"error"];
    if (error) {
        NSLog(@"Did finish with error: %@", error);
    }
}

Если вы хотите попробовать этот образец, вы можете попробовать и получить прямой URL-адрес для потока, который будет выглядеть следующим образом: http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8

Ответ 2

Вы должны использовать прямую ссылку на файл списка воспроизведения: http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8

NSURL *mediaURL = [NSURL URLWithString:@"http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8"];
MPMoviePlayerController *mediaPlayer = [[MPMoviePlayerController alloc] initWithContentURL:mediaURL];

Ответ 3

Попробуйте object:mp вместо object:nil в NSNotification