1

我有这段代码试图在 iPhone 4 模拟器上运行视频。

问题是它看起来像是加载了播放器,但半秒后在整个应用程序顶部加载了一个后屏,禁用了触摸和所有内容,而且看起来它也没有播放视频,因为我什么也听不见。

有任何想法吗?!

MPMoviePlayerViewController *mp =
[[MPMoviePlayerViewController alloc] initWithContentURL:videoUrl];

if (mp) {
    mp.moviePlayer.scalingMode = MPMovieScalingModeFill; 
    mp.moviePlayer.movieSourceType = MPMovieSourceTypeFile;
    [mp.moviePlayer play];

    [self presentMoviePlayerViewControllerAnimated:mp];

    [mp release];
}
4

2 回答 2

1

我相信问题是由释放 MPMoviePlayerViewController 引起的。只需保留控制器,直到您完成它。

在“[mp release];”之前 添加此行以保存该值。

self.moviePlayerViewController = mp;

然后更新您的 dealloc 方法以进行发布:

- (void)dealloc {
   [_moviePlayerViewController release], _moviePlayerViewController = nil;
   [super dealloc];
}

将合成添加到 .m 文件的顶部:

@synthesize moviePlayerViewController = _moviePlayerViewController;

将定义添加到 .h 文件的 @interface 中:

MPMovieViewController *_moviePlayerViewController;

将属性添加到您的 .h 文件中:

@property (readwrite, retain) MPMovieViewController *moviePlayerViewController;

您的标题中可能需要一些标题:

#import <MediaPlayer/MediaPlayer.h>
#import <MediaPlayer/MPMoviePlayerViewController.h>

您可能还需要平衡您的“presentMoviePlayer”呼叫与某处的解雇:

[self dismissMoviePlayerViewControllerAnimated];

呸,到处都是代码。无论如何,如果您提前完成了资源,您可以通过使用 NotificationManager 来监视 MPMoviePlayerPlaybackDidFinishNotification 来更快地释放它。这样的例子很多,我就不重复了。

希望这可以帮助。

于 2010-07-19T22:43:31.227 回答
0

这是我正在使用的代码:

MPMoviePlayerViewController *movieViewController = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:contentUrl]];
movieViewController.moviePlayer.movieSourceType = MPMovieSourceTypeFile;
[self presentMoviePlayerViewControllerAnimated:movieViewController];
[movieViewController release];

这对我来说似乎工作得很好。两个注意事项:

  • 某些模拟器(如当前的 iOS 5.0)在播放电影时会崩溃,但它可以在真实设备上运行
  • 如果您省略该movieSourceType部分,则在电影开始前会显示大约一秒钟的黑屏
于 2012-06-19T17:04:08.360 回答