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.


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.


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).


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


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


@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


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


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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.