2011-10-17 98 views
2

此代碼工作完全在iPad 4.3模擬器後工作:的MPMoviePlayerController不升級到iOS 5

NSString *source = [mediaObject objectForKey:@"source"]; 
NSString *videoPath = [NSString stringWithFormat:@"%@/%@", path, source]; 
NSURL *videoUrl = [NSURL fileURLWithPath:videoPath]; 

MPMoviePlayerController *videoPlayer = [[MPMoviePlayerController alloc] initWithContentURL:videoUrl]; 
videoPlayer.shouldAutoplay = NO; 

videoPlayer.view.frame = CGRectMake(xPos, yPos, width, height); 

[backgroundImageView addSubview:videoPlayer.view]; 

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(videoPlaybackStateDidChange:) name:MPMoviePlayerPlaybackStateDidChangeNotification object:videoPlayer]; 

,但它並沒有在iPad上5模擬器的工作。我得到一個沒有電影和播放控制的黑框。

我讀到的MPMoviePlayerController蘋果更新日誌,但我沒有發現這個問題任何事情。你可以幫我嗎?

回答

4

我解決了這樣的問題:在我的頭文件中我寫道:

MPMoviePlayerController *moviePlayer; 

與此屬性:

@property(nonatomic, strong) MPMoviePlayerController *moviePlayer; 

,並在該方法中,我初始化了moviePlayer:

MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:movieUrl]; 
self.moviePlayer = player; 

似乎賦予玩家屬性「拯救」的球員。但不要問我爲什麼......

+0

謝謝。我花了幾個小時試圖弄清楚這一點。有人用ARC有更深的瞭解可能要在爲什麼必須活下去的屬性來衡量。 – THM

+0

您需要一個屬性,以保留視圖控制器 - 只是因爲backgroundImageView保留其視圖並不能保留視圖控制器。 – Boon

2

你沒有提到你試圖播放什麼類型的URL,但是如果它是一個HTTP Live Streaming資源(.m3u8文件),那麼請注意,iOS 5.0似乎已經收緊驗證m3u8索引文件。

具體來說,我發現:

  1. 沒有單獨的段可以比的兩倍,只要#EXT-X-TARGETDURATION值以上;

  2. #EXTINF值(以秒段長度),現在,僅是一個整數值。

如果其中一個是你的問題,運行了iOS 5.0模擬器下您的應用程序應該顯示在調試器控制檯的警告。

+0

你好。該視頻是一個簡單的.mp4文件,位於「文檔」應用程序文件夾的子文件夾中。 –

+0

該問題也存在於真實設備上。 –

+0

@馬丁肯尼:我已經發布了類似的問題,你可以看看它。 [LINK](http://stackoverflow.com/questions/7912653/encrypted-live-stream-does-not-work-in-ios5-but-works-in-ios4) – Samuel

1

對於iOS5上的HLS,TARGETDURATION值實際上不是目標持續時間,但需要是最大持續時間。所以它應該被設置爲文件中最大的部分。