Lisez des vidéos YouTube avec MPMoviePlayerController au lieu de UIWebView

89

J'essaie de diffuser des vidéos YouTube en utilisant MPMoviePlayerController mais j'ai des 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 vidéo, le lecteur démarre mais disparaît après environ 20 secondes. Lorsque je l'essaye dans le simulateur, j'obtiens une vue d'alerte indiquant que le serveur n'est pas configuré correctement. Dois-je transmettre un argument 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 mais pas de chance.

jmurphy
la source
J'ai trouvé plus d'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 ouvre le lecteur puis il se ferme après 10 à 20 secondes.
jmurphy

Réponses:

78

La seule façon de faire jouer une vidéo YouTube dans votre propre application est de créer un UIWebViewavec la balise d'intégration de Youtube pour le film que vous souhaitez lire comme UIWebView'scontenu. UIWebViewdétectera que l'objet intégré est un lien Youtube et le contenu de la vue Web sera l'aperçu YouTube de la vidéo. Lorsque votre utilisateur clique sur l'aperçu, la vidéo sera affichée dans un MPMoviePlayerController. C'est la technique décrite sur le lien fourni par Muxecoid ( comment lire des vidéos youtube dans une application ), et c'est (à ma connaissance) le seul moyen de faire jouer une vidéo youtube dans une application. Vous pouvez toujours lancer l'application Youtube en passant l'URL 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 MPMoviePlayerControlleryoutube car youtube n'expose pas de liens directs vers les fichiers vidéo.

Bryan Henry
la source
1
Oui, c'est la seule façon de lire des vidéos YouTube dans votre application. J'ai passé 2 à la recherche d'alternatives. La qualité est un peu mauvaise aussi.
samvermette
N'y a-t-il toujours pas d'autre moyen - après plus de 2 ans?
fabb
Existe-t-il une possibilité d'obtenir les notifications PlaybackFinishReason et PlaybackState en cas de lecture d'une vidéo YouTube intégrée?
Roshit
7
Ce n'est pas le seul moyen. Vous pouvez obtenir le fichier mp4 sur Youtube. Je le fais dans mon projet AirPlayer Python , qui vous permet de lire des vidéos youtube sur votre AppleTV. Je vais porter ceci et l'utiliser dans mon projet iOS actuel et publier le code ici quand il sera prêt.
hellozimi
7
Malheureusement, l'utilisation d'un lien direct est interdite. Section II / 10. dans developer.google.com/youtube/terms : "Votre client API n'accédera [...] à aucune partie du contenu audiovisuel YouTube par un moyen autre que l'utilisation d'un lecteur YouTube ou d'un autre lecteur vidéo expressément autorisé par YouTube;"
Lvsti
26

Si vous utilisez 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];  
  }

La source:

Reportez-vous simplement ce lien

Assurez-vous de le tester sur l'appareil et non sur le simulateur. Puisque le simulateur affichera toujours un point d'interrogation avec une boîte bleue (il n'a pas de lecteur rapide).

Jimit
la source
23

Comme je l'ai écrit ci-dessus dans mon commentaire, je devais le faire dans un projet sur lequel je travaillais. J'ai résolu ce problème et soumis le code sur github.

Vous pouvez vérifier la source et la bifurquer ici .

Il prend essentiellement une URL youtube et obtient toutes les URL vidéo compatibles iOS.

J'espère que cela vous aidera!
À votre santé

hellozimi
la source
1
Merci! BTW, les mises à jour ont résolu le problème avec les modifications récentes de YouTube.
Peter DeWeese
1
Cela n'est pas autorisé dans les conditions d'utilisation de YouTube. Utilisez-la à vos propres risques, car votre application peut cesser de fonctionner à tout moment si YouTube constate que vous ne suivez pas les conditions d'utilisation OU si YouTube modifie le code d'intégration qu'elle génère.
Mathew
13

Je viens de tomber sur quelqu'un qui a pu placer une YouTubevidéo dans un fichier MPMoviePlayerController. Cela semble possible maintenant.

LBYouTubeView

TPoschel
la source
@Merci ça marche bien mais quand j'utilise [mpplayer stop]; pour arrêter cette vidéo, la vidéo est en cours d'exécution.Mais je veux arrêter la vidéo
Jaspreet Singh
le lien github joue-t-il également l'audio en arrière-plan?
Khalid Usman
2

Pour lire vos vidéos tube, vous devez extraire l'URL avant de la transmettre à MPMoviePlayer . Vous ne pouvez pas y jouer directement.

Mon dépôt github a une implémentation de démonstration de cela.

Voir:

https://github.com/DpzAtMicRO/IOSYoutubePlayer

Essayez-le, cela permet de charger et de lire une vidéo youtube directement dans MPMoviePlayer comme n'importe quelle autre vidéo et constitue également une très bonne approche.

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

DD_
la source
2
Contre les ToS de YouTube, malheureusement. Si vous faites cela, vous ne pouvez vous attendre à ce que votre application fonctionne aussi longtemps que YouTube ne sait pas ce que vous faites.
Mathew
Il y a quelque temps, j'ai également envoyé un e-mail aux gars de l'API YouTube pour leur demander si je pouvais analyser l'URL de la vidéo moi-même; Ceci est une citation de la réponse que j'ai obtenue: "Le seul mécanisme pris en charge est l'intégration iframe. L'accès au flux brut n'est pas pris en charge par notre ToS, à l'exception des flux RTSP basse résolution que nous fournissons pour les téléphones multifonctions"
Mathew
1
Vous m'avez convaincu du point de vote défavorable; Je conviens que cela devrait être un outil pour marquer les erreurs, et que le vote positif est suffisant pour montrer laquelle de ces réponses, je pense, est la plus pertinente pour les personnes qui tentent de résoudre le problème d'intégration de YouTube. Merde, Apparemment, StackOverflow verrouille mon vote négatif et je ne peux plus le supprimer à moins que votre réponse ne soit modifiée.
Mathew
génial! Je peux alors faire une modification et vous demander de supprimer votre vote défavorable! ... Mais ... pas besoin ... qu'il soit là!
DD_
@Mathew Beaucoup d'applications iOS légitimes font ce genre de chose (en contournant l'API de YouTube) et bien que cela enfreigne les conditions d'utilisation comme vous l'avez souligné, Google ne semble pas déranger dans de nombreux cas car il permet à leur produit d'atteindre plus de téléspectateurs.
rmp251
1

C'est aussi simple que de prendre l'élément src de l'iframe pour le nouveau code d'intégration et d'appeler

[self.webView loadRequest:[NSURLRequest requestWithURL:self.url]];
jjxtra
la source
0

Il existe un moyen officiel d'intégrer une vidéo YouTube dans l'application iOS fournie par Google.

Installer la bibliothèque via cocoapods: pod "youtube-ios-player-helper"

importer par: #import “YTPlayerView.h” utiliser UIViewet définir la classe sur YTPlayerViewou créer un objet de par YTPlayerViewprogramme.

Charger la vidéo: [self.playerView loadWithVideoId:@"M7lc1UVf-VE"];

Il existe également playVideoet des stopVideométhodes disponibles. Pour plus d'informations, visitez ce lien

Ganpat
la source