ChatGPT解决这个技术问题 Extra ChatGPT

如何在 iframe 中嵌入自动播放的 YouTube 视频?

我正在尝试嵌入 YouTube 视频的新 iframe 版本并让它自动播放。

据我所知,没有办法通过修改 URL 的标志来做到这一点。有没有办法通过使用 JavaScript 和 API 来做到这一点?

有没有办法在视频开始播放时静音,通过代码,我不想用声音让我的用户感到惊讶
浏览器有相应的设置

m
mjhm

这适用于 Chrome,但不适用于 Firefox 3.6(警告:RickRoll 视频):

<iframe width="420" height="345" src="http://www.youtube.com/embed/oHg5SJYRHA0?autoplay=1" frameborder="0" allowfullscreen></iframe>

JavaScript API for iframe embeds 存在,但仍作为实验性功能发布。

更新:现在完全支持 iframe API,"Creating YT.Player objects - Example 2" 显示了如何在 JavaScript 中设置“自动播放”。


提示:在移动设备上,由于限制,src 参数和 api 调用都可能不起作用:developers.google.com/youtube/…
我发现在移动设备(Android 5.0 上的 Webview)上没有触发功能 onYouTubeIframeAPIReady()。有人有解决方案吗?
有没有办法在视频开始播放时静音,通过代码,我不想用声音让我的用户感到惊讶
您可能还需要:allow="autoplay" 为您的 iFrame
M
MatayoshiMariano

自 2018 年 4 月以来,Google 对 Autoplay Policy 进行了一些更改。您不仅需要添加 autoplay=1 作为查询参数,还需要添加 allow='autoplay' 作为 iframe 的属性

所以你将不得不做这样的事情:

<iframe src="https://www.youtube.com/embed/VIDEO_ID?autoplay=1" allow='autoplay'></iframe>

autoplay=1 作为参数是不够的(写作时间 7 月 20 日)。我想将 allow='autoplay' 添加到 iframe 以使自动播放功能正常工作。
@Gkiokan 是的,你需要那个。我在片段中有那个:)
是的,我想向其他人说明,解决方案不仅是 URL 中的参数,而且是额外的参数 :) 也许你应该明确提及。
T
Tim Vermaelen

2018 年 8 月,我没有找到有关 iframe 实施的工作示例。其他问题仅与 Chrome 有关,这有点泄露了。

您必须静音 mute=1 才能在 Chrome 上自动播放。使用 autoplay=1 作为参数,FF 和 IE 似乎工作得很好。

<iframe src="//www.youtube.com/embed/{{YOUTUBE-ID}}?autoplay=1&mute=1" name="youtube embed" allow="autoplay; encrypted-media" allowfullscreen></iframe>

迄今为止最有帮助的答案。说得通。
非常感谢您的回答,但是在自动播放视频后如何取消静音?
关键是嵌入式视频不可能以编程方式进行。为了取消静音,用户增加他的播放器的音量。那时,他甚至同意播放音频。
这是与浏览器相关的事情,而不是 youtube 的事情:developer.chrome.com/blog/autoplay
d
develCuy

youtube 的嵌入代码默认关闭自动播放。只需在“src”属性的末尾添加 autoplay=1。例如:

<iframe src="http://www.youtube.com/embed/xzvScRnF6MU?autoplay=1" width="960" height="447" frameborder="0" allowfullscreen></iframe>

?autoplay=1 添加到 src
是的,实际上 autoplay=1 while ?表示 src 可能有颜色、控件等参数,每个参数由 & 分隔。符号。详细描述可以在这里看到developers.google.com/youtube/player_parameters#Parameters
b
bdanin

在 iframe src 的末尾,添加 &enablejsapi=1 以允许在视频上使用 js API

然后用jquery:

jQuery(document).ready(function( $ ) {
  $('.video-selector iframe')[0].contentWindow.postMessage('{"event":"command","func":"playVideo","args":""}', '*');
});

这应该会在 document.ready 上自动播放视频

