MPMoviePlayerController и HTTP Live Streaming - PullRequest
11 голосов
/ 29 ноября 2010

каждый. Я пытаюсь выяснить, как играть в прямом эфире, используя MPMoviePlayerController. Для тестирования я использую образец потока теста для яблок 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 без воспроизведения чего-либо. В чем проблема?

Ответы [ 4 ]

17 голосов
/ 29 ноября 2010

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

Чтобы проверить наличие ошибок при загрузке URL-адреса, зарегистрируйтесь для уведомлений MPMoviePlayerContentPreloadDidFinishNotification или MPMoviePlayerPlaybackDidFinishNotification.В случае ошибки эти уведомления содержат объект NSError, доступный с помощью клавиши @ "error" в словаре 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

5 голосов
/ 27 марта 2013

Вы должны использовать прямую ссылку для воспроизведения файла списка: 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];
0 голосов
/ 23 апреля 2011

@ Эндрю:

Вот документация Apple по потоковой передаче HTTP, включая пример кода http://developer.apple.com/library/ios/search/index.php?Search=HTTP+Live+Streaming+Overview

Dung.

0 голосов
/ 29 ноября 2010

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

...