【问题标题】:Embed Youtube code is not working in HTML嵌入 Youtube 代码在 HTML 中不起作用
【发布时间】:2018-12-27 16:55:56
【问题描述】:

我正在尝试在 HTML 中使用嵌入 youtube 代码,但是当我按下播放按钮时,它显示“此视频不可用”。我正在使用以下 HTML 代码:

<iframe width="560" height="315" src="https://www.youtube.com/embed/JfJYHfrOGgQ" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>

谁能帮我解决这个问题?我也尝试过其他嵌入 youtube 视频,仍然说同样的话。我正在使用 Chrome。

【问题讨论】:

  • 可能是您正在嵌入的视频的所有者禁用了嵌入。
  • 它正在工作,否则你甚至看不到 youtube 播放器。
  • 是的,我确实看到了 youtube 播放器,当我尝试播放视频时,它说该视频不可用。我尝试了很多嵌入 youtube,不可能是我选择的所有视频都被所有者禁用了嵌入。

标签: html


【解决方案1】:

TL;DR

Youtube 仅允许使用嵌入/iframe 流式传输 https 页面。

确保视频所有者允许嵌入。

设置限制较少的引荐来源网址政策,例如 "no-referrer-when-downgrade",以便让 youtube 知道请求的来源。在 django 中,您可以通过在 settings.py 中添加以下行来做到这一点

SECURE_REFERRER_POLICY = "no-referrer-when-downgrade"

长读:

如果您最近在 django 应用程序中遇到此问题,可能是因为 django 3 中的推荐人策略最近发生了变化。阅读更多 here

当您为 youtube 视频添加 iframe 时(鉴于视频所有者允许嵌入),引用者(正在播放视频的主机来源)将由脚本发送到 youtube在 iframe 内(嵌入 url 获得一个新页面,其中包含所有必需的脚本)。如果服务器设置了一个阻止与引用者通信的引用者策略,则 youtube 会拒绝播放请求并以 204 响应 - 无内容。

从 django v3.x 开始,referrer 策略默认设置为 "same-origin",这太严格了,无法让 youtube 知道来源。在这种情况下,youtube 不允许播放视频并返回代码 204。

这可以通过设置限制较少的引荐来源网址政策来解决。您可以使用"no-referrer-when-downgrade"。 在 django 中,您可以使用 settings.py 文件中的以下变量进行设置。

SECURE_REFERRER_POLICY = "no-referrer-when-downgrade"

上述政策规定,当访问协议降级时,referrer 将作为空发送,否则源将作为referrer 发送(这是可以接受的)。鉴于此,youtube 仅允许 httpsorigins,对于这种情况,这意味着如果 iframe 嵌入到带有 https 的网页中,则引荐来源网址将被正确发送,并且应该通过此类嵌入播放 youtube 视频时不会引起问题。

【讨论】:

  • 我一直在到处寻找如何解决我的问题,这很好地解决了我的问题。该死的。
  • 如果您不想更改整个站点的引荐来源网址政策,也可以在&lt;iframe&gt; 上使用referrerpolicy 属性
【解决方案2】:

对我来说,这是由我网站上的推荐人政策“无推荐人”引起的。设置 no-referrer 时,Youtube 似乎会阻止嵌入。

希望能避免有人在这些废话上浪费时间。

【讨论】:

  • 对我来说还不够
  • @VincentAlex 很遗憾听到这个消息,但我在具有不同 yt 来源的多台服务器上复制了引荐来源的东西 - 并且没有具体的错误消息 - 这有点误导。所以我认为这个提示对于搜索“此视频不可用”的原因的人可能很有用,尽管当然还有其他可能的原因可能导致错误。
  • 找到了答案,我们必须通过域名访问html文件,而不是本地C:/。 Youtube 有一个域白名单。
  • @VincentAlex 不是真的,请检查此链接youtube.com/embed/6CerdjvePsg 如果它不播放此视频,则它的 youtube 的嵌入 url 事件没有其他域。但是在youtube上玩youtube.com/watch?v=6CerdjvePsg&feature=youtu.be
【解决方案3】:

我最近遇到了同样的问题,这与视频所有者嵌入设置无关。显然,YouTube 禁止在没有公共域的 localhost 环境中嵌入一些视频,但您的视频可以通过公共域/子域毫无问题地嵌入:用您的视频链接替换 ​​@PStarczewski 的答案中的 JSFiddle 中的 src 值,它将正常工作。

【讨论】:

  • @Pearl Oyun,如果我的回答符合条件,请考虑将我的回答标记为已接受,谢谢
  • 谢谢!这帮助我确定了问题,并且我能够在这里找到更具描述性的答案:stackoverflow.com/questions/51969269/…
【解决方案4】:

在 YouTube 上有所谓的“嵌入设置”,视频的所有者可以决定是否允许。

这是一个例子: JSFiddle

<iframe width="560" height="315" src="https://www.youtube.com/embed/videoseries?list=PLsyvDWwjkTqtOmqAiTzzfHspTAztB-udL" frameborder="0" gesture="media" allow="encrypted-media" allowfullscreen></iframe>
<iframe width="560" height="315" src="https://www.youtube.com/embed/JfJYHfrOGgQ" frameborder="0" gesture="media" allow="autoplay; encrypted-media" allowfullscreen></iframe>

您可以在这里找到更多详细信息:YouTube Restrict embedding

【讨论】:

猜你喜欢
  • 2014-02-16
  • 1970-01-01
  • 2012-10-24
  • 2014-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-19
相关资源
最近更新 更多