web-dev-qa-db-fra.com

Comment lire automatiquement des vidéos sur iOS sur youtube.com

Lorsque je définis la lecture automatique sur true pour une vidéo YouTube (IFrame API) sur mon site, cela ne fonctionne pas. Toute la documentation indique Apple désactive la lecture automatique sur iOS pour des raisons de bande passante.

Cependant, je vois que les vidéos sont lues automatiquement (sans cliquer sur l'élément vidéo) sur youtube.com sur iPad. Comment YouTube a-t-il fonctionné? Il serait difficile d'imaginer Apple fait quelque chose de spécial uniquement pour YouTube.

28
vsky

Il semble que l'équipe de Youtube utilise l'interaction de l'utilisateur lorsque vous appuyez/cliquez sur un bouton vidéo pour autoriser la reproduction.

N'oubliez pas que youtube.com est une SPA (application à page unique), il n'y a donc pas de rechargement ou de redirection de page.

Ainsi, la lecture automatique sur youtube.com n'est pas activée.

5

Je suis tombé sur une question/exigence similaire mais plus compliquée.

Je dois montrer une vidéo YouTube sur une fenêtre contextuelle modale. Une fenêtre contextuelle s'affiche en un clic. Ont pris le code de l'API YouTube (De https://developers.google.com/youtube/iframe_api_reference ) et modifié un peu pour fonctionner avec Bootstrap popup.

Ci-dessous mon code

    <div class="modal" id="videoModal" tabindex="-1" role="dialog">
    <div class="modal-dialog" role="document">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                    <span aria-hidden="true">&times;</span>
                </button>
            </div>
            <div class="modal-body">
                <div class="videoWrapper">
                    <!-- 1. The <iframe> (and video player) will replace this <div> tag. -->
                    <div id="player"> </div>
                </div>
            </div>
        </div>
    </div>
</div>
<script type="text/javascript">
    // 2. This code loads the IFrame Player API code asynchronously.
    var tag = document.createElement('script');

    tag.src = "https://www.youtube.com/iframe_api";
    var firstScriptTag = document.getElementsByTagName('script')[0];
    firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

    // 3. This function creates an <iframe> (and YouTube player)
    //    after the API code downloads.
    var player;
    function onYouTubeIframeAPIReady() {
        player = new YT.Player('player', {
            height: '360',
            width: '640',
            videoId: 'YOUR VIDEO ID',
            events: {
                'onReady': onPlayerReady,
                'onStateChange': onPlayerStateChange
            }
        });
    }

    // 4. The API will call this function when the video player is ready.
    function onPlayerReady(event) {
        //event.target.playVideo();// Nullifying the action otherwise the video will play as soon as page loads

    }

    // 5. The API calls this function when the player's state changes.
    //    The function indicates that when playing a video (state=1),
    //    the player should play for six seconds and then stop.
    var done = false;
    function onPlayerStateChange(event) {
        if (event.data == YT.PlayerState.PLAYING && !done) {
            setTimeout(stopVideo, 6000);
            done = true;
        }
    }
    function stopVideo() {
        player.stopVideo();
    }

    function ShowPopup() {
        $('#videoModal').modal('show');
        player.playVideo();
    }
    //Stop video when bootstrap popup is closed
    $("#videoModal").on('hide.bs.modal', function () {
        player.stopVideo();
    });

</script>
0
Crennotech

Vous pouvez le faire avec javascript.

Voici un exemple:

<div class="video-container">
    <div id="player"> </div> <!--<iframe width="960" height="720" src="//www.youtube.com/embed/5YptIh_avrM?rel=0&autoplay=1" frameborder="0" allowfullscreen></iframe>-->

</div>

<script>
  // 2. This code loads the IFrame Player API code asynchronously.
  var tag = document.createElement('script');

  tag.src = "https://www.youtube.com/iframe_api";
  var firstScriptTag = document.getElementsByTagName('script')[0];
  firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

  // 3. This function creates an <iframe> (and YouTube player)
  //    after the API code downloads.
  var player;
  function onYouTubeIframeAPIReady() {
    player = new YT.Player('player', {
      height: '720',
      width: '960',
      videoId: 'YOUR_ID_HERE',
      events: {
        'onReady': onPlayerReady,
        'onStateChange': onPlayerStateChange
      }
    });
  }



  // 4. The API will call this function when the video player is ready.
  function onPlayerReady(event) {
    event.target.playVideo();
    event.target.setVolume(20);
  }

  // 5. The API calls this function when the player's state changes.
  //    The function indicates that when playing a video (state=1),
  //    the player should play for six seconds and then stop.
  var done = false;
  function onPlayerStateChange(event) {

  }
  function stopVideo() {
    player.stopVideo();
  }
</script>
0
Bas van Stein