MPMoviePlayerController:更改contentURL时删除±1秒黑屏?

时间:2010-11-30 13:36:03

标签: ipad mpmovieplayercontroller

我正在开发一个iPad项目,我必须一个接一个地播放短视频文件。播放我正在使用MPMoviePlayerController的视频。我面临的问题是,当我打电话时

[self.moviePlayer setContentURL:videoURL]

确实启动了下一个视频,但在开始播放下一个视频之前,黑屏的延迟时间为±1秒(视频是从磁盘读取的,而不是流式传输)。我需要避免这种黑屏以及延迟。

所以也许你们中的一些人也遇到过这个问题而且有一些解决方案?感谢。

顺便说一下,至少现在,为了至少避开黑屏,我捕捉结束视频的最后一帧,在UIImageView中显示它,并在1秒延迟后将其删除。但我希望找到一个更优雅的解决方案。

4 个答案:

答案 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)

我认为问题在于控制器会在电影之间淡出和重新出现。 您可以控制背景视图的颜色和内容,但我不确定您是否可以消除淡入/淡出。