Spielen Sie YouTube-Videos mit MPMoviePlayerController anstelle von UIWebView ab

89

Ich versuche, einige youTube-Videos mit dem MPMoviePlayerController zu streamen, habe jedoch einige Probleme. Der Code, den ich verwende, ist ziemlich einfach und ich kann .m4v-Videos abspielen, indem ich eine URL an initWithContentURL übergebe. Wenn ich den Movie Player starte, wird der Player gestartet, verschwindet jedoch nach etwa 20 Sekunden. Wenn ich es im Simulator versuche, erhalte ich eine Warnansicht, die besagt, dass der Server nicht richtig konfiguriert ist. Gibt es ein Argument, das ich mit der URL übergeben muss, um eine bestimmte Art von Video-Feed von Google zu erhalten?

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

[moviePlayer play];

Ich habe auch die folgenden URLs ausprobiert: http://www.youtube.com/watch?v=HGd9qAfpZio

Ich habe auch das Argument & format = 1 gesehen und versucht, das am Ende beider Zeichenfolgen hinzuzufügen, aber kein Glück.

jmurphy
quelle
Ich habe weitere Informationen gefunden, aber es funktioniert immer noch nicht. Jemand hat vorgeschlagen, dies für eine URL zu verwenden: youtube.com/get_video?video_id=ID&t=SIGNATURE&fmt=18 Ich habe meine Video-ID eingegeben, weiß aber nicht, was eine Signatur ist. Und der Videoplayer verhält sich immer noch genauso. Es öffnet den Player und schließt nach 10 bis 20 Sekunden.
jmurphy

Antworten:

78

Die einzige Möglichkeit, ein YouTube-Video in Ihrer eigenen App abzuspielen, besteht darin, ein UIWebViewmit dem eingebetteten Tag von Youtube für den Film zu erstellen, den Sie als UIWebView'sInhalt abspielen möchten . UIWebViewerkennt, dass das eingebettete Objekt ein Youtube-Link ist, und der Inhalt der Webansicht ist die Youtube-Vorschau für das Video. Wenn Ihr Benutzer auf die Vorschau klickt, wird das Video in einem MPMoviePlayerController angezeigt. Dies ist die Technik, die unter dem von Muxecoid bereitgestellten Link beschrieben wird ( wie YouTube-Videos in einer Anwendung abgespielt werden ), und dies ist (soweit ich weiß) die einzige Möglichkeit, ein YouTube-Video in einer Anwendung abzuspielen. Sie können die Youtube-Anwendung weiterhin starten, indem Sie die Youtube-URL an übergeben. Dadurch -[UIApplication openURL:]wird jedoch Ihre eigene Anwendung geschlossen, was häufig unerwünscht ist.

Leider gibt es keine Möglichkeit, ein YouTube-Video direkt abzuspielen, MPMoviePlayerControllerda YouTube keine direkten Links zu den Videodateien bereitstellt.

Bryan Henry
quelle
1
Ja, das ist die einzige Möglichkeit, YouTube-Videos in Ihrer App abzuspielen. Verbrachte 2 auf der Suche nach Alternativen. Qualität ist auch ein bisschen schlecht.
Samvermette
Gibt es noch keinen anderen Weg - nach mehr als 2 Jahren?
Fabb
Gibt es eine Möglichkeit, die Benachrichtigungen PlaybackFinishReason und PlaybackState zu erhalten, wenn ein eingebettetes YouTube-Video abgespielt wird?
Roshit
7
Dies ist nicht der einzige Weg. Sie können die mp4-Datei von Youtube erhalten. Das mache ich in meinem AirPlayer Python-Projekt , mit dem Sie YouTube-Videos auf Ihrem AppleTV abspielen können. Ich werde dies portieren und in meinem aktuellen iOS-Projekt verwenden und den Code hier veröffentlichen, wenn er fertig ist.
Hellozimi
7
Die Verwendung eines direkten Links ist leider verboten. Abschnitt II / 10. in developer.google.com/youtube/terms : "Dein API-Client wird [...] auf keinen Teil von audiovisuellen Inhalten von YouTube auf andere Weise als durch die Verwendung eines YouTube-Players oder eines anderen von YouTube ausdrücklich autorisierten Video-Players zugreifen."
Lvsti
26

Wenn Sie Code verwenden:

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

Quelle:

Verweisen Sie einfach auf diesen Link

Stellen Sie sicher, dass Sie es auf dem Gerät und nicht auf dem Simulator testen. Da der Simulator immer ein Fragezeichen mit blauem Kästchen anzeigt (es gibt keinen Schnellspieler).

Jimit
quelle
23

Wie ich oben in meinem Kommentar geschrieben habe, musste ich dies in einem Projekt tun, an dem ich arbeitete. Ich habe dieses Problem gelöst und den Code auf Github eingereicht.

Sie können die Quelle überprüfen und Gabel hier .

Grundsätzlich wird eine YouTube-URL benötigt, um alle iOS-kompatiblen Video-URLs abzurufen.

Hoffe das ist zu jeder Hilfe!
Prost

hellozimi
quelle
1
Vielen Dank! Übrigens haben die Updates das Problem mit den letzten YouTube-Änderungen behoben.
Peter DeWeese
1
Dies ist unter den ToS von YouTube nicht zulässig. Verwenden Sie es auf eigenes Risiko, da Ihre App möglicherweise jederzeit nicht mehr funktioniert, wenn YouTube feststellt, dass Sie den Nutzungsbedingungen nicht folgen, oder wenn YouTube den von ihr generierten Einbettungscode ändert.
Mathew
13

Ich bin gerade auf jemanden gestoßen, der ein YouTubeVideo in einem platzieren konnte MPMoviePlayerController. Es scheint jetzt möglich zu sein.

LBYouTubeView

TPoschel
quelle
@Thanx es funktioniert gut, aber wenn ich [mpplayer stop] benutze; Um dieses Video zu stoppen,
läuft
Spielt der Github-Link das Audio auch im Hintergrund ab?
Khalid Usman
2

Um Ihre Tube-Videos abzuspielen, müssen Sie die URL extrahieren, bevor Sie die URL weitergeben MPMoviePlayer. Sie können es nicht direkt spielen.

Mein Github-Repo hat eine Demo-Implementierung davon.

Sehen:

https://github.com/DpzAtMicRO/IOSYoutubePlayer

Probieren Sie es aus, dies ermöglicht das Laden und Abspielen von YouTube-Videos direkt in MPMoviePlayerjedem anderen Video und ist auch ein ziemlich guter Ansatz.

BEARBEITEN: Stellen Sie sicher, dass Sie Readme.md gut durchgehen, bevor Sie dies in Ihrem Projekt verwenden

D_D
quelle
2
Gegen YouTube's ToS leider. Wenn du dies tust, kannst du nur erwarten, dass deine App so lange funktioniert, wie YouTube nicht weiß, was du tust.
Mathew
Ich habe vor einiger Zeit auch eine E-Mail an die YouTube-API-Leute gesendet, um zu fragen, ob es für mich in Ordnung wäre, die Video-URL selbst zu analysieren. Dies ist ein Zitat aus der Antwort, die ich erhalten habe: "Der einzige unterstützte Mechanismus ist das Einbetten des Iframes. Der Raw-Stream-Zugriff wird von unseren ToS nicht unterstützt, außer den niedrigauflösenden RTSP-Streams, die wir für Feature-Telefone bereitstellen"
Mathew,
1
Sie haben mich in Bezug auf den Abstimmungspunkt überzeugt. Ich bin damit einverstanden, dass es ein Werkzeug sein sollte, um Unkorrektheit zu markieren, und dass Upvoting ausreicht, um zu zeigen, welche dieser Antworten meiner Meinung nach für Leute am relevantesten sind, die versuchen, das YouTube-Einbettungsproblem zu lösen. Verdammt, anscheinend sperrt StackOverflow meine Downvote und ich kann sie nicht mehr entfernen, es sei denn, Ihre Antwort wurde bearbeitet.
Mathew
großartig! Ich kann eine Bearbeitung vornehmen und Sie bitten, Ihre Downvote dann zu entfernen! ... aber ... keine Notwendigkeit ... lass es da sein!
D_D
@Mathew Viele legitime iOS-Apps tun dies (unter Umgehung der YouTube-API), und obwohl es, wie Sie bereits betont haben, gegen die Nutzungsbedingungen verstößt, scheint es Google in vielen Fällen nichts auszumachen, da es ihrem Produkt ermöglicht, es zu erreichen mehr Zuschauer.
rmp251
1

Es ist so einfach wie das src-Element des iframe für den neuen Einbettungscode zu nehmen und aufzurufen

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

Es gibt eine offizielle Möglichkeit, YouTube-Videos in eine von Google bereitgestellte iOS-Anwendung einzubetten.

Installieren Sie die Bibliothek über Cocoapods: pod "youtube-ios-player-helper"

Import von: #import “YTPlayerView.h” Verwenden UIViewund setzen Sie die Klasse auf YTPlayerViewoder erstellen Sie ein Objekt von YTPlayerViewprogrammgesteuert.

Video laden: [self.playerView loadWithVideoId:@"M7lc1UVf-VE"];

Es gibt auch playVideound stopVideoMethoden zur Verfügung. Für weitere Informationen besuchen Sie diesen Link

Ganpat
quelle