我正在尝试在HTML中使用嵌入的youtube代码,但是当我按播放按钮时,它说“该视频不可用”。我正在使用以下HTML代码:
<iframe width="560" height="315" src="https://www.youtube.com/embed/JfJYHfrOGgQ" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>
Run Code Online (Sandbox Code Playgroud)
谁能帮我这个忙吗?我也尝试了其他嵌入的youtube视频,但仍然说了同样的话。我正在使用Chrome。

小智 10
TL; 博士
Youtube 只允许 https 页面使用嵌入/iframe 进行流式传输。
确保视频所有者允许嵌入。
设置限制较少的引荐来源政策,例如“no-referrer-when-downgrade” ,以允许 youtube 知道请求的来源。在 django 中,您可以通过添加以下行来做到这一点
settings.py
SECURE_REFERRER_POLICY = "no-referrer-when-downgrade"
Run Code Online (Sandbox Code Playgroud)
长读:
如果您最近在 django 应用程序中遇到此问题,可能是因为 django 3 中的引用策略最近发生了变化。在此处阅读更多
当您为 youtube 视频添加 iframe 时(假设视频所有者允许嵌入),引荐来源(播放视频的主机来源)通过 iframe 内的脚本发送到 youtube(嵌入 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"
Run Code Online (Sandbox Code Playgroud)
上述策略规定,当访问协议降级时,referrer 将作为空发送,否则源将作为referrer 发送(这是可以接受的)。鉴于此,youtube 只允许httpsorigins,在这种情况下,这意味着如果 iframe 嵌入在带有 https 的网页中,则将正确发送引荐来源网址,并且在通过此类嵌入播放 youtube 视频时不会出现问题。
我最近遇到了同样的问题,它与视频所有者的嵌入设置无关,显然youtube禁止在没有公共域的本地主机环境中嵌入一些视频,您的视频可以毫无问题地通过公共域/子域进行嵌入,即:将@PStarczewski答案中jsfiddle中的src值替换为您的视频链接,它将正常工作
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>
Run Code Online (Sandbox Code Playgroud)
在这里您可以找到有关此内容的更多详细信息:YouTube 限制嵌入