【问题标题】:Can't embed certain YouTube videos, iframe displays "the video contains content from WMG. it is restricted from playback on certain sites"无法嵌入某些 YouTube 视频,iframe 显示“视频包含来自 WMG 的内容。它被限制在某些网站上播放”
【发布时间】:2017-09-11 19:53:11
【问题描述】:

我正在 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/"}))

【问题讨论】:

  • 你是如何解决这个问题的?我检查了您的网站正在播放受限视频。
  • 我还尝试通过从 iframe 复制 src 来单独播放该视频,但它没有播放。能否提供解决方案
  • @RaghavPatnecha 在我的情况下,当我注册一个域名时问题就解决了,如果你尝试通过服务器的公共IP访问我的网站,它会给你限制视频错误。跨度>
  • 好的。谢谢您的帮助。但就我而言,我想将它用于桌面应用程序

标签: iframe youtube youtube-api clojurescript reagent


【解决方案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 属性到您的域(originmentioned in the docs 但不会告诉 你很喜欢它)。
  • Here is another example 在浏览器中出现同样的问题,因为扩展阻止了Referer 标头的发送。

注意:此答案适用于 Youtube 的 V3 API。

【讨论】:

  • 问题是服务器没有域名,显然,如果referer header是服务器的IP地址,youtube会将应用程序列入黑名单
  • 谢谢!它节省了我的时间。
猜你喜欢
  • 1970-01-01
  • 2012-09-07
  • 2014-09-14
  • 1970-01-01
  • 1970-01-01
  • 2014-06-03
  • 2020-03-04
  • 2016-09-03
  • 2019-10-14
相关资源
最近更新 更多