请注意,您也可以在 click 函数中使用它来单击另一个元素以开始视频

更重要的是,您无法在移动设备上自动启动视频,因此用户必须始终单击视频播放器本身才能启动视频

编辑:我实际上不是 100% 确定 document.ready iframe 会准备好,因为 YouTube 仍然可以加载视频。我实际上在点击函数中使用了这个函数:

$('.video-container').on('click', function(){
  $('video-selector iframe')[0].contentWindow.postMessage('{"event":"command","func":"playVideo","args":""}', '*');
  // add other code here to swap a custom image, etc
});

利用这个答案,并将 jQuery 选择器包装在 setTimeout 中对我有用。
同样在这里,只需每秒触发几次事件,它就会起作用。
这不是频繁触发事件! YouTube 最近更新了他们关于自动播放嵌入视频的政策。新政策是视频不能自动播放,直到页面上有真正的用户交互(点击、滚动......)。我认为在您的情况下,由于您每秒都在触发代码,因此代码在第一次用户交互后才正常运行,因此您认为原因是事件的频繁触发!然而,每秒触发这样的代码并不是一个好习惯!
V
Victoria

2014 iframe 嵌入关于如何嵌入带有自动播放功能的 youtube 视频,并且在剪辑末尾没有建议的视频

rel=0&amp;autoplay 

下面的例子: .

<iframe width="640" height="360" src="//www.youtube.com/embed/JWgp7Ny3bOo?rel=0&amp;autoplay=1" frameborder="0" allowfullscreen></iframe>

S
Salman A

您可以与 IFRAME 和 OBJECT 嵌入一起使用的标志或参数在此处记录;关于哪个参数适用于哪个播放器的详细信息也明确提到:

YouTube Embedded Players and Player Parameters

您会注意到所有播放器(AS3、AS2 和 HTML5)都支持 autoplay


C
Community

给不知道的人的多个查询提示(过去的我和未来的我)

如果您使用 url 进行单个查询,?autoplay=1 有效as shown by mjhm's answer

<iframe src="https://www.youtube.com/embed/oHg5SJYRHA0?autoplay=1"></iframe>

如果您要进行多个查询,请记住第一个以 ? 开头,而其余的以 & 开头

假设您要关闭相关视频但启用自动播放...

这有效

<iframe src="https://www.youtube.com/embed/oHg5SJYRHA0?rel=0&autoplay=1"></iframe>

这有效

<iframe src="https://www.youtube.com/embed/oHg5SJYRHA0?autoplay=1&rel=0"></iframe>

但是这些都行不通。。

<iframe src="https://www.youtube.com/embed/oHg5SJYRHA0?rel=0?autoplay=1"></iframe>

<iframe src="https://www.youtube.com/embed/oHg5SJYRHA0&autoplay=1&rel=0"></iframe>

示例比较

https://jsfiddle.net/Hastig/p4dpo5y4/

更多信息

阅读下面 NextLocal 的回复,了解有关使用多个查询字符串的更多信息


你的不起作用的原因是你已经有 ?rel=0 在那里。如果您删除它会起作用。如果您愿意,请阅读有关查询字符串语法 here 的更多信息。 ?rel=0?autoplay=1 应该是 ?autoplay=1?rel=0&autoplay=1
@NextLocal 谢谢,下次我处理 iframe youtube 视频时,我会回到这个并编辑/删除我的答案。
您提供的示例 http://www.youtube.com/embed/oHg5SJYRHA0&autoplay=1 肯定行不通,但 https://www.youtube.com/embed/oHg5SJYRHA0?autoplay=1 应该
@NextLocal 哈,我现在明白了。不知道我怎么没有意识到 :D 再次感谢。
有没有办法在视频开始播放时静音,通过代码,我不想用声音让我的用户感到惊讶
J
Jonas WebDev

现在,我在 iframe 标记上添加了一个新属性“允许”,例如:

allow="加速度计;自动播放;加密媒体;陀螺仪;画中画"

最终代码是:

<iframe src="https://www.youtube.com/embed/[VIDEO-CODE]?autoplay=1" 
frameborder="0" style="width: 100%; height: 100%;"
allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"></iframe>

起作用了!我不明白为什么页面加载有时只显示视频而不是其他时间!
拥有所有这些但仍然无法正常工作:(
M
MattAllegro

为了让 mjhm 于 2018 年 5 月在 Chrome 66 上工作得到接受的答案,我将 allow=autoplay 添加到 iframe 并将 enable_js=1 添加到查询字符串:

<iframe allow=autoplay width="420px" height="345px" src="http://www.youtube.com/embed/oHg5SJYRHA0?autoplay=1&enable_js=1"></iframe>

V
Vasfed

1 - 将 &enablejsapi=1 添加到 IFRAME SRC

2 - jQuery函数:

  $('iframe#your_video')[0].contentWindow.postMessage('{"event":"command","func":"playVideo","args":""}', '*');

工作正常


在我的情况下,它可以从控制台工作,或者当我已经手动与视频交互时。负载不工作,甚至超时
A
Ashwini Kumar

如果有人正在寻找,这是一个完美的解决方案,自动播放*是这里的关键,任何地方都没有提到。

  <iframe allow="autoplay *; fullscreen *" allowfullscreen="true" 
      src="https://example.com">
   </iframe>

&如果您想完全延迟加载 youtube 视频,请使用此-

  <iframe
        srcdoc="<style>*{padding:0;margin:0;overflow:hidden}html,body{height:100%}img,span{position:absolute;width:100%;top:0;bottom:0;margin:auto}span{height:1.5em;text-align:center;font:48px/1.5 sans-serif;color:white;text-shadow:0 0 0.5em black}</style><a href=https://www.youtube.com/embed/unICbsPGFIA?autoplay=1><img src=https://img.youtube.com/vi/zEkgWzi5T-Y/hqdefault.jpg><span>▶</span></a>"
        src="https://www.youtube.com/embed/unICbsPGFIA?autoplay=1&loop=1&playlist=zEkgWzi5T-Y"
        frameborder="0"
        allow="accelerometer; autoplay *; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
        allowfullscreen
      ></iframe>

H
HTML5 developer

要使用 javascript api,

<script type="text/javascript" src="swfobject.js"></script>
  <div id="ytapiplayer">
    You need Flash player 8+ and JavaScript enabled to view this video.
  </div>

  <script type="text/javascript">

    var params = { allowScriptAccess: "always" };
    var atts = { id: "myytplayer" };
    swfobject.embedSWF("http://www.youtube.com/v/OyHoZhLdgYw?enablejsapi=1&playerapiid=ytplayer&version=3",
                       "ytapiplayer", "425", "356", "8", null, null, params, atts);

  </script>

使用 id 播放 youtube:

swfobject.embedSWF

参考:https://developers.google.com/youtube/js_api_referencemagazine


P
Paul Roub
<iframe width="560" height="315" 
        src="https://www.youtube.com/embed/9IILMHo4RCQ?rel=0&amp;controls=0&amp;showinfo=0&amp;autoplay=1" 
        frameborder="0" allowfullscreen></iframe>

D
Davide Carpini

2018 年 12 月,

寻找自动播放、循环播放、静音的 youtube 视频以进行反应。

其他答案没有奏效。

我找到了一个带有库的解决方案:react-youtube

class Video extends Component {

    _onReady(event) {
        // add mute
        event.target.mute();
        // add autoplay
        event.target.playVideo();
    }

    render() {
        const opts = {
            width: '100%',
            height: '700px',
            playerVars: {
                // remove video controls 
                controls: 0,
                // remove related video
                rel: 0
            }
        };

        return (
            <YouTube
                videoId="oHg5SJYRHA0"
                opts={opts}
                // add autoplay
                onReady={this._onReady}
                // add loop
                onEnd={this._onReady}
            />
        )
    }

}