Youtube在手机上嵌入了自动播放功能

时间:2018-01-23 10:25:22

标签: javascript html5 reactjs youtube-api

我使用React在页面上以正确的大小设置iframe与youtube视频。一切正常,但手机无法使用自动播放选项。

有趣的是页面,我所拥有的视频是完美的。

<iframe type="text/html"  allowTransparency="true"  height="100%" width="100%" preload="metadata" gesture="media" allow="encrypted-media" className="autoplay-iframe"
            src={`https://www.youtube.com/embed/`+this.props.autoplay+`?autoplay=1&version=3&html5=1&hd=1&controls=0&loop=1&playlist=`+this.props.autoplay+`&playsinline=1&rel=0&showinfo=0&modestbranding=1&related=0&enablejsapi=1&origin=`+window.location.hostname} frameborder="0"></iframe>

上面是我的iframe代码。 我剪切了iframe代码的一部分但是样式属性中只有样式。这对自动播放并不重要。 其他页面的最终URL也一样。我不知道为什么。我有什么提示可以解决这个问题吗?

提前致谢。

6 个答案:

答案 0 :(得分:3)

我能够播放 Youtube 视频(无需静音)。因为内嵌加载 Youtube 视频让 Google 及其新的 Core Web Vitals 感到不安,所以我们实现了一个缩略图占位符,当点击时 (jQuery) 开始使用 Youtube Iframe API 加载视频。一开始我也无法让它们自动播放。该问题已通过让 API 嵌入 iframe 来解决——而不是事先将 iframe 放置到位。它在 iOS Safari、Chrome 和 Firefox 上自动播放。以下是对我有用的方法:

文档准备就绪:

var tag = document.createElement('script');

tag.src = "https://www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
function onYouTubeIframeAPIReady(yt_id, iframe_id, iframe_width, iframe_height){
    player = new YT.Player(iframe_id, {
        width: iframe_width,
        height: iframe_height,
        videoId: yt_id,
        playerVars: { 'autoplay': 1, 'playsinline': 1 },
            events: {
                'onReady': onPlayerReady
            }
    });
}

function onPlayerReady(event) {
    //event.target.mute();
    event.target.setVolume(70);
    event.target.playVideo();
}

点击事件:

$('.yt_video_link').on('click', function(e) {
    e.preventDefault();
    var div_id      = $(this).attr('id');
    var div_iframe  = div_id + '_iframe';
    var yt_id       = $('#' + div_id).data('ytid');

    $('#' + div_id + ' .yt_video_play').css('display', 'none');

    onYouTubeIframeAPIReady(yt_id, div_iframe, 560, 315);

});

HTML:

<div id='yt_video_desktop' class='yt_video_link mobile_hide' data-ytid='<?=$yt_id?>'>
    <div id='yt_video_desktop_player' class='yt_video'>
        <img src='/catalog/images/yt_video_thumb_<?=$yt_id?>.jpg' alt='play desktop video' width='768' height='432' id='yt_video_desktop_iframe'>
    </div>
    <div class='yt_video_play'></div>
</div>

答案 1 :(得分:2)

您将无法实现此功能,因为有意禁用所有移动设备。原因是用户保存蜂窝数据。它也在this post中引用。

  

视频自动播放不起作用的原因很简单。功能是   iOS和Android中的移动设备故意disabled。   这样做的原因是为移动用户节省了资金。这样的设备   (特别是移动电话)经常使用收费的数据连接   带宽。他们有数据限制并收取费用。

此声明也得到以下SO帖子的支持。

答案 2 :(得分:1)

通过添加参数playsinline: 1,我设法使自动播放在android和ios上正常工作。

  createYoutubePlayer() {
      this.youtubePlayer = new YT.Player('youtubePlayer', {
      videoId: 'YOURID', // YouTube Video ID
      width: 277,               // Player width (in px)
      height: 600,              // Player height (in px)
      playerVars: {
        autoplay: 1,        // Auto-play the video on load
        controls: 0,        // Show pause/play buttons in player
        showinfo: 1,        // Hide the video title
        modestbranding: 1,  // Hide the Youtube Logo
        loop: 1,            // Run the video in a loop
        fs: 0,              // Hide the full screen button
        cc_load_policy: 0, // Hide closed captions
        iv_load_policy: 3,  // Hide the Video Annotations
        autohide: 1,         // Hide video controls when playing
        playsinline: 1, //forbid fullscreen on ios
      },
      events: {
        onReady: (e) => {
          e.target.mute();
        },
        onStateChange: (e) => {this.onPlayerStateChange(e)}
      }
    });
  }

答案 3 :(得分:0)

规则已经改变,所以大多数新手机现在都会让你自动播放,但大多数视频流网站如youtube和vimeo还没有启用这项功能。 html5视频工作但iframe没有的原因是因为youtube禁用了它。

答案 4 :(得分:0)

Preview Google官方声明“由于此限制,诸如autoplay,playVideo(),loadVideoById()之类的功能和参数无法在所有移动环境中正常工作。

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

答案 5 :(得分:-3)

视频自动播放不起作用的原因很简单。故意在移动设备的iOS和Android中禁用了此功能。这样做的原因是为了节省移动用户的钱。此类设备(尤其是手机)通常使用按带宽收费的数据连接。