MPMoviePlayer标准接口播放/暂停状态反射问题

时间:2011-11-22 15:45:49

标签: iphone ios ios5 mpmovieplayercontroller

我的一个组件大量使用MPMoviePlayerController并且最近显示了一个奇怪的错误;当使用标准用户界面时(例如MPMoviePlayerController.controlStyle = MPMovieControlStyleFullscreen;,玩家永远不会改变播放/暂停按钮的状态(在我的屏幕截图中间那个东西)。

enter image description here

功能保持不变但UI不反映播放器状态。

在播放电影时通过点击屏幕调出控件时,我会看到一个播放符号。我期待的是玩家目前正在玩的暂停符号。当点击播放符号时,播放器进入暂停模式。然而,符号不会改变。当再次点击该播放符号时,播放器继续播放,就像预期一样。

iOS5已经引入了这个问题,以前的iOS版本没有这个问题。

为了验证iOS5问题,我创建了一个不使用我自己的框架的简约播放器,确定没有发生问题,因此它必须是我的代码触发这个怪癖。不幸的是,我的代码非常大(约3k行)所以我不能在这里发布。

我知道有人能够在没有源代码的情况下回答这个问题的机会很小,因为它似乎与我的代码直接相关。就像我现在一样绝望,我只是抓住了机会,希望有点奇怪,有人确实有这样的问题,知道如何触发/删除它。

2 个答案:

答案 0 :(得分:1)

好吧,似乎我找到了答案(以及我称之为iOS5的错误)......

MPMoviePlayerController对播放按钮状态产生不满的原因只是初始化代码的顺序。

要触发此问题,您只需运行此代码;

moviePlayer = [[MPMoviePlayerController alloc] init];
moviePlayer.shouldAutoplay = YES;
moviePlayer.fullscreen = NO;
moviePlayer.view.frame = self.view.bounds;
moviePlayer.currentPlaybackTime = 0.0;
moviePlayer.initialPlaybackTime = 0.0;
[moviePlayer setContentURL:[NSURL URLWithString:@"http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8"]];
[self.view addSubview:moviePlayer.view];

您将看到一个播放器UI,它不会改变其付费/暂停状态。

为了让事情再次正常工作,您必须在设置播放时间之前移动setContentURL调用。

moviePlayer = [[MPMoviePlayerController alloc] init];
moviePlayer.shouldAutoplay = YES;
moviePlayer.fullscreen = NO;
moviePlayer.view.frame = self.view.bounds;
[moviePlayer setContentURL:[NSURL URLWithString:@"http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8"]];
moviePlayer.currentPlaybackTime = 0.0;
moviePlayer.initialPlaybackTime = 0.0;
[self.view addSubview:moviePlayer.view];

我确实在Apple上提交了一个错误(雷达错误ID#10484668) - 会让你发布他们的答案。

OpenRadar Bug Report

答案 1 :(得分:1)

我也经常看到这种行为,但不幸的是,简单地将调用顺序切换到setContentURL并设置初始和播放时间没有任何区别。

我发现了我做错了什么。我将回放时间设置为-1表示当我应该指定零时开始流。改变这个为我解决了问题。