2012-03-27 3 views
1

Ich versuche, ein kurzes 6-Sekunden-Video in meiner Ansicht mit MPMoviePlayerController zu spielen und möchte, dass es endlos läuft. Ich habe den folgenden Code, dies zu erreichen:Mögliche Threadprobleme beim Looping von MPMoviePlayerController Video

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]; 

Das Problem ist, dass das Video in einer Schleife abgespielt wird, wie gewünscht, aber dann schließlich stoppt nach einer zufälligen Anzahl von Iterationen. Beachten Sie, dass die Dateigröße des Videos sehr klein ist (weniger als 500 KB).

Nach einigem Nachdenken spekulierte ich, dass das Verhalten der Tatsache zugeschrieben werden kann, dass ich den oben genannten Code innerhalb des Hauptthreads ausführe. In dem Bemühen, den obigen Code in einem eigenen Thread laufen zu lassen, habe ich versucht, die folgende:

- (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]; 
} 

Nun ist das Problem, dass der Rahmen der MPMoviePlayerController Sicht erscheint nur als ein schwarzes Rechteck, wo das Video, aber keine Videospiele sein sollte .

Ich würde wirklich jede Hilfe schätzen, wie man es wie gewünscht zur Arbeit bringt (es ist mir egal, ob es mit oder ohne zusätzliche Threads ist). Alles, was ich brauche, ist ein Video, das kontinuierlich abgespielt wird.

Vielen Dank im Voraus!

Antwort

2

Ich habe das gleiche Problem. Die Verwendung des separaten Threads ist jedoch keine gute Lösung. 1. Die Arbeit mit UIKit (addSubview-Methode) in nicht Hauptthread könnte Ihnen unerwartetes Verhalten geben. 2. Es sieht so aus, dass MPMoviePlayerController einen eigenen Hintergrund-Thread hat. Also alle diese Sachen arbeiten schon in anderem Thread.

Mögliche Lösung könnte MPMoviePlayerPlaybackDidFinishNotification und MPMoviePlayerPlaybackStateDidChangeNotification Benachrichtigungen und manuelle Wiederherstellung der Wiedergabe sein.

Verwandte Themen