【问题标题】:MPMoviePlayerController: Seek Button tap freezes video - black screenMPMoviePlayerController:搜索按钮点击冻结视频 - 黑屏
【发布时间】:2014-05-16 17:22:58
【问题描述】:

我正在使用MPMoviePlayerController 播放视频。在以下情况下,我会出现黑屏,并且无法响应对控件的点击:

  1. 用户点击快进按钮
  2. 用户点击快退按钮
  3. 用户长按,然后快进到视频结尾

所有其他控件都按预期工作。

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

我确实查看了以下链接中的文档。当用户向前和向后寻找时有通知(例如,多头持有);分别为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 基思:)

【问题讨论】:

    标签: ios objective-c mpmovieplayercontroller freeze


    【解决方案1】:

    单击快进或快退按钮时,玩家的加载状态是未知的。您需要处理 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];
        }
    }
    

    【讨论】:

    • 完美!非常感谢!
    【解决方案2】:

    ...在以下情况下,黑屏对控件的点击无响应:

    1。用户点击快进按钮

    • 单击Fast-Forward 的行为与Next 相同

    2。用户点击快退按钮

    • 单击Rewind 的行为与Previous 相同

    所以...在上述两种情况下,您的播放器不再引用您期待的视频,而是继续播放。


    3。用户长按,然后快进到视频结尾

    • 长按直到视频结束不应出现黑屏。
      再次检查此场景

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

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

    我将使用上述方法并使用 NSTimer 作为快进/快退按钮,并在 UIControlEventTouchDownUIControlEventTouchUpInside 等控制事件上处理此计时器,以确定是否将 currentPlaybackTime 增加/减少 X秒或-beginSeekingForward / -beginSeekingBackward

    【讨论】:

      猜你喜欢
      • 2013-11-03
      • 1970-01-01
      • 1970-01-01
      • 2020-06-07
      • 1970-01-01
      • 2013-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多