我正在尝试让我的客户端应用程序过滤掉不允许嵌入的视频。我的理解是,没有办法限制feed(即格式= 5不足)来执行此操作,并且我必须自己检查条目的属性,<yt:accessControl>
标记和{{1} }和<app:control>
代码。
这对我不起作用。
例如,此视频: 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:state>
代码(see prior question),<yt:noembed>
无法解释此问题,因为我在美国(see prior question) (see prior question)。
我在这里缺少什么?
编辑:上面的嵌入链接在我的网络浏览器中有效,但不在我的客户端应用程序的WebView中....!
答案 0 :(得分:8)
某些视频应用了域级白名单或黑名单。这是由内容所有者自行决定的。
如果存在白名单或黑名单,并且无法确定嵌入网站的域(可能是因为在您的本机应用程序中没有真正的引用域),则默认行为是阻止播放。
此博客文章还有一些细节:http://youtube-eng.blogspot.co.uk/2011/12/understanding-playback-restrictions_28.html
答案 1 :(得分:7)
作为Jeff Posnick pointed out,有些视频有黑名单。如果您尝试从应用程序而非网页请求带有黑名单的视频,您将看到以下错误消息:
&#34;此视频包含___的内容。限制在某些网站上播放。&#34;
您的应用可能不会被列入黑名单,并且您被错误地列入黑名单。要解决此问题,您需要提供包含来源的Youtube API请求(atulkhatri pointed out)。
在Youtube视频的请求标题中,将Referer
设置为您打算通过进行通话的域名(例如,您应用的域名&#39) ;相应的网站)。如果您没有域名,则可以轻松编写其他域名,这也可能有效。
对于Android(Java),您可以看到示例here。
对于iOS,look above
对于React Native,您可以使用域中origin
道具origin
道具Referer
mentioned in the docs但不会告诉您更多信息)
Here is another example当浏览器阻止<!DOCTYPE html>
<html>
<head>
<title></title>
<script src="script.js"></script>
</head>
<body>
</body>
</html>
标题被发送以获得良好衡量标准时,浏览器中存在同一问题。
这个答案适用于Youtube的V3 API。
答案 2 :(得分: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>
它实际上是可玩的。所以这个问题实际上回到了为什么它在网站上运行而不是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)
Wala,它现在有效!
你快乐吗?因为我很开心:)答案 3 :(得分:3)
答案 4 :(得分:0)
对于那些在Android上的webView中遇到相同问题的人。我通过添加referer头字段来修复它,类似于@RainCast在她的答案中所做的。
Map<String, String> extraHeaders = new HashMap<>();
extraHeaders.put("Referer", "http://youtube.com");
String url = "https://www.youtube.com/embed/dQw4w9WgXcQ";
webView.loadUrl(url, extraHeaders);
它适用于纯URL,但我不知道如何在webView中注入iFrame时传递这些参数。
答案 5 :(得分:0)
在初始化youtube sdk时添加播放器变量:
NSDictionary *playerVars = @{
@"origin" : @"http://www.youtube.com",
};
[self.playerView loadWithVideoId:@"videoid" playerVars:playerVars];
享受!
答案 6 :(得分:-1)
尝试这样做
<iframe width="300" height="200" src="www.youtube.com/embed/<video-id>?enablejsapi=1" frameborder="0" allowfullscreen></iframe>