2013-07-03 3 views
0

J'essaie d'afficher une vidéo en utilisant MPMoviePlayerController, mais je n'arrive pas à la faire fonctionner. Ma vidéo est sur mon serveur. Donc, j'essaie de l'afficher de cette façon:MPMoviePlayerController ne charge pas ma vidéo

-(void) playMovieAtURL: (NSURL*) theURL { 
    moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:theURL]; 
    moviePlayer.view.frame = self.view.bounds; 
    moviePlayer.controlStyle = MPMovieControlModeDefault; 
    moviePlayer.movieSourceType = MPMovieSourceTypeFile; 
    moviePlayer.fullscreen = YES; 

    [self.view addSubview:moviePlayer.view]; 
    [moviePlayer prepareToPlay]; 
    [moviePlayer play]; 
} 

moviePlayer est une propriété de mon viewController. L'URL donnée est correcte (testée en safari). Ma vidéo est une vidéo .mov.

Lorsque ma fonction est appelée, j'ai juste un écran noir. Les contrôles n'apparaissent pas, et je pense que la vidéo ne se charge pas car dans la barre d'état de l'application, l'indicateur d'activité réseau ne s'affiche pas.

Toute aide est la bienvenue.

EDIT

Je viens de remarquer que d'essayer d'atteindre la vidéo à partir du résultat de l'application Safari de l'appareil ceci: enter image description here

EDIT 2

Ma vidéo est de 480 × 850, et MPMoviePlayerController prend uniquement en charge la vidéo jusqu'à 640 x 480. Il ne peut donc pas être lu avec ce cadre. Dois-je redimensionner ma vidéo ou y a-t-il d'autres cadres que je peux utiliser pour l'afficher? Je juste besoin d'un joueur très simple ...

Répondre

1

Est-ce que cette façon:

-(void)playMovieAtURL:: (NSURL*) url 
{ 

    moviePlayer = [[MPMoviePlayerController alloc] 
       initWithContentURL:url]; 

    [[NSNotificationCenter defaultCenter] addObserver:self 
        selector:@selector(moviePlayBackDidFinish:) 
        name:MPMoviePlayerPlaybackDidFinishNotification 
        object:moviePlayer]; 

    moviePlayer.controlStyle = MPMovieControlStyleDefault; 
    moviePlayer.shouldAutoplay = YES; 
    [self.view addSubview:moviePlayer.view]; 
    [moviePlayer setFullscreen:YES animated:YES]; 
    [moviePlayer play]; 
    [self.view bringSubviewToFront:moviePlayer.view]; 
} 


- (void) moviePlayBackDidFinish:(NSNotification*)notification { 
    MPMoviePlayerController *player = [notification object]; 
    [[NSNotificationCenter defaultCenter] 
     removeObserver:self 
     name:MPMoviePlayerPlaybackDidFinishNotification 
     object:player]; 

    if ([player 
     respondsToSelector:@selector(setFullscreen:animated:)]) 
    { 
     [player.view removeFromSuperview]; 
    } 
} 
+0

Merci pour votre réponse. Maintenant, les contrôles sont affichés. Mais je reçois un chargement infini ... Ma vidéo n'est jamais jouée, et je n'ai toujours aucun indicateur d'activité dans la barre d'état – zbMax

+0

ajouté la fonction de lecture et bringSubViewToFront. – lakesh

+0

J'ai ajouté cela dans playMovieAtURL, mais ça ne change rien. La vue MPMoviePlayerController est affichée et les contrôleurs aussi (preview, play, next) mais dans la barre d'outils supérieure, près du bouton "done", est écrit @ "Loading ..." avec un indicateur d'activité. Je manque un cadre? un protocole de délégué? En passant, est-il normal que 'moviePlayBackDidFinish:' soit appelé juste après l'affichage de la vue de MPMoviePlayerController? – zbMax

1

// vous pouvez faire comme ceci

-(void)playMovie:(id)sender 
{ 
    NSURL *url = [NSURL URLWithString: 
    @"http://www.xxxx.com/movie.mov"]; 

_moviePlayer = [[MPMoviePlayerController alloc] 
      initWithContentURL:url]; 

[[NSNotificationCenter defaultCenter] addObserver:self 
       selector:@selector(moviePlayBackDidFinish:) 
       name:MPMoviePlayerPlaybackDidFinishNotification 
       object:_moviePlayer]; 

_moviePlayer.controlStyle = MPMovieControlStyleDefault; 
_moviePlayer.shouldAutoplay = YES; 
[self.view addSubview:_moviePlayer.view]; 
[_moviePlayer setFullscreen:YES animated:YES]; 

}

// La cible -Méthode de notification d'action

- (void) moviePlayBackDidFinish:(NSNotification*)notification { 
    MPMoviePlayerController *player = [notification object]; 
[[NSNotificationCenter defaultCenter] 
    removeObserver:self 
    name:MPMoviePlayerPlaybackDidFinishNotification 
    object:player]; 

if ([player 
    respondsToSelector:@selector(setFullscreen:animated:)]) 
{ 
    [player.view removeFromSuperview]; 
} 
} 
+0

Merci pour votre réponse. C'est semblable à celui de lakesh. Pouvez-vous s'il vous plaît regarder un commentaire? – zbMax

+0

Oh ok bien je n'ai pas vérifié sa réponse ... "Ma vidéo n'est jamais jouée Mais je reçois un chargement infini .... ici des moyens de chargement infinis .. pouvez-vous expliquer clairement – Alex

+0

Je veux dire: la vue MPMoviePlayerController est affiche et les contrôleurs aussi (preview, play, next) mais dans la barre d'outils supérieure, près du bouton "done", est écrit @ "Loading ..." avec un indicateur d'activité Mais la vidéo n'est jamais affichée (et peut-être jamais chargée – zbMax

Questions connexes