2013-04-12 4 views
0

Я делаю приложение, в котором я пытаюсь воспроизвести видео. Видео начнется правильно, но экран видео меняется через черный цвет через 4 секунды. Я не знаю, в чем проблема.MPMoviePlayerController не работает должным образом

также, когда я устанавливаю player.movieplayer.shouldautoplay = НЕТ, нет эффекта этой линии, видео запускается автоматически.

Вот код:

NSString *urlString = [[NSBundle mainBundle] pathForResource:@"Movie" ofType:@"m4v"]; 

NSURL *urlObj = [NSURL fileURLWithPath:urlString]; 

UIGraphicsBeginImageContext(CGSizeMake(1,1)); 
MPMoviePlayerViewController *player = [[MPMoviePlayerViewController alloc] initWithContentURL:urlObj]; 
UIGraphicsEndImageContext(); 

[player.view setBounds:self.view.bounds]; 
// when playing from server source type shoud be MPMovieSourceTypeStreaming 
[player.moviePlayer setMovieSourceType:MPMovieSourceTypeStreaming]; 
[player.moviePlayer setScalingMode:MPMovieScalingModeAspectFill]; 

player.moviePlayer.shouldAutoplay = NO; 

[self.view addSubview:player.view]; 
[player.moviePlayer play]; 

Am я-то здесь отсутствует ??

Я попытался получить общую продолжительность видео (используя свойство продолжительности mpmovieplayercontroller), но показывая его 0.0. как получить продолжительность видео?

ответ

4
NSString *urlString = [[NSBundle mainBundle] pathForResource:@"Movie" ofType:@"m4v"]; 
NSURL *urlObj = [NSURL fileURLWithPath:urlString]; 

UIGraphicsBeginImageContext(CGSizeMake(1,1)); 
MPMoviePlayerViewController *player = [[MPMoviePlayerViewController alloc] initWithContentURL:urlObj]; 
UIGraphicsEndImageContext(); 

[player.view setBounds:self.view.bounds]; 
// when playing from server source type shoud be MPMovieSourceTypeStreaming 
[player.moviePlayer setMovieSourceType:MPMovieSourceTypeStreaming]; // I was missing this line therefore video was not playing 
[player.moviePlayer setScalingMode:MPMovieScalingModeAspectFill]; 


[self.view addSubview:player.view]; 
[player.moviePlayer play]; 
+0

Хороший ответ. Большое спасибо. – Shivaay

2

Есть несколько вопросов здесь:

  1. Для этого типа использования (интегрирующей игрока в Вашей точки зрения), вы должны использовать MPMoviePlayerController, не MPMoviePlayerViewController. Используйте MPMoviePlayerViewController, если вы хотите иметь автономный контроллер просмотра, который может быть представлен с использованием presentMoviePlayerViewControllerAnimated:.

  2. Предполагая, что вы используете ARC, основная проблема заключается в том, что ничто не содержит ссылки на ваш игровой объект. Как следствие, игрок исчезает вскоре после его создания. Вы должны сохранить ссылку на него, назначив его переменной свойства или экземпляра вашего контроллера представления.

    Полный текст этого примера см. В Till: answer to a similar question.

  3. Я не знаю, какова ваша цель для звонков UIGraphicsBeginImageContext и UIGraphicsEndImageContext, но я не вижу, что они здесь нужны.


Что касается shouldAutoplay = NO, видео еще начиная потому, что вы звоните play сразу же после этого.


duration свойство игрока содержит только полезное значение после того, как MPMovieDurationAvailableNotification были получены. Вам нужно сделать что-то подобное следующему, чтобы иметь доступ к фактической продолжительности:

__weak MediaPlayerController *weakSelf = self; 
[[NSNotificationCenter defaultCenter] addObserverForName:MPMovieDurationAvailableNotification object:self.player queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note) { 
    NSLog(@"Movie duration: %lf", weakSelf.player.duration); 
}]; 

Использование removeObserver:name:object: для удаления наблюдателя, когда вы закончите.

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