MPMoviePlayerController nie odtwarza żadnych treści wideo [ze względu na ARC i zarządzanie pamięcią]
Próbuję odtworzyć wideo w aplikacji iOS, używając MPMoviePlayerController do dołączenia widoku filmu do istniejącego widoku, gdy użytkownik naciska przycisk. Widok pojawia się jako czarna skrzynka na właściwej pozycji i wszystko, ale nic się nie dzieje. Spodziewam się, że film zacznie się odtwarzać, ale nic się nie dzieje i nie ma podpowiedzi z powodu dlaczego.
Czy ktoś może zobaczyć, gdzie to idzie źle?
-(IBAction) playButtonClicked:(id)sender
{
NSString* path = [[NSBundle mainBundle] pathForResource:@"sample_mpeg4" ofType:@"mp4"];
NSLog(@"Using videoPath %@", path);
NSURL* url = [NSURL fileURLWithPath:path];
MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:url];
[self.view addSubview:player.view];
player.view.frame = CGRectMake(10, 10, 300, 220);
[player play];
}
Film istnieje i rejestruje poprawną ścieżkę, ale nadal nie odtwarza filmu.
2012-07-06 11:51:13.492 experiments[84702:12203] Using videoPath /Users/marius/Library/Application Support/iPhone Simulator/5.1/Applications/9799C851-8D2B-4CFE-8CFA-A4C4C954787F/experiments.app/sample_mpeg4.mp4
Z tego, co przeczytałem i zrozumiałem, powinno to działać. Wszelkie wskazówki lub sugestie dotyczące tego, co należy wypróbować?
Przeniosłem film na serwer HTTP (fg.mp4) i śledzę logi dostępu. Po kliknięciu przycisku odtwarzania pojawia się zwykłe czarne okno. Serwery znajduję dwa nowe wpisy w dzienniku:
168.122.x.x - - [06/Jul/2012:22:42:33 +0200] "GET /fg.mp4 HTTP/1.1" 304 192 "-" "AppleCoreMedia/1.0.0.9B176 (iPhone Simulator; U; CPU OS 5_1 like Mac OS X; en_us)"
168.122.x.x - - [06/Jul/2012:22:42:33 +0200] "GET /fg.mp4 HTTP/1.1" 206 33304 "-" "AppleCoreMedia/1.0.0.9B176 (iPhone Simulator; U; CPU OS 5_1 like Mac OS X; en_us)"
Tak więc telefon pobiera część zawartości filmu i - najwyraźniej - przygotowuje się na resztę w razie potrzeby. Czy jest jakiś oczywisty parametr dla MPMoviePlayerController, którego brakuje?
AKTUALIZACJA: Rozwiązanie i działający kod
Problem jest spowodowany przez ARC i fakt, że nie ma odniesienia doMPMoviePlayerController
były przechowywane po wywołaniu metody konfiguracji kontrolera. Rozwiązanie: Dodanie zmiennej klasy do klasy i użycie jej do zachowania odniesienia do kontrolera przez cały okres życia filmu.
Tak wcześnie w deklaracji klasy (poza wszelkimi komunikatami / definicjami funkcji):
MPMoviePlayerController* mpController;
I wspomnianeplayButtonClicked
używa tej zmiennej do śledzenia kontrolera:
NSString* path = [[NSBundle mainBundle] pathForResource:@"sample_mpeg4" ofType:@"mp4"];
NSURL* url = [NSURL fileURLWithPath:path];
mpController = [[MPMoviePlayerController alloc] initWithContentURL:url];
mpController.view.frame = CGRectMake(10, 10, 300, 220);
[self.view addSubview:mpController.view];
[mpController play];