2010-07-12 99 views
1

我有這段代碼試圖在iPhone 4模擬器上運行視頻。MPMoviePlayerViewController黑屏問題!

問題是,它看起來像加載播放器,但半秒鐘後在整個應用程序的頂部加載後屏幕,禁用觸摸和所有事情,而且看起來它也不播放視頻,因爲我可以'聽不到任何東西。

有什麼想法?

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

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

    [self presentMoviePlayerViewControllerAnimated:mp]; 

    [mp release]; 
} 

回答

1

我相信問題是由釋放MPMoviePlayerViewController引起的。只需保留控制器,直到完成。

之前的「[mp釋放];」添加此行以將值保存起來。

self.moviePlayerViewController = mp; 

然後更新您的dealloc方法做發佈:

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

的合成添加到您的.m文件的頂部:

@synthesize moviePlayerViewController = _moviePlayerViewController; 

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

MPMovieViewController *_moviePlayerViewController; 

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

@property (readwrite, retain) MPMovieViewController *moviePlayerViewController; 

您可能需要標題中的某些標題:

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

您可能還需要平衡你的「presentMoviePlayer」與解僱地方撥打:

[self dismissMoviePlayerViewControllerAnimated]; 

唷,到處都是代碼。無論如何,如果您早期完成了資源,可以通過使用NotificationManager來監視MPMoviePlayerPlaybackDidFinishNotification,以便更快地發佈它。有很多這樣的例子,所以我不會重複。

希望這會有所幫助。

+0

我不相信答案是正確的,mp在模態顯示時保留。這不是內存問題.. – talkol 2012-06-19 16:50:52

0

這是我使用的代碼:

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

這似乎爲我工作的罰款。有兩點需要注意:

  • 播放短片時,一些模擬器(如當前的iOS 5.0)崩潰,但如果你離開了movieSourceType部分它的工作原理實際設備
  • 上,顯示約一黑屏第二次在電影開始之前
相關問題