2012-03-27 3 views
1

Я пытаюсь воспроизвести короткое видео 6 секунд в моем представлении с помощью MPMoviePlayerController и хотел бы, чтобы он зацикливался на неопределенный срок. Я использовал следующий код для достижения этой цели:Возможные проблемы с потоком при циклировании 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]; 

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

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

Заранее благодарен!

ответ

2

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

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

Смежные вопросы