【问题标题】:MPMoviePlayerViewController Black Screen issue!MPMoviePlayerViewController 黑屏问题!
【发布时间】:2010-07-12 18:18:42
【问题描述】:

我有这段代码试图在 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];
}

【问题讨论】:

    标签: cocoa-touch mpmovieplayercontroller mpmovieplayer ios


    【解决方案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 来更快地释放它。这样的例子很多,我就不重复了。

    希望这会有所帮助。

    【讨论】:

    • 我不相信答案是正确的,mp 在模态显示时会保留。这不是内存问题..
    【解决方案2】:

    这是我正在使用的代码:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-27
      相关资源
      最近更新 更多