wake-up-neo.com

Bei der YouTube-Einbettung wird der Fehler "Auf bestimmten Websites nicht wiedergegeben" angezeigt, obwohl API-Metadaten etwas anderes angeben

Ich versuche, dass meine Clientanwendung Videos herausfiltert, die keine Einbettung zulassen. Ich verstehe hier, dass es keine Möglichkeit gibt, den Feed einzuschränken (d. H. Format = 5 ist nicht ausreichend), und ich muss die Eigenschaften des Eintrags selbst für das <yt:accessControl>-Tag und die <app:control>- und <yt:state>-Tags überprüfen.

Das funktioniert nicht für mich.

Zum Beispiel dieses Video: https://www.youtube.com/watch?v=waxat-_tRH8

bettet nicht ein: https://www.youtube.com/embed/waxat-_tRH8

obwohl die API zurückgegebene Daten angibt (soweit ich das beurteilen kann), sollte sie eingebettet werden können: https://gdata.youtube.com/feeds/api/videos/waxat-_tRH8? v = 2

Der Eintrag enthält kein <yt:noembed>-Tag (siehe vorherige Frage) und der <media:restriction type='country' relationship='deny'>ME DE RS</media:restriction> erklärt dies nicht, da ich in den USA bin. (siehe vorherige Frage)(siehe vorherige Frage) .

Was fehlt mir hier?

BEARBEITEN: Der eingebettete Link oben funktioniert in meinem Webbrowser, aber nicht in der WebView meiner Client-App ....!?

11
justin k.

Auf bestimmte Videos wird eine Whitelist oder Blacklist auf Domänenebene angewendet. Dies erfolgt im Ermessen des Inhaltseigentümers.

Wenn es eine Whitelist oder eine Blacklist gibt und die Domäne der Einbettungssite nicht bestimmt werden kann (möglicherweise, weil es sich bei Ihrer nativen Anwendung nicht um eine echte verweisende Domäne handelt), wird die Wiedergabe standardmäßig blockiert.

Dieser Blogbeitrag enthält auch ein wenig mehr Details: http://youtube-eng.blogspot.co.uk/2011/12/understanding-playback-restrictions_28.html

8
Jeff Posnick

Wie auf Jeff Posnick hingewiesen wurde, haben einige Videos schwarze Listen. Wenn Sie versuchen, ein Video mit einer Blacklist von einer App und nicht von einer Webseite anzufordern, wird diese Fehlermeldung angezeigt:

"Dieses Video enthält Inhalte von ___. Auf bestimmten Websites ist die Wiedergabe nicht möglich."

Es ist wahrscheinlich, dass Ihre App NICHT auf der schwarzen Liste steht und dass Sie falsch auf der schwarzen Liste stehen. Um dies zu beheben, müssen Sie Ihre Youtube API-Anfrage mit einem Origin versehen (wie atulkhatri darauf hinweist ). 

Setzen Sie im Anforderungsheader für das Youtube-Video Referer auf die Domäne, in der Sie den Aufruf von durchführen möchten (z. B. die Domäne der entsprechenden Website Ihrer App). Wenn Sie keine Domäne haben, können Sie leicht eine andere Domäne schreiben, und das funktioniert auch. 

  • Für Android (Java) können Sie ein Beispiel hier sehen. 

  • Für iOS siehe oben

  • Für React Native können Sie die Origin -Eigenschaft der Komponente Ihrer Domäne verwenden (Origin ist in den docs erwähnt, sagt Ihnen aber nicht viel darüber aus).

  • Hier ist ein weiteres Beispiel für dasselbe Problem in einem Browser, als eine Erweiterung den Referer-Header blockiert hat, damit er nicht korrekt gesendet werden konnte.

Diese Antwort funktioniert für die V3-API von Youtube.

7
Jake

Eigentlich, wenn Sie Ihr Video hier einbetten:

http://www.w3schools.com/html/tryit.asp?filename=tryhtml_default

So was:

<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
</head>
<body>
<iframe width="420" height="315" src="https://www.youtube.com/embed/waxat-_tRH8" frameborder="0" allowfullscreen></iframe>
</body>
</html>

Es ist tatsächlich spielbar. Das Problem kommt also tatsächlich darauf zurück, warum es auf der Website funktioniert, aber nicht auf der mobilen App für iOS?

Dann erfuhr ich über diesen Beitrag:

http://support.metacdn.com/hc/en-us/articles/204513985-Video-Player-Embed-Restriction

Es erklärt, dass die Einbettung möglicherweise eingeschränkt wurde, weil das Feld "Referer" des HTTP-Headers fehlt.

Nachdem Sie das Referenzfeld festgelegt haben, wird dieses Video in der iOS-App abgespielt:

let youtubeURL = NSURL(string: "https://www.youtube.com/embed/YQHsXMglC9A?autoplay=1") 
let youtubeRequest = NSMutableURLRequest(URL: youtubeURL!) 
youtubeRequest.setValue("https://www.youtube.com", forHTTPHeaderField: "Referer") 
webView.loadRequest(youtubeRequest)

Wala, es funktioniert jetzt!

Sind Sie glücklich? weil ich glücklich bin :)

6
RainCast

Sie können diese Antwort verwenden. Das funktionierte in meinem Fall perfekt.

Hinzufügen von Origin in player vars als https://www.youtube.com

Diese Antwort sehen

3
atulkhatri

Für diejenigen, die das gleiche Problem in webView auf Android haben. Ich habe das behoben, indem ich das referer-Header-Feld ähnlich wie bei @RainCast in ihrer Antwort hinzugefügt habe. 

 Map<String, String> extraHeaders = new HashMap<>();
 extraHeaders.put("Referer", "http://youtube.com");
 String url = "https://www.youtube.com/embed/dQw4w9WgXcQ";

 webView.loadUrl(url, extraHeaders);

Es funktioniert für reine URLs, aber ich weiß nicht, wie ich diese Parameter übergeben soll, während iFrame in das WebView eingefügt wird.

0

Fügen Sie während der Initialisierung von youtube sdk Player-Vars hinzu:

NSDictionary *playerVars = @{
                             @"Origin" : @"http://www.youtube.com",
                             };
[self.playerView loadWithVideoId:@"videoid" playerVars:playerVars];

Genießen!

0
Logic