MPMoviePlayerController:Seek按钮点击冻结视频 - 黑屏

时间:2014-05-16 17:22:58

标签: ios objective-c mpmovieplayercontroller freeze

我正在使用MPMoviePlayerController播放视频。在以下情况下,我得到一个黑屏,不响应控件上的点击:

  1. 用户点按快进按钮
  2. 用户点击倒带按钮
  3. 用户长时间持有,并快进到视频结尾
  4. 所有其他控件按预期工作。

    请注意,快进和快退的长按按预期工作。

    我确实在下面的链接中查看了文档。存在用户何时向前和向后寻求(例如,长期持有)的通知;分别为MPMoviePlaybackStateSeekingForwardMPMoviePlaybackStateSeekingBackward。话虽如此,搜索按钮上没有关于simple_tap_的通知。

    链接是" Here"。

    为了完整性,这是我用来调用播放器的代码。没有什么不寻常的;当视频结束时(观察MPMoviePlayerPlaybackDidFinishNotification),我倒回到开头。

    NSString *path = [[NSBundle mainBundle] pathForResource:@"catSleeping" ofType:@mp4"];
    _videoPlayer =  [[MPMoviePlayerController alloc]
                     initWithContentURL:[NSURL fileURLWithPath:path]];
    [_videoPlayer prepareToPlay];
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(moviePlayBackDidFinish:)
                                             name:MPMoviePlayerPlaybackDidFinishNotification
                                               object:_videoPlayer];
    _videoPlayer.controlStyle = MPMovieControlStyleFullscreen;
    _videoPlayer.shouldAutoplay = YES;
    [self.view addSubview:_videoPlayer.view];
    [_videoPlayer setFullscreen:YES animated:YES];
    [_videoPlayer play];
    }
    
    - (void) moviePlayBackDidFinish:(NSNotification*)notification {
        MPMoviePlayerController *player = [notification object];
        player.currentPlaybackTime = 0.1;
        [player stop];
        [player play];
        [player pause];
    }
    

    有什么想法吗?

    tyvm 基思:)

2 个答案:

答案 0 :(得分:5)

单击快进或快退按钮时,播放器加载状态未知。您需要处理MPMoviePlayerLoadStateDidChangeNotification并重新加载视频和prepareToPlay的路径。

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(playerLoadStateChanged:)
                                             name:MPMoviePlayerLoadStateDidChangeNotification
                                           object:nil];

- (void)playerLoadStateChanged:(NSNotification *)notification {

    MPMovieLoadState loadState = _videoPlayer.loadState;

    if(loadState == MPMovieLoadStateUnknown) {
        _videoPlayer.contentURL = [NSURL fileURLWithPath:self.path]
        [_videoPlayer prepareToPlay];
    }
}

答案 1 :(得分:2)

  

...在以下情况下获得一个不响应控件上的点击的黑屏:

     

1。用户点击快进按钮

  • 点击Fast-Forward的行为就像Next
  • 一样

  

2。用户点击倒带按钮

  • 点击Rewind的行为就像Previous
  • 一样

所以...在上述两种情况下,您的播放器不再是指您期待的视频并且继续前进。


  

3。用户长时间持有,并快进到视频结尾

  • 长按直到视频结束不应该给你黑屏 再次检查此方案

我不知道是否有修改MPMoviePlayerController控件的默认行为的方法,但是如果您希望单击快进/快退以前进/后退视频大约X秒,然后您可以使用按钮创建自己的自定义视图,并分配MPMoviePlayerController的实例方法,如:

  • -play / -stop
  • -setCurrentPlaybackTime:
  • -beginSeekingForward / -beginSeekingBackward

我使用上述方法并使用NSTimer进行快速退回/快退按钮,并在UIControlEventTouchDown&等控制事件上处理此计时器。 UIControlEventTouchUpInside确定是将currentPlaybackTime递增/递减X秒还是-beginSeekingForward / -beginSeekingBackward