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

Posted

技术标签:

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

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

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

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

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

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

【问题讨论】:

【参考方案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

【讨论】:

以上是关于MPMoviePlayerController:搜索按钮点击冻结视频 - 黑屏的主要内容,如果未能解决你的问题,请参考以下文章

如何显示 MPMoviePlayerController 控件?

MPMoviePlayerController 隐藏 AirPlay 按钮

MPMoviePlayerController 上的专辑封面

MPMoviePlayerController 已弃用,现在怎么办?

用 MPMoviePlayerController 替换 AVPlayer

“MPMoviePlayerController”的“initialPlaybackTime”不起作用