我正在开发一个iPad项目,我必须一个接一个地播放短视频文件。播放我正在使用MPMoviePlayerController
的视频。我面临的问题是,当我打电话时
[self.moviePlayer setContentURL:videoURL]
确实启动了下一个视频,但在开始播放下一个视频之前,黑屏的延迟时间为±1秒(视频是从磁盘读取的,而不是流式传输)。我需要避免这种黑屏以及延迟。
所以也许你们中的一些人也遇到过这个问题而且有一些解决方案?感谢。
顺便说一下,至少现在,为了至少避开黑屏,我捕捉结束视频的最后一帧,在UIImageView中显示它,并在1秒延迟后将其删除。但我希望找到一个更优雅的解决方案。
答案 0 :(得分:6)
您所谈论的效果实际上是两个问题的组合:当您更改视频时出现黑色闪烁(第一次分配视频时不会发生这种情况)以及控制器开始播放视频之前的延迟。
我目前对第二个搞砸了,不知道怎么解决。至于第一个,只是尝试使用另一个MPMoviePlayerController实例。我的意思是当视频播放完毕(您可以订阅相应的通知)时,只需删除旧播放器,创建一个新播放器并将视频放在那里。这样你就可以避免眨眼,但是在下一个视频开始播放之前会有延迟(不确定,因为加载视频或因为播放器创建)。
希望这有点帮助。
答案 1 :(得分:1)
喜欢这里的解决方案
http://joris.kluivers.nl/blog/2010/01/04/mpmovieplayercontroller-handle-with-care/
您需要使用[self.moviePlayer prepareToPlay];
并捕获MPMoviePlayerReadyForDisplayDidChangeNotification以使用[self.moviePlayer play];
答案 2 :(得分:1)
旧帖但Google员工仍会来。 :)
创建一个新的MPMoviePlayerController
,然后将其分配回我以前的播放器,为我工作,不再是黑屏!
...
[self playVideoWithFilename:@"video1.mp4"];
}
- (void)playVideoWithFilename:(NSString *)fileName
{
MPMoviePlayerController *player = [MPMoviePlayerController new];
_myVidPlayer = player;
player = nil;
NSURL *vidPath = [[NSBundle mainBundle] URLForResource:fileName withExtension:nil];
[_myVidPlayer.view setBackgroundColor:[UIColor whiteColor]];
[_myVidPlayer.view setFrame:CGRectMake(0, 64, 320, 320)];
[_myVidPlayer setContentURL:vidPath];
[_myVidPlayer setControlStyle:MPMovieControlStyleNone];
[_myVidPlayer setRepeatMode:MPMovieRepeatModeOne];
[_myVidPlayer prepareToPlay];
[self.view addSubview: _myVidPlayer.view];
[_myVidPlayer play];
}
注意:强>
适用于iOS 2.0及更高版本 在iOS 9.0中不推荐使用
"在AVKit中使用AVPlayerViewController。"
答案 3 :(得分:0)
我认为问题在于控制器会在电影之间淡出和重新出现。 您可以控制背景视图的颜色和内容,但我不确定您是否可以消除淡入/淡出。