我正在使用ClojureScript和Reagent构建即时YouTube客户端,当我尝试播放大多数音乐视频时,它目前正在http://instatube.net/,它显示错误“视频包含来自X的内容。它受限于在某些网站上播放“,但同一视频在我的本地服务器上播放得很好,iframe在两种情况下都会发送相同的引用和原始标头,当我在此处嵌入视频时它也可以正常工作https://www.w3schools.com/html/tryit.asp?filename=tryhtml_default 我不明白这是什么问题,这是我的iframe试剂组件
[:iframe {:class "embed-responsive-item"
:allow-full-screen "allowfullscreen"
:frame-border 0
:auto-play 1
:src (str "https://www.youtube.com/embed/" (if (nil? videoId)
"SW-BU6keEUw" videoId) "?autoplay=1&enablejsapi=1")}]]
这是我发送给YouTube搜索API v3的ajax请求 cljs-AJAX
(fn [term]
(ajax/GET
"https://www.googleapis.com/youtube/v3/search"
{:params {:q term
:maxResults 5
:part "snippet"
:type "video,playlist"
:key YOUTUBE_API_KEY}
:handler handle-youtube-resonse
:response-format (ajax/json-response-format {:keywords? true})
:headers {:referer "https://www.youtube.com/"
:x-spf-referer "https://www.youtube.com/"}))
答案 0 :(得分:1)
此SO post中也遇到了相关错误。
某些视频应用了域级白名单或黑名单 他们。这是由内容所有者自行决定的。
如果有白名单或黑名单,以及该域名 嵌入网站无法确定(也许是因为没有 然后,在您的本机应用程序的情况下,一个真正的引用域) 默认行为是阻止播放。
此博客文章还有更多细节: http://youtube-eng.blogspot.co.uk/2011/12/understanding-playback-restrictions_28.html
另一个答案也有一点,如果您尝试从应用程序而不是网页请求列入黑名单的视频,您将收到以下错误消息:
"This video contains content from ___. It is restricted from playback on certain sites."
您被错误列入黑名单。检查this answer in a SO post以解决此问题。
您需要提供包含来源的Youtube API请求。
在Youtube视频的请求标题中,将
Referer
设置为您打算从中进行呼叫的域,(例如,应用程序相应网站的域名)。如果你没有 一个域,你可以轻松地写一些其他域,这可能 也工作。
- 对于Android(Java),您可以看到示例here。
- 对于iOS,look above
- 对于React Native,您可以使用域中
浏览器中的同一问题的origin
道具origin
道具<!DOCTYPE html> <html> <body> <h2>My First Web Page</h2> <p>My First Paragraph.</p> <p id="demo"></p> <script> document.getElementById("demo").innerHTML = 5 + 6; </script> </body> </html>
mentioned in the docs但不告诉您 你很喜欢它。)- Here is another example,当扩展程序阻止Referer标头被发送以进行良好测量时。
注意:此答案适用于Youtube的V3 API。