89 votes

Lire les vidéos YouTube avec MPMoviePlayerController au lieu de UIWebView

J'essaie de diffuser des vidéos YouTube à l'aide du MPMoviePlayerController, mais je rencontre quelques problèmes. Le code que j'utilise est assez simple et je peux lire des vidéos .m4v en passant une URL à initWithContentURL. Lorsque je lance le lecteur de films, le lecteur apparaît mais disparaît après environ 20 secondes. Lorsque je l'essaie dans le simulateur, j'obtiens une vue d'alerte qui indique que le serveur n'est pas configuré correctement. Y a-t-il un argument que je dois passer avec l'URL pour obtenir un type spécifique de flux vidéo de Google ?

NSURL *videoURL = [NSURL URLWithString:@"http://www.youtube.com/v/HGd9qAfpZio&hl=en_US&fs=1&"];
MPMoviePlayerController *moviePlayer;
moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:videoURL];

[moviePlayer play];

J'ai également essayé les URL suivantes http://www.youtube.com/watch?v=HGd9qAfpZio

J'ai également vu l'argument &format=1 et j'ai essayé de l'ajouter à la fin des deux chaînes de caractères, mais sans succès.

0 votes

J'ai trouvé d'autres informations, mais cela ne fonctionne toujours pas. Quelqu'un a suggéré d'utiliser ceci pour une URL : youtube.com/get_video?video_id=ID&t=SIGNATURE&fmt=18 J'ai mis mon ID vidéo mais je ne sais pas ce qu'est la signature ? Et le lecteur vidéo se comporte toujours de la même manière. Il s'ouvre puis se ferme après 10 à 20 secondes.

78voto

Sbrocket Points 5267

La seule façon de faire jouer une vidéo Youtube dans votre propre application est de créer un fichier de type UIWebView avec la balise d'intégration de Youtube pour le film que vous voulez lire comme le UIWebView's contenu. UIWebView détectera que l'objet incorporé est un lien Youtube, et le contenu de la vue web sera l'aperçu Youtube de la vidéo. Lorsque l'utilisateur cliquera sur l'aperçu, la vidéo sera affichée dans un MPMoviePlayerController. C'est la technique décrite dans le lien fourni par Muxecoid ( comment lire des vidéos youtube dans une application ), et c'est (pour autant que je sache) le seul moyen de faire jouer une vidéo Youtube dans une application. Vous pouvez toujours lancer l'application Youtube en passant l'URL de youtube à -[UIApplication openURL:] mais bien sûr, cela ferme votre propre application, ce qui est souvent indésirable.

Malheureusement, il n'y a aucun moyen de lire directement une vidéo youtube avec MPMoviePlayerController parce que youtube n'expose pas les liens directs vers les fichiers vidéo.

1 votes

Oui, c'est le seul moyen de lire des vidéos YouTube dans votre application. J'ai passé 2 ans à chercher des alternatives. La qualité est assez mauvaise, aussi.

0 votes

N'y a-t-il toujours pas d'autre solution - après plus de deux ans ?

0 votes

Existe-t-il une possibilité d'obtenir les notifications PlaybackFinishReason et PlaybackState en cas de lecture d'une vidéo youtube intégrée ?

26voto

Jimit Points 516

Si vous utilisez le code :

- (void)embedYouTube:(NSString*)url frame:(CGRect)frame {  
     NSString* embedHTML = @"\ 
        <html><head>\ 
     <style type=\"text/css\">\ 
     body {\ 
     background-color: transparent;\ 
     color: white;\ 
    }\ 
   </style>\ 
    </head><body style=\"margin:0\">\ 
       <embed id=\"yt\" src=\"%@\" type=\"application/x-shockwave-flash\" \ 
    width=\"%0.0f\" height=\"%0.0f\"></embed>\ 
       </body></html>";  
   NSString* html = [NSString stringWithFormat:embedHTML, url, frame.size.width, frame.size.height];  
   if(videoView == nil) {  
      videoView = [[UIWebView alloc] initWithFrame:frame];  
     [self.view addSubview:videoView];  
    }  
    [videoView loadHTMLString:html baseURL:nil];  
  }

Source :

Il suffit de consulter ce lien

Veillez à le tester sur le dispositif et non sur le simulateur. En effet, le simulateur affichera toujours un point d'interrogation avec une boîte bleue (il n'a pas de lecteur rapide).

23voto

hellozimi Points 1465

Comme je l'ai écrit plus haut dans mon commentaire, j'ai dû faire cela dans un projet sur lequel je travaillais. J'ai résolu ce problème et soumis le code sur github.

Vous pouvez vérifier le source et le fork aquí .

Il prend l'url d'un youtube et récupère toutes les urls des vidéos compatibles iOS.

J'espère que cela vous aidera !
Cheers

1 votes

Merci ! BTW, les mises à jour ont corrigé le problème avec les changements récents de YouTube.

1 votes

Ceci n'est pas autorisé par les CGU de YouTube. Utilisez-la à vos risques et périls, car votre application peut cesser de fonctionner à tout moment si YouTube remarque que vous ne respectez pas les CGU OU si YouTube modifie le code d'intégration qu'il génère.

12voto

TPoschel Points 1341

Je viens de tomber sur quelqu'un qui a réussi à placer un YouTube vidéo à l'intérieur d'un MPMoviePlayerController . Cela semble possible maintenant.

LBYouTubeVoir

0 votes

@Thanx its working fine but when i use [mpplayer stop] ; to stop this video then the video is running.but i want to stop video

0 votes

Le lien github joue-t-il aussi l'audio en arrière-plan ?

2voto

MicRO Points 3255

Pour lire les vidéos de You Tube, vous devez extraire l'url avant de la passer dans la fenêtre de lecture. MPMoviePlayer . Vous ne pouvez pas le lire directement.

Mon répertoire Github contient une démonstration de cette mise en œuvre.

Ver:

https://github.com/DpzAtMicRO/IOSYoutubePlayer

Essayez-le, il permet de charger et de lire une vidéo youtube directement dans l'application. MPMoviePlayer comme n'importe quelle autre vidéo et c'est aussi une bonne approche.

EDIT : Assurez-vous de bien lire le Readme.md avant de l'utiliser dans votre projet.

2 votes

Contre les conditions d'utilisation de YouTube, malheureusement. Si vous faites cela, vous ne pouvez espérer que votre application fonctionne tant que YouTube n'est pas au courant de ce que vous faites.

0 votes

J'ai également envoyé un courriel aux responsables de l'API YouTube il y a quelque temps pour leur demander si je pouvais analyser moi-même l'URL de la vidéo ; voici un extrait de la réponse que j'ai reçue : "Le seul mécanisme pris en charge est l'intégration d'une iframe. L'accès au flux brut n'est pas pris en charge par nos conditions d'utilisation, à l'exception des flux RTSP à faible résolution que nous fournissons pour les téléphones fonctionnels".

1 votes

Vous m'avez convaincu sur le point du downvoting ; je suis d'accord sur le fait que cela devrait être un outil pour marquer l'incorrection, et que l'upvoting est suffisant pour montrer lesquelles de ces réponses sont, selon moi, les plus pertinentes pour les personnes essayant de résoudre le problème de l'intégration de YouTube. Bon sang, apparemment StackOverflow bloque mon downvote et je ne peux plus l'enlever à moins que votre réponse ne soit modifiée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X