MPMoviePlayerController似乎存在问题,一旦你处于全屏模式并按住快进按钮,让它向前搜索(快速播放)一直到视频结尾。
此后,你只是得到一个黑屏,它被卡住了。换句话说,它不响应任何水龙头手势,你无法摆脱这种情况。还有其他人遇到过这个问题吗?
无论如何都要在代码中解决它?
答案 0 :(得分:1)
它似乎是一个iOS错误,因为快速向后到一开始不会导致黑屏但快进到最后将会发生,之后就会发生' /' / '暂停'呼叫视频播放器永远不会工作。我通过在scrubber刷新回调中添加受保护的逻辑来暂时解决此问题: 我们假设将在PLAY_BACK_TIME_MONITOR_INTERVAL' PLAY_BACK_TIME_MONITOR_INTERVAL'中调用monitorPlaybackTime。刷新洗涤器的秒数,并在其中添加一个检查逻辑:
NSTimeInterval duration = self.moviePlayer.duration;
NSTimeInterval current = self.moviePlayer.currentPlaybackTime;
if (isnan(current) || current > duration) {
current = duration;
} else if (self.moviePlayer.playbackState == MPMoviePlaybackStateSeekingForward) {
if (current + self.moviePlayer.currentPlaybackRate*PLAY_BACK_TIME_MONITOR_INTERVAL > duration) {
[self.moviePlayer endSeeking];
}
}
解决黑屏问题的解决方法并非完美,希望它可以提供帮助。
答案 1 :(得分:0)
我猜你没有处理MPMoviePlayerPlaybackDidFinishNotification。如果你不是,你真的应该这样做。
对于我来说,电影播放器会像你描述的那样陷入“陷入困境”状态。我更希望它能够自动停止播放并在到达结束时重置。无论如何,我认为如果你观察MPMoviePlayerPlaybackDidFinishNotification并适当地处理电影控制器,你的问题就会消失。
答案 2 :(得分:0)
在iOS6上遇到同样的问题。通过以下实现注册MPMoviePlayerPlaybackDidFinishNotification(由Leuguimerius建议)来管理修复它:
- (void)playbackDidFisnish:(NSNotification *)notif {
if (self.player.currentPlaybackTime <= 0.1) {
dispatch_async(dispatch_get_main_queue(), ^{
[self.player stop];
[self.player play];
[self.player pause];
});
}
}
其中self.player是关联的MPMoviePlayerController实例。对currentPlaybackTime的检查用于区分playbackDidFinish(允许电影以正常速度播放直到结束)的更标准的调用,以及用户快进直到结束的场景。即使快进到最后,停止播放和暂停也会产生可用的,视觉上一致的界面。
答案 3 :(得分:0)
上述解决方案都不适合我,所以这就是我最终做的事情:
EXPLAIN
我认为问题在于,当单击按下搜索按钮时,它想跳到下一个视频,这就是出现加载指示的原因。听取加载状态更改事件,您可以指定下一个视频应该是什么,如果您没有,则可以给它提供相同的URL。