Ipad MPMoviePlayerController在全屏模式下向前搜索,直到末端卡住为止

Ipad MPMoviePlayerController在全屏模式下向前搜索,直到末端卡住为止,ipad,mpmovieplayercontroller,fullscreen,Ipad,Mpmovieplayercontroller,Fullscreen,MPMoviePlayerController似乎有问题,一旦进入全屏模式,按下快进按钮,它就会一直向前搜索(以高速播放)直到视频结束 从那以后,你只会得到一个黑屏,它被卡住了。换句话说,它不会对任何敲击手势做出反应,你无法摆脱这种情况。还有其他人遇到过这个问题吗 在代码中是否有解决方法?我猜您没有处理这个问题。如果你不是,你真的应该 然而,电影播放器会像你描述的那样进入“卡住”状态,这对我来说还是出乎意料的。我更希望它自动停止播放,并在播放结束时重置。无论如何,如果您观察MPMoviePlay

MPMoviePlayerController似乎有问题,一旦进入全屏模式,按下快进按钮,它就会一直向前搜索(以高速播放)直到视频结束

从那以后,你只会得到一个黑屏,它被卡住了。换句话说,它不会对任何敲击手势做出反应,你无法摆脱这种情况。还有其他人遇到过这个问题吗


在代码中是否有解决方法?

我猜您没有处理这个问题。如果你不是,你真的应该


然而,电影播放器会像你描述的那样进入“卡住”状态,这对我来说还是出乎意料的。我更希望它自动停止播放,并在播放结束时重置。无论如何,如果您观察MPMoviePlayerPlaybackDidFinish通知并适当处理电影控制器,我认为您的问题将消失

这似乎是一个iOS错误,因为快退到最开始不会导致黑屏,但快进到最后会导致黑屏,之后对视频播放器的“播放”/“暂停”调用将无法工作。我通过在洗涤器刷新回调中添加受保护的逻辑临时解决了这个问题: 假设monitorPlaybackTime将在“PLAY_BACK_TIME_MONITOR_INTERVAL”秒周期内调用以刷新洗涤器,我在其中添加了一个检查逻辑:

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];
    }
}

一个解决黑屏问题的解决方案,并不完美,希望它能有所帮助。

在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];
        });
    }
}
-(void)playbackDidFisnish:(NSNotification*)notif{

如果(self.player.currentPlaybackTime上述解决方案对我都不起作用,那么这就是我最终要做的:

NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("moviePlayerLoadStateDidChange"), name: MPMoviePlayerLoadStateDidChangeNotification, object: nil)

func moviePlayerLoadStateDidChange() {
    let loadState = moviePlayerController?.loadState

    if loadState == MPMovieLoadState.Unknown {
        moviePlayerController?.contentURL = currentmovieURL
        moviePlayerController?.prepareToPlay()
    }
}

我认为问题在于,当单次按下seek Forward按钮时,它想跳到下一个视频,这就是为什么会出现加载指示器。在侦听加载状态更改事件时,您可以指定下一个视频应该是什么,如果没有,您可以给它相同的url。

我已经尝试处理此通知b但我不知道该怎么做才能阻止这个问题。我真的认为这是一个苹果漏洞。换句话说,我只希望默认控件在那里。我认为如果你将控件样式设置为MPMovieControlStyleFullscreen,你甚至可以在不进入全屏的情况下重现这个问题。@Hey68等等,你失去了我。你必须解释一下再次单击。您的电影实际上是嵌入的(不是全屏),您正在将控件设置为MPMovieControlStyleFullscreen?以下是顺序。步骤1:创建电影播放器控制器并将player.view添加为子视图(设置其帧<全屏),开始播放<代码>[播放器播放];
(不要设置任何控制样式)第2步:在运行时,当播放视频时,点击播放器以打开控件并点击全屏图标(或者只需按住按钮即可缩放到全屏。第3步:再次点击可调出带有ff按钮的全屏控件。第4步:按住ff按钮直到播放结束。显示一个全黑屏&没有点击或挤压操作;你不能不退出应用程序就出来---谢谢@olinYY!可播放的持续时间在那里做什么?你声明但之后就不用了?@Tony,这段代码只是整个功能代码的一部分,所以playableDuration用于其他目的,我忘记在粘贴之前删除它了,很抱歉打扰你。