MPMoviePlayerController не работи правилно

Правя приложение, в което се опитвам да пусна видео. Видеото започва правилно, но видеоекранът се променя в черен цвят след 4 секунди. Не знам какъв е проблема.

също така, когато задавам player.movieplayer.shouldautoplay = NO, няма ефект от този ред, видеото започва автоматично.

Ето кода:

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];

Пропускам ли нещо тук??

Опитах се да получа общата продължителност на видеото (използвайки свойството duration на mpmovieplayercontroller), но показва 0,0. как да получа продължителността на видеото??


person Poonam    schedule 12.04.2013    source източник


Отговори (2)


Тук има няколко проблема:

  1. За този тип използване (интегриране на плейъра във вашия изглед), трябва да използвате MPMoviePlayerController, а не MPMoviePlayerViewController. Използвайте MPMoviePlayerViewController, когато искате да имате самостоятелен контролер за изглед, който може да бъде представен чрез presentMoviePlayerViewControllerAnimated:.

  2. Ако приемем, че използвате ARC, основният проблем е, че нищо не поддържа препратка към вашия обект на плейър. В резултат на това играчът изчезва малко след като го създадете. Трябва да запазите препратка към него, като го присвоите на променлива на свойство или екземпляр на вашия контролер на изглед.

    За пълен пример за това вижте отличния Till /15065878/6111">отговор на подобен въпрос.

  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:, за да премахнете наблюдателя, когато сте готови.

person Martin Kenny    schedule 14.04.2013

person    schedule
comment
Хубав отговор. Благодаря много. - person Kundan; 24.06.2015