尽管API元数据另有说明,但YouTube嵌入功能会"限制在某些网站上播放"错误

jus*_* k. 11 youtube youtube-api

我正在尝试让我的客户端应用程序过滤掉不允许嵌入的视频.我的理解是,没有办法限制feed(即格式= 5不足)来做这个,我必须自己检查条目的属性,<yt:accessControl>标签和<app:control><yt:state>标签.

这不适合我.

例如,此视频:https: //www.youtube.com/watch?v = waxat-_tRH8

没有嵌入:https: //www.youtube.com/embed/waxat-_tRH8

即使API返回数据表明(据我所知)它应该能够嵌入:https: //gdata.youtube.com/feeds/api/videos/waxat-_tRH8?v = 2

该条目不包含任何<yt:noembed>标签(参见前一个问题),<media:restriction type='country' relationship='deny'>ME DE RS</media:restriction>因为我在美国( 见前一个问题),所以不解释这个(参见前一个问题).

我在这里错过了什么?

编辑:上面的嵌入链接在我的网络浏览器中工作,但不在我的客户端应用程序的WebView ....!

Jak*_*ake 9

正如杰夫波斯尼克所指出的,一些视频有黑名单.如果您尝试从应用程序而非网页请求带有黑名单的视频,您将看到以下错误消息:

"此视频包含来自___的内容.限制在某些网站上播放."

您的应用可能不会被列入黑名单,并且您被错误地列入黑名单.要解决此问题,您需要提供带有原点的Youtube API请求(如atulkhatri指出的那样).

在Youtube视频的请求标头中,设置Referer为您打算从中进行呼叫的域(例如,您应用的相应网站的域).如果您没有域,则可以轻松编写其他域,这也可能有效.

  • 对于Android(Java),您可以在此处查看示例.

  • 对于iOS,请看上面

  • 对于本地做出反应,您可以使用origin该组件上托到您的域(origin在文档中提到,但不会告诉你很多关于它的).

  • 这是另一个浏览器中相同问题的示例,当扩展程序阻止Referer标头被发送以进行良好测量时.

这个答案适用于Youtube的V3 API.


Jef*_*ick 8

某些视频应用了域级白名单或黑名单.这是由内容所有者自行决定的.

如果存在白名单或黑名单,并且无法确定嵌入网站的域(可能是因为在本机应用程序中没有真正的引用域),则默认行为是阻止回放.

这篇博文还有更多细节:http://youtube-eng.blogspot.co.uk/2011/12/understanding-playback-restrictions_28.html


Rai*_*ast 6

实际上,如果你在这里嵌入你的视频:

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

像这样:

<!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>
Run Code Online (Sandbox Code Playgroud)

它实际上是可玩的.所以这个问题实际上回归到它为什么在网站上工作而不是iOS移动应用?

然后我发现了这篇文章:

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

它解释了由于缺少HTTP头"Referer"字段,嵌入可能会受到限制.

因此,在设置引荐字段后,此视频将在iOS应用中播放:

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)
Run Code Online (Sandbox Code Playgroud)

Wala,它现在有效!

你快乐吗?因为我很开心 :)