12

我试图让我的客户端应用程序过滤掉不允许嵌入的视频。我的理解是没有办法限制提要(即 format=5 是不够的)来做到这一点,我必须自己检查条目的属性,<yt:accessControl>标签和<app:control>and<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 中无效......!?

4

7 回答 7

9

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

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

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

于 2012-11-19T22:15:41.613 回答
9

正如Jeff Posnick 指出的那样,一些视频有黑名单。如果您尝试从应用程序而不是网页请求带有黑名单的视频,您将看到以下错误消息:

“此视频包含来自 ___ 的内容。它被限制在某些网站上播放。”

很可能您的应用没有被列入黑名单,并且您被错误地列入黑名单。要解决这个问题,您需要为您的 Youtube API 请求提供一个来源(正如atulkhatri 指出的那样)。

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

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

于 2016-09-22T22:56:03.653 回答
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.metacn.com/hc/en-us/articles/204513985-Video-Player-Embed-Restriction

它解释说,由于缺少 HTTP 标头“Referer”字段,嵌入可能会受到限制。

所以在设置了refer字段后,这个视频将在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)

瓦拉,它现在可以工作了!

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

于 2016-02-23T03:17:55.970 回答
3

你可以使用这个答案。这在我的情况下非常有效 -

添加为origin_player varshttps://www.youtube.com

看到这个答案

于 2016-04-03T10:38:35.430 回答
1

对于那些在 Android 上的 webView 中遇到同样问题的人。我通过添加与@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 时传递这些参数。

于 2017-10-03T22:57:24.123 回答
0

在初始化 youtube sdk 时添加播放器变量:

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

享受!

于 2018-01-31T11:14:38.490 回答
-1

试试这样

<iframe width="300" height="200" src="www.youtube.com/embed/<video-id>?enablejsapi=1" frameborder="0" allowfullscreen></iframe>
于 2016-11-30T05:30:58.990 回答