我正在使用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 基思:)
答案 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
。