Возможные проблемы с потоками при зацикливании видео MPMoviePlayerController - PullRequest
1 голос
/ 28 марта 2012

Я пытаюсь воспроизвести короткое 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 КБ).

После некоторых размышлений я предположил, что такое поведение может быть связано с тем, что я запускаю приведенный выше код внутри основного потока,Чтобы запустить приведенный выше код в своем собственном потоке, я попробовал следующее:

- (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 просто выглядит как черный прямоугольник, где видео должно быть, но нетВоспроизведение видео.

Я был бы очень признателен за любую помощь в том, как заставить это работать так, как нужно (мне все равно, с дополнительными потоками или без).Все, что мне нужно, это непрерывно воспроизводить и воспроизводить видео.

Заранее спасибо!

1 Ответ

2 голосов
/ 15 мая 2012

У меня та же проблема.Но использование отдельного потока для этого не является хорошим решением.1. Работа с UIKit (метод addSubview) в не основном потоке может привести к неожиданному поведению.2. Похоже, что MPMoviePlayerController имеет свой собственный фоновый поток.Так что все это работает уже в другой ветке.

Вероятное решение может заключаться в использовании уведомлений MPMoviePlayerPlaybackDidFinishNotification и MPMoviePlayerPlaybackStateDidChangeNotification и восстановлении воспроизведения вручную.

...