我有一个应用程序,我在其中一个选项卡中流式传输直播电视频道。我正在使用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];
}
}
然而,视频在两秒钟后冻结,应用程序停止响应。
答案 0 :(得分:2)
您应该使用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");
}
答案 1 :(得分:0)
因为我的知识涉及计时器的使用,所以它很冷,并且需要时间流。