0

过去几天,当我尝试在 IB 中创建的 UIView 中播放 MPMoviePlayerController 的实例时,我一直在与我的锻炼应用程序崩溃作斗争。应用程序的其余部分运行良好,但如果任何 MPMoviePlayer 被实例化,调试器会暂停应用程序而不引发异常。导致它的不仅仅是这段代码。从其他帖子或书籍实例化电影播放器​​的其他方法会导致相同的结果。

当我运行此代码时,它会退出到主代码中:

NSURL *url = exercise.exerciseVideoURL;//path for vid

    self.moviePlayerController = [[MPMoviePlayerController alloc] initWithContentURL:url];



    [self.moviePlayerController.view setFrame:self.movieHostingView.bounds];

    [self.moviePlayerController prepareToPlay];
    [self.moviePlayerController setControlStyle:MPMovieControlStyleNone];
    [self.movieHostingView addSubview:self.moviePlayerController.view];


    [[self.moviePlayerController view]
     setAutoresizingMask:(UIViewAutoresizingFlexibleWidth |
                          UIViewAutoresizingFlexibleHeight)];

    [[self.moviePlayerController view] setClipsToBounds:YES];
    [[self.moviePlayerController view] setFrame:[[self movieHostingView] bounds]];
    [self.movieHostingView addSubview:self.moviePlayerController.view];
    self.moviePlayerController.repeatMode = MPMovieRepeatModeOne;

我已经尝试使用 MPMoviePlayer 实例化其他帖子中的代码,将模型分箱,然后像其他一些帖子一样使用直接路径对其进行实例化,但它仍然退出到 main()。

4

2 回答 2

11

知道了!我已经从断点选项卡中删除了“所有异常”并且它运行良好。为什么这会导致它退出 MPMoviePlayer?!总之,感谢所有帮助过的人。

于 2013-05-21T05:53:34.407 回答
0

您是从磁盘(主包)还是通过互联网阅读视频?首先,始终确保您的文件路径正确:

NSString *filepath = [url absoluteString];

if ([[NSFileManager defaultManager] fileExistsAtPath:filepath])
{
    NSLog(@"file exists so init player");
}
else
{
    NSLog(@"try again!");
}

就我而言,我总是在加载后添加 MPMoviePlayerController。所以你可以做这样的事情:

NSString *filepath   =   [[NSBundle mainBundle] pathForResource:@"demo" ofType:@"mp4"];

if ([[NSFileManager defaultManager] fileExistsAtPath:filepath])
{

    NSURL    *fileURL    =   [NSURL fileURLWithPath:filepath];
    _moviePlayerController = [[MPMoviePlayerController alloc] initWithContentURL:fileURL];

    [_moviePlayerController prepareToPlay];

    NSLog(@"frame = %@", NSStringFromCGRect(_moviePlayerController.backgroundView.frame));

    [_moviePlayerController.view setBackgroundColor:[UIColor yellowColor]];
    [_moviePlayerController.view setFrame:CGRectMake(0, 280, 320, 200)];


    // 

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(movieLoadStateDidChangeNotification:)
                                                 name:MPMoviePlayerLoadStateDidChangeNotification
                                               object:_moviePlayerController];   
}

然后过了一段时间:

- (void)movieLoadStateDidChangeNotification:(NSNotification *)notification
{
    [self.view addSubview:_moviePlayerController.view];
}
于 2013-05-20T19:29:29.727 回答