【问题标题】:How to embed an autoplaying YouTube video in an iframe?如何在 iframe 中嵌入自动播放的 YouTube 视频?
【发布时间】:2024-05-21 15:30:02
【问题描述】:

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

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

【问题讨论】:

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

标签: javascript html iframe youtube youtube-api


【解决方案1】:

这适用于 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" for your iFrame
【解决方案2】:

自 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 是的,你需要那个。我在 sn-p 中有那个 :)
  • 是的,我想向其他人说明,解决方案不仅是 URL 中的参数,而且是额外的参数 :) 也许你应该明确提及。
【解决方案3】:

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

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

【讨论】:

【解决方案4】:

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
【解决方案5】:

在 iframe src 末尾,添加&amp;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 仍然可以加载视频。我实际上是在 click 函数中使用这个函数:

$('.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 最近更新了他们关于自动播放嵌入视频的政策。新政策是视频不能自动播放,直到页面上有真正的用户交互(点击、滚动......)。我认为在您的情况下,由于您每秒都在触发代码,因此代码在第一次用户交互后才正常运行,所以您认为原因是事件的频繁触发!然而,每秒触发这样的代码并不是一个好习惯!
【解决方案6】:

2014 iframe embed 介绍如何嵌入带有自动播放功能的 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>

【讨论】:

    【解决方案7】:

    标志,或可用于 IFRAME 和 OBJECT 嵌入的参数在此处记录;还清楚地提到了有关哪个参数适用于哪个播放器的详细信息:

    YouTube Embedded Players and Player Parameters

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

    【讨论】:

      【解决方案8】:

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

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

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

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

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

      这行得通

      <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&amp;autoplay=1
      • @NextLocal 谢谢,下次我处理 iframe youtube 视频时,我会回来编辑/删除我的答案。
      • 您提供的示例http://www.youtube.com/embed/oHg5SJYRHA0&amp;autoplay=1 肯定行不通,但https://www.youtube.com/embed/oHg5SJYRHA0?autoplay=1 应该
      • @NextLocal 哈,我现在明白了。不知道我怎么没有意识到:D再次感谢。
      • 有没有办法在视频开始播放时静音,通过代码,我不想用声音让我的用户感到惊讶
      【解决方案9】:

      现在我在 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>
      

      【讨论】:

      • 奏效了!我不明白为什么页面加载有时只显示视频而不是其他时间!
      • 拥有所有这些但仍然无法正常工作:(
      【解决方案10】:

      为了让 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>
      

      【讨论】:

        【解决方案11】:

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

        2 - jQuery 函数:

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

        工作正常

        【讨论】:

        • 在我的情况下,它可以从控制台运行,或者当我已经手动与视频交互时。负载不工作,甚至超时
        【解决方案12】:

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

          <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>
        

        【讨论】:

          【解决方案13】:

          要使用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

          【讨论】:

            【解决方案14】:
            <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>
            

            【讨论】:

              【解决方案15】:

              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}
                          />
                      )
                  }
              
              }
              

              【讨论】: