1

在我的应用程序中,我在包含以下代码的视图之一上播放视频

NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"bgVideo" ofType:@"mov"]];
        player = [[MPMoviePlayerController alloc] initWithContentURL:url];

        [player setControlStyle:MPMovieControlStyleNone];
        player.view.frame = CGRectMake(35, 190, 245, 156);
        [self.view addSubview:player.view];
        [player play];
        [player.view setBackgroundColor:[UIColor clearColor]];

我在viewWillAppear方法上写了这段代码

但是当我最初来到这个视图时,我的 MPMoviePlayerController 在开始视频之前显示黑屏几分之一秒。

我不想第二次黑屏。

我该怎么办?

提前谢谢。

4

1 回答 1

0

也许玩家有一个强大的属性并合成它。有效。

也应该适用于您的情况。

我的经验,不会再有问题了。如果您不能工作,请回复。


Edit

我有点误会了。

开始前显示黑屏,因为视频没有加载。

您无法预测加载视频所需的时间。即使您将播放器分配给 viewWillApper 方法。会出现黑屏。这个黑屏控制不了。YouTube 应用程序或默认视频应用程序也相同。在黑屏期间,应向用户显示 ActivityIndi​​cator 或“正在加载”消息。这是合理的。最后一般来说,视频大小和质量越大,加载所需的时间就越长。如果您想要确切的加载时间,则应通知您。

参考示例代码。

- (void)viewWillAppear:(BOOL)animated
{
    NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"Movie" ofType:@"m4v"]];
    player = [[MPMoviePlayerController alloc] initWithContentURL:url];

    [player setControlStyle:MPMovieControlStyleNone];
    player.view.frame = CGRectMake(35, 190, 245, 156);
    [self.view addSubview:player.view];
    [player.view setBackgroundColor:[UIColor clearColor]];
    player.shouldAutoplay = NO;
    [player prepareToPlay];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(loadMoviePlayerStateChanged:)
                                                 name:MPMoviePlayerLoadStateDidChangeNotification
                                               object:self.player];

    [super viewWillAppear:animated];
}

- (void)loadMoviePlayerStateChanged:(NSNotification *)noti
{
    int loadState = self.player.loadState;
    if(loadState & MPMovieLoadStateUnknown)
    {
        NSLog(@"MPMovieLoadStateUnknown");
        return;
    }
    else if(loadState & MPMovieLoadStatePlayable)
    {
        NSLog(@"MPMovieLoadStatePlayable");
        [player play];
    }
    else if(loadState & MPMovieLoadStatePlaythroughOK)
    {
        NSLog(@"MPMovieLoadStatePlaythroughOK");
    } else if(loadState & MPMovieLoadStateStalled)
    {
        NSLog(@"MPMovieLoadStateStalled");
    }
}
于 2012-08-01T11:44:11.387 回答