MPMoviePlayerController:搜索按钮点击冻结视频 - 黑屏
Posted
技术标签:
【中文标题】MPMoviePlayerController:搜索按钮点击冻结视频 - 黑屏【英文标题】:MPMoviePlayerController: Seek Button tap freezes video - black screen 【发布时间】:2014-05-16 17:22:58 【问题描述】:我正在使用MPMoviePlayerController
播放视频。在以下情况下,我会出现黑屏,并且无法响应对控件的点击:
-
用户点击快进按钮
用户点击快退按钮
用户长按,然后快进到视频结尾
所有其他控件都按预期工作。
请注意,长按快进和快退确实按预期工作。
我确实查看了以下链接中的文档。当用户向前和向后寻找时有通知(例如,多头持有);分别为MPMoviePlaybackStateSeekingForward
和MPMoviePlaybackStateSeekingBackward
。话虽如此,搜索按钮上没有关于 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
作为快进/快退按钮,并在 UIControlEventTouchDown
和 UIControlEventTouchUpInside
等控制事件上处理此计时器,以确定是否将 currentPlaybackTime
增加/减少 X秒或-beginSeekingForward
/ -beginSeekingBackward
。
【讨论】:
以上是关于MPMoviePlayerController:搜索按钮点击冻结视频 - 黑屏的主要内容,如果未能解决你的问题,请参考以下文章
如何显示 MPMoviePlayerController 控件?
MPMoviePlayerController 隐藏 AirPlay 按钮
MPMoviePlayerController 上的专辑封面
MPMoviePlayerController 已弃用,现在怎么办?