2012-03-27 6 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通知と再生の手動復元を使用することです。

関連する問題