在另一个控制器显示的视图中显示视频

时间:2013-09-06 08:03:46

标签: iphone ios objective-c

我有一个应用程序,其中我有一个集合视图。在点击集合视图时,我将呈现另一个视图控制器。此视图控制器包含一个视频。单击播放按钮时,视频会播放但是当我点击视频的全屏按钮时它会崩溃。应用程序中的任何位置,如果我添加视频并单击全屏以使其全屏崩溃。

这是我的代码:

 - (void) didSelectItemFromCollectionView:(NSNotification *)notification
    {
        NSDictionary *cellData = [notification object];
        UINavigationController *navigationcontroller;
        if (cellData)
        {
            if (!self.detailViewController)
            {

                self.detailViewController = [[CourseDetailsViewController alloc] initWithNibName:@"CourseDetailsViewController" bundle:nil];

            }
            self.detailViewController.detailItem = cellData;

            [self presentViewController:self.detailViewController animated:YES completion:nil];
        }
    }

这是从集合视图单元格中呈现视频视图控制器的代码。 在coursedetailcontroller里面。

viewDidLoad中的

  -(void)viewDidload
    {
      MPMoviePlayerController *mc = [[MPMoviePlayerController alloc] initWithContentURL:nil];

        mc.shouldAutoplay = NO;
        mc.controlStyle = MPMovieControlStyleEmbedded;

        NSURL *contentURL = [[NSBundle mainBundle] URLForResource:@"01 01. Welcome" withExtension:@"mov"];
        mc.contentURL = contentURL;
        mc.view.frame = self.test.bounds;
        //test is the view where i am displaying the video

        mc.movieSourceType = MPMovieSourceTypeFile;
        [mc prepareToPlay];
        [self.test addSubview:mc.view];

        self.testvideo = mc;


    }

一切正常,但当视频以全屏模式进入时,应用程序崩溃。

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIView trackRectForBounds:]: unrecognized selector sent to instance 0xa45f180' this error message is shown

1 个答案:

答案 0 :(得分:0)

在我看来,使用MPMovieViewController会产生很多问题。您可以尝试AVPlayerViewController播放视频。

您可以将此作为子视图添加到您的视图中,如下所示:

NSURL *url=[NSURL URLWithString:@"videourl.mp4"];
self.avPlayer = [AVPlayer playerWithURL:url];

self.avPlayerViewController=[[AVPlayerViewController alloc]init];
self.avPlayerViewController.player=self.avPlayer;    
[self addChildViewController:self.avPlayerViewController];
[self.view addSubview:self.avPlayerViewController.view];