MPMoviePlayerController和HTTP Live Streaming

And*_*rew 11 iphone mpmovieplayercontroller

每一个人.我正试图弄清楚如何使用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];
Run Code Online (Sandbox Code Playgroud)

实际上,控制器接收MPMoviePlayerPlaybackDidFinishNotification而不播放任何内容.问题出在哪儿?

Rob*_*und 17

您的问题可能与URL有关.MPMoviePlayerController想要将URL直接发送到您想要播放的文件.您正在提供HTML电影播放器​​不理解的页面的URL .这就是为什么它可以在UIWebViewWeb浏览器理解的情况下工作HTML.如果您想了解有关错误的更多信息,可以查看Apple公司文档中引用的错误:

要检查URL加载中的错误,请注册MPMoviePlayerContentPreloadDidFinishNotification或MPMoviePlayerPlaybackDidFinishNotification通知.出错时,这些通知包含使用通知的userInfo字典中的@"error"键可用的NSError对象.

它看起来像:

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

如果您想尝试播放该示例,可以尝试直接访问该流的URL,即:http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8


Vla*_*pko 5

您应该使用直接链接播放列表文件: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];
Run Code Online (Sandbox Code Playgroud)