0

我无法理解此类并使其正常工作,这是我使用它的一段代码:

MPMoviePlayerController *moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:_videoURL];
UIImage *videoThumbnail = [moviePlayer thumbnailImageAtTime:0 timeOption:MPMovieTimeOptionNearestKeyFrame];
[lastImageView setImage:videoThumbnail];

[moviePlayer setControlStyle:MPMovieControlStyleNone];
[moviePlayer setShouldAutoplay:YES];
[moviePlayer prepareToPlay];

[moviePlayer.view setFrame:lastImageView.frame];
moviePlayer.view.transform = CGAffineTransformMakeRotation((90*M_PI)/180);
[self.view addSubview:moviePlayer.view];

[moviePlayer play];

videoThumbnail 行仍然存在的唯一原因是因为我没有播放视频,直到我只是尝试看看它是否会从那里获取图像然后它突然开始工作......有点. 现在它播放 2-3 秒,然后终止而不发送 MPMoviePlayerPlaybackDidFinishNotification 或 MPMoviePlayerPlaybackStateDidChangeNotification 我用谷歌搜索了一下,找不到任何有用的提示,有人能告诉我什么是错的或我忘记了什么

4

1 回答 1

3

如果您没有将新创建的MPMoviePlayerController实例分配给具有本地范围 ( ) 的变量以外的任何内容moviePlayer,则电影播放器​​将在电影播放之前被释放。(我想这个thumbnailImageAtTime电话会保持更长的时间。)

尝试将电影播放器​​实例分配给保留的(强)实例变量或属性。当然,它应该在完成后释放,因为多个电影播放器​​实例不能很好地一起播放。

另外,请注意,从 iOS 5 开始,prepareToPlay需要调用。以下内容来自 Matt Neuberg 的Programming iOS 5, Second Edition的第 28 章:

在您使用 MPMoviePlayerController 在您的界面中显示电影之前,您必须调用 prepareToPlay,它是通过 MPMediaPlayer 协议(由 MPMoviePlayerController 采用)提供的。此要求是 iOS 5 中的新要求,与以前的系统版本有很大不同;如果不进行此调用,您的旧代码可能会中断。

于 2012-07-07T14:31:14.330 回答