MPMoviePlayerController не воспроизводит видео-контент [из-за ARC и управления памятью]
Я пытаюсь воспроизвести видео в приложении iOS, используя MPMoviePlayerController, чтобы добавить просмотр фильма к существующему представлению, когда пользователь нажимает кнопку. Вид выглядит как черный ящик в правильном положении и все, но ничего не происходит. Я ожидаю, что фильм начнет проигрываться, но ничего не происходит, и в приложении нет подсказок о том, почему.
Кто-нибудь может увидеть, где это идет не так?
-(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];
}
Фильм существует и записывает правильный путь, но фильм по-прежнему не воспроизводится.
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
Из того, что я прочитал и понял, это должно работать. Любые советы или предложения о том, что попробовать?
Я переместил фильм на HTTP-сервер (fg.mp4) и веду логи доступа. При нажатии на кнопку воспроизведения появляется обычное черное окно. Серверная часть я нахожу две новые записи в журнале:
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)"
Таким образом, телефон получает часть содержимого фильма и, по-видимому, готовится к получению остального при необходимости. Есть ли какой-то очевидный параметр для MPMoviePlayerController, который мне не хватает?
UPDATE: Solution and working code
Проблема вызвана ARC и тем, что нет ссылки наMPMoviePlayerController
были сохранены после вызова метода настройки контроллера.
Решение: добавьте переменную класса к классу и используйте ее, чтобы сохранить ссылку на контроллер на время жизни фильма.
Итак, в начале объявления класса (вне каких-либо определений сообщений / функций):
MPMoviePlayerController* mpController;
И вышеупомянутыйplayButtonClicked
использует эту переменную для отслеживания контроллера:
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];