2012-03-27 45 views
1

我試圖在我的視圖中使用MPMoviePlayerController播放短6秒的視頻,並且希望它無限循環。我用下面的代碼來實現這一目標:循環播放MPMoviePlayerController視頻時可能出現的線程問題

NSString *filepath = [[NSBundle mainBundle] pathForResource:@"MyVideo" ofType:@"m4v"]; 
NSURL *fileURL = [NSURL fileURLWithPath:filepath]; 
moviePlayerController = [[MPMoviePlayerController alloc] initWithContentURL:fileURL]; 
moviePlayerController.view.frame = CGRectMake(10, 240, 300, 163); 
moviePlayerController.controlStyle = MPMovieControlStyleNone; 
moviePlayerController.repeatMode = MPMovieRepeatModeOne; 
[self.view addSubview:moviePlayerController.view]; 
[moviePlayerController play]; 

的問題是,在視頻開始所期望的循環再生,但那麼最終迭代的隨機數後停止。請注意,視頻的文件大小非常小(小於500 KB)。

經過一番思考,我推測這種行爲可能是由於我在主線程中運行上述代碼。在努力運行在自己的線程上面的代碼,我試過如下:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [NSThread detachNewThreadSelector:@selector(playVideo) toTarget:self withObject:nil]; 
} 

-(void) playVideo 
{ 
    NSString *filepath = [[NSBundle mainBundle] pathForResource:@"MyVideo" ofType:@"m4v"]; 
    NSURL *fileURL = [NSURL fileURLWithPath:filepath]; 
    moviePlayerController = [[MPMoviePlayerController alloc] initWithContentURL:fileURL]; 
    moviePlayerController.view.frame = CGRectMake(10, 240, 300, 163); 
    moviePlayerController.controlStyle = MPMovieControlStyleNone; 
    moviePlayerController.repeatMode = MPMovieRepeatModeOne; 
    [self.view addSubview:moviePlayerController.view]; 
    [moviePlayerController play]; 
} 

現在的問題是,的MPMoviePlayerController的視圖的框架只是顯示爲黑色矩形,其中的視頻應該是,但沒有視頻播放。

我真的很感謝任何幫助,如何讓這個工作按需(我不在乎,如果它有或沒有額外的線程)。我需要的只是視頻播放和循環播放。

在此先感謝!

回答

2

我有同樣的問題。但爲此使用單獨的線程不是一個好的解決方案。 1.在非主線程中使用UIKit(addSubview方法)可能會給您帶來意想不到的行爲。 2.它看起來像MPMoviePlayerController有它自己的後臺線程。所有這些東西已經在其他線程中工作了。

可能的解決方案可能是使用MPMoviePlayerPlaybackDidFinishNotification和MPMoviePlayerPlaybackStateDidChangeNotification通知和手動還原播放。

相關問題