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
Ответ 4
@Андрей:
Вот документация Apple по потоку HTTP Live, включая пример кода http://developer.apple.com/library/ios/search/index.php?Search=HTTP+Live+Streaming+Overview
Навоз